首页 > 解决方案 > 对话框片段宽度和高度被忽略

问题描述

如何设置对话框片段的宽度和高度?我读过的所有内容都说要像这样覆盖 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:minWidthandandroid:minHeight设置被忽略了,因为我得到的只是一个小对话框。

标签: c#androidxamarinvisual-studio-2017

解决方案


Mehmed 代码的 c# 等价物:

    public override void OnResume()
    {
        int width = 300; 
        int height = 75; 
        base.OnResume();
    }

我发现很多关于 Xamarin 的 Stack Overflow 上发布的代码都是 java 代码,我使用 c#(Visual Studio 2017)并且对 java 一无所知,并且发现很难转换为 c#,令人沮丧。当我在答案中看到 java 代码时,我通常会直接跳过它。但是看到我是如何提出这个问题的,而且 Mehmed 很友好地提供了一个可行的解决方案,我觉得有必要发布 ac# 转换。

您会注意到我选择不将值放入 中dimens.xml,我不喜欢将值存储在“代码文件外部”中,然后在代码中检索它们,这有时会使调试变得更加困难。当您这样做时,所发生的一切就是编译器将代码行替换为生成的 obj 文件中的值,sooooo .. 为什么要这样做?

鉴于这些价值观永远不会改变,我认为将它们放入其中毫无意义dimens.xml,无论如何要说服我!


推荐阅读