忽略对话框片段的宽度和高度
Dialog Fragment width and height ignored
如何设置对话框片段的宽度和高度?我读过的所有内容都说要像这样重写 OnStart 方法:
public override void OnStart()
{
if (Dialog == null)
{
return;
}
int dialogWidth = 300;
int dialogHeight = 75;
Dialog.Window.SetLayout(dialogWidth, dialogHeight);
}
当我这样做时,应用程序崩溃了,我无法捕获错误,因为它显然在我编写的代码之外失败了。如果没有此覆盖,对话框将按预期出现和运行。
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:minWidth="300dp"
android:minHeight="75dp">
<TextView
android:text="Select section."
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textStyle="bold"
android:id="@+id/textView2" />
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:id="@+id/my_spinner" />
<Button
android:text="Ok"
android:layout_width="200px"
android:layout_gravity="center"
android:layout_height="34.5dp"
android:id="@+id/button_ok" />
</LinearLayout>
显然 android:minWidth
和 android:minHeight
设置被忽略了,因为我得到的只是一个小对话框。
最好在 values
文件夹下的 dimens.xml
中定义尺寸:
<resources>
...
<dimen name="dialog_min_width">300dp</dimen>
<dimen name="dialog_min_height">75dp</dimen>
...
</resources>
您可以按如下方式更新 DialogFragment
的 onResume()
方法并尝试:
public void onResume() {
int width = getResources().getDimensionPixelSize(R.dimen.dialog_min_width);
int height = getResources().getDimensionPixelSize(R.dimen.dialog_min_height);
getDialog().getWindow().setLayout(width, height);
super.onResume();
}
Mehmed 代码的 c# 等价物:
public override void OnResume()
{
int width = 300;
int height = 75;
base.OnResume();
}
我发现在 Stack Overflow 上 posted 的很多代码都是 java 代码,我使用的是 c# (Visual Studio 2017) 并且一无所知关于 java 并发现很难转换为 c#,令人沮丧。当我在答案中看到 java 代码时,我通常会直接跳过它。但是看到我问这个问题的方式并且 Mehmed 非常友好地提供了一个可行的解决方案,我觉得有必要 post 进行 c# 转换。
您会注意到我选择不将值放在 dimens.xml
中,我不喜欢将值存储在 "external to the code file" 中然后在代码中检索它们,倾向于调试有时要困难得多。当你这样做时发生的所有事情是编译器用生成的 obj 文件中的值替换代码行,sooooo .. 为什么要这样做?
鉴于这些值永远不会改变,我认为将它们放在 dimens.xml
中没有意义,无论如何要说服我!
如何设置对话框片段的宽度和高度?我读过的所有内容都说要像这样重写 OnStart 方法:
public override void OnStart()
{
if (Dialog == null)
{
return;
}
int dialogWidth = 300;
int dialogHeight = 75;
Dialog.Window.SetLayout(dialogWidth, dialogHeight);
}
当我这样做时,应用程序崩溃了,我无法捕获错误,因为它显然在我编写的代码之外失败了。如果没有此覆盖,对话框将按预期出现和运行。
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:minWidth="300dp"
android:minHeight="75dp">
<TextView
android:text="Select section."
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textStyle="bold"
android:id="@+id/textView2" />
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:id="@+id/my_spinner" />
<Button
android:text="Ok"
android:layout_width="200px"
android:layout_gravity="center"
android:layout_height="34.5dp"
android:id="@+id/button_ok" />
</LinearLayout>
显然 android:minWidth
和 android:minHeight
设置被忽略了,因为我得到的只是一个小对话框。
最好在 values
文件夹下的 dimens.xml
中定义尺寸:
<resources>
...
<dimen name="dialog_min_width">300dp</dimen>
<dimen name="dialog_min_height">75dp</dimen>
...
</resources>
您可以按如下方式更新 DialogFragment
的 onResume()
方法并尝试:
public void onResume() {
int width = getResources().getDimensionPixelSize(R.dimen.dialog_min_width);
int height = getResources().getDimensionPixelSize(R.dimen.dialog_min_height);
getDialog().getWindow().setLayout(width, height);
super.onResume();
}
Mehmed 代码的 c# 等价物:
public override void OnResume()
{
int width = 300;
int height = 75;
base.OnResume();
}
我发现在 Stack Overflow 上 posted 的很多代码都是 java 代码,我使用的是 c# (Visual Studio 2017) 并且一无所知关于 java 并发现很难转换为 c#,令人沮丧。当我在答案中看到 java 代码时,我通常会直接跳过它。但是看到我问这个问题的方式并且 Mehmed 非常友好地提供了一个可行的解决方案,我觉得有必要 post 进行 c# 转换。
您会注意到我选择不将值放在 dimens.xml
中,我不喜欢将值存储在 "external to the code file" 中然后在代码中检索它们,倾向于调试有时要困难得多。当你这样做时发生的所有事情是编译器用生成的 obj 文件中的值替换代码行,sooooo .. 为什么要这样做?
鉴于这些值永远不会改变,我认为将它们放在 dimens.xml
中没有意义,无论如何要说服我!