我尝试将windowFixedHeightMinor
与自定义DialogFragment
结合使用来创建固定大小(实际按比例调整大小)对话框。
我在onCreate
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.MyDialog);
}
主题:
<style name="MyDialog" parent="Base.Theme.AppCompat.Light.Dialog.FixedSize">
<item name="android:windowBackground">@color/light_blue</item>
<item name="android:windowMinWidthMajor">80%p</item>
<item name="android:windowMinWidthMinor">80%p</item>
<item name="windowFixedHeightMinor">80%p</item>
<item name="windowFixedHeightMajor">80%p</item>
</style>
我可以看到正在应用于我的对话框(这就是设置背景的原因)并且正在应用windowMinWidthMajor,因为对话框大约是屏幕大小的80%。但是,对话框始终是屏幕的整个高度。
对话框本身显示为:
MyDialogFragment.newInstance().show(getFragmentManager(), "dialog");
主要供参考,对话框本身如下所示,尽管我已尝试从中删除几乎所有内容,结果相似。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:text="@string/accept"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/done"
android:layout_margin="16dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
/>
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_above="@id/done"
>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<RadioButton
android:text="Pink"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/pink"
android:layout_weight="1" />
<RadioButton
android:text="Purple"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/purple"
android:layout_weight="1" />
</RadioGroup>
</ScrollView>
</RelativeLayout>
我在正常活动中做了一些非常相似的事情(使用windowFixedHeightMinor = 80%)并且似乎工作得很好,所以看起来它应该可以工作,但我没有试过任何变化似乎这样做。
我尝试过的一些事情:
LinearLayout
代替RelativeLayout
WRAP_CONTENT
和MATCH_PARENT
明确将窗口布局设置为setLayout
和setAttributes
,包括onResume
,{{ 1}}和onCreate