我正在创建自定义对话框(不是DialogFragment或AlertDialog!)。
我的观点是它应该是全屏色调和按钮底部对齐一些小边距(我正在克隆iOS ActionSheet对话框。抱歉 - 不是我的想法:()。
我创建了一个落后于NavBar的对话框(我猜这需要背景色调为全屏),然后我在对话框窗口添加一些填充 - 与NavBar高度相同。
它工作正常,但它有一些额外的底部填充或边距 - 我无法找到它来自哪里。
这是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>
这是我修补对话框窗口大小和底部填充的方法:
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);
}
}
日志写信给我I/ActionSheet﹕ NavBar height = 96, will be set as bottom padding
看起来像这样:
如果我删除了对话框布局中的所有底部填充和边距并删除了NavBar高度修补,它看起来像这样:
根据我的逻辑,在最后一个截图按钮应该低于NavBar,所以它是一些不需要的填充大约10或15 dp。
有人可以帮我弄清楚它的来源吗?
P上。 S。:刚刚意识到:NavBar称其高度为96dp。它与我的按钮大约相同,高度为50dp。因此NavBar高度计算不正确,但为什么?
P上。 P. S.:再次 - 抱歉iOS的外观和感觉 - 真的不是我的想法。