Android 自定义对话框不需要的底部空间

Android 自定义对话框不需要的底部空间,android,android-dialog,Android,Android Dialog,我正在创建一个自定义对话框,而不是DialogFragment或AlertDialog 我的观点是,它应该是全屏色调,按钮底部对齐一些小的空白,我正在克隆iOS操作表对话框。对不起,这不是我的主意 我已经创建了一个落后于导航栏的对话框,我想这是背景色调全屏显示所必需的,然后我在对话框窗口中添加了一些填充-与导航栏高度相同 它工作正常,但它有一些额外的底部填充或空白-我无法找到它来自哪里 这是Dialog的主题: <style name="ActionSheetDialogTheme" pa

我正在创建一个自定义对话框,而不是DialogFragment或AlertDialog

我的观点是,它应该是全屏色调,按钮底部对齐一些小的空白,我正在克隆iOS操作表对话框。对不起,这不是我的主意

我已经创建了一个落后于导航栏的对话框,我想这是背景色调全屏显示所必需的,然后我在对话框窗口中添加了一些填充-与导航栏高度相同

它工作正常,但它有一些额外的底部填充或空白-我无法找到它来自哪里

这是Dialog的主题:

<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);
    }
}