今天遇到了一个很奇怪的问题,dialog自定义样式后,无法设置宽和高为包含内容,既wrap_content
自定义dialog的样式如下:
<style name="serviceNoteOperationDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/selector_dialog_bgwhrite</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.6</item>
</style>
Window dialogWindow = this.getWindow();
WindowManager.LayoutParams params = dialogWindow.getAttributes();
dialogWindow.setGravity(Gravity.CENTER);
WindowManager m = dialogWindow.getWindowManager();
Display d = m.getDefaultDisplay();
params.width = d.getWidth() - 50;
dialogWindow.setAttributes(params);
this为自定义的dialog继承自Dialog,这里的宽度设置为屏幕的宽度减去50(注:宽和高指定成特定大小或者占屏幕宽高的比例都是可以的,这里说的问题看标题)
高度为默认,发现即使指定高度:params.height=LayoutParams.WRAP_CONTENT也不是包含内容,而是整个屏幕的高度
问题解决:
经过长时间排查,这是由于自定义的这个dialog对应的布局文件引起的:
在一个LinearLayout中多加了这个属性:
android:layout_alignParentBottom="true"
结果就导致了高度始终无法包含内容,最后把这个去掉,改成layout_below问题就解决了,这样不指定高度,就是包含内容的高度,当然为了限制高度,可以在布局文件中指定特定控件的最大高度
其实在布局文件预览里也可以看出来,当设置成alignParentBotton的时候,布局是填充了满了整个视图的,
如下图所示:
去掉那个属性之后,效果如下图所示:
还是有明显的区别的,所以,很多细节还是要我们开发者很用心才能发现的,
希望遇到相同问题的朋友能少走弯路,共勉!