Android 自定义对话框不需要的底部空间
我正在创建一个自定义对话框,而不是DialogFragment或AlertDialog 我的观点是,它应该是全屏色调,按钮底部对齐一些小的空白,我正在克隆iOS操作表对话框。对不起,这不是我的主意 我已经创建了一个落后于导航栏的对话框,我想这是背景色调全屏显示所必需的,然后我在对话框窗口中添加了一些填充-与导航栏高度相同 它工作正常,但它有一些额外的底部填充或空白-我无法找到它来自哪里 这是Dialog的主题:Android 自定义对话框不需要的底部空间,android,android-dialog,Android,Android Dialog,我正在创建一个自定义对话框,而不是DialogFragment或AlertDialog 我的观点是,它应该是全屏色调,按钮底部对齐一些小的空白,我正在克隆iOS操作表对话框。对不起,这不是我的主意 我已经创建了一个落后于导航栏的对话框,我想这是背景色调全屏显示所必需的,然后我在对话框窗口中添加了一些填充-与导航栏高度相同 它工作正常,但它有一些额外的底部填充或空白-我无法找到它来自哪里 这是Dialog的主题: <style name="ActionSheetDialogTheme" pa
<style name="ActionSheetDialogTheme" parent="android:Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimationTheme</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
日志将我写入I/ActionSheet﹕ 导航栏高度=96,将设置为底部填充
看起来是这样的:
如果我删除对话框布局中的所有底部填充和边距,并删除NavBar高度修补,则如下所示:
根据我的逻辑,在最后一个屏幕截图上,按钮应该在导航栏后面的较低位置,所以它是一些不必要的填充,大约10或15 dp
有人能帮我弄清楚这是从哪里来的吗
附言:刚刚意识到:导航栏说它的高度是96dp。它的高度和我的按钮差不多,是50磅。所以导航栏高度的计算是不正确的,但为什么呢
p.p.S.:再一次-很抱歉模仿iOS的外观-这真的不是我的主意。为什么要设置android:windowFullscreen=true?只需将窗户的重力设置为底部,并添加任何你需要的填充物。尝试了-没有任何区别。
private void patchDialogSize() {
WindowManager manager = (WindowManager) getContext().getSystemService(Activity.WINDOW_SERVICE);
int width = manager.getDefaultDisplay().getWidth();
int height = manager.getDefaultDisplay().getHeight();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.copyFrom(getWindow().getAttributes());
params.width = width;
params.height = height;
getWindow().setAttributes(params);
Resources resources = getContext().getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
int bottomPadding = resources.getDimensionPixelSize(resourceId);
Log.info(TAG, "NavBar height = " + bottomPadding + ", will be set as bottom padding");
dialogContainer.setPadding(0, 0, 0, bottomPadding);
}
}