0

我正在尝试显示一个带有自定义视图的对话框。布局非常简单;基本上有两个LinearLayouts;每个带有 aTextViewEditText.

我正在使用的布局是这样的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
  <LinearLayout
    android:orientation="vertical"
    android:layout_margin="5dip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/ll_element1">    
    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Element 1"/>
    <EditText
      android:layout_width="250dip"
      android:layout_height="wrap_content"
      android:lines="5"/>
  </LinearLayout>
  <LinearLayout
    android:orientation="vertical"
    android:layout_margin="5dip"
    android:layout_width="wrap_content"
    android:layout_below="@id/ll_element1"
    android:layout_height="wrap_content">    
    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Element 2"/>
    <EditText
      android:layout_width="250dip"
      android:layout_height="wrap_content"
      android:lines="5"/>
  </LinearLayout>
</RelativeLayout>

但是,如果我将其设置为对话框视图,则如下所示: 错误大小的对话框

我显示对话框的代码是这样的:

var view = this.LayoutInflater.Inflate(Resource.Layout.Custom_Dialog, null);

var dialog = new AlertDialog.Builder(this)
            .SetView(view)
            .Create();

dialog.Show();

在我看来,对话框的宽度应该更小,以便布局填充对话框。我尝试了几件事:

  • 使用 LinearLayout 而不是 RelativeLayout
  • 设置所有尺寸
  • 使用 Dialog 而不是 AlertDialog

那么,我该怎么做才能获得正确大小的对话框?

编辑 更新了图片

4

5 回答 5

2

试试这个

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_element1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="5dip"
    android:orientation="vertical" >

    <EditText
        android:layout_width="250dip"
        android:layout_height="wrap_content"
        android:hint="Element 1"
        android:lines="5" />

    <EditText
        android:layout_width="250dip"
        android:layout_height="wrap_content"
        android:hint="Element 2"
        android:lines="5" />

</LinearLayout>

在你的活动中

final Dialog dialog = new Dialog(YourActivity.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.yourCustomdialog);
dialog.setCancelable(true);
dialog.show();
于 2012-08-23T13:19:24.893 回答
1

删除 TextView 并android:hint在 EditText 上使用。将两者EditText in One LinearLayoutvertical Orientation.

也改变android:layout_width of EditText as fill_parent它的父级。

于 2012-08-23T13:11:34.413 回答
1

你已经lines=5在你的 中设置了EditText,所以它占用了空间。使用dp代替dip,检查这个

现在你希望它如何显示?提供一些参考,以便确定确切的问题。

于 2012-08-23T13:16:45.720 回答
0

这些答案都没有帮助我,所以这是我的解决方案(也许有人觉得它有用)。

我有类似的问题,NumberPicker显示在AlertDialog. NumberPicker有自己的布局,以相对单位("match_parent",,android:layout_weight...)定义。

在没有默认参数的情况下膨胀布局rootView,因此布局大小与预期不符。由于方法将视图附加到内部对话框布局,因此在调用时膨胀布局rootView会导致IllegalStateException“指定的子级已经有父级” 。AlertDialog#create()create()

如何使警报对话框填充 90% 的屏幕尺寸中所述?您可以像这样覆盖默认参数:

AlertDialog dialog = builder.show();

WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.copyFrom(dialog.getWindow().getAttributes());
params.width = 300; // LayoutParams.MATCH_PARENT will match dialog_layout which can be stretched to fullwidth.
params.height = 300;
dialog.getWindow().setAttributes(params);

除了使用以像素为单位的固定宽度和高度,您可以创建以dialog_helper.xml相对单位(android:id="@+id/dialog_dimension"然后将此布局包含到活动/片段布局中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ...>
    <LinearLayout ....>
        ...
    </LinearLayout>
    <include layout="@layout/dialog_helper"/>
</RelativeLayout>

由于此视图包含在活动布局中,因此它具有“测量的”宽度和高度,可用作对话框参数:

View dialogDim = findViewById(R.id.dialog_dimension);
params.width = dialogDim.getMeasuredWidth();
params.height = dialogDim.getMeasuredHeight();

计算相对大小dialog.getWindow().getAttributes()不起作用,因为它包含一些负值常量(MATCH_PARENT 或其他)。因此,如果要计算相对于显示大小的对话框大小,请使用screen metrics

请注意,屏幕旋转后将使用相同的宽度和高度,因此我建议将您的对话框包装到DialogFragment更改设备配置时自动重新创建的对话框中,因此将dialogDim根据当前屏幕方向更新创建对话框。这是一个简单的示例如何创建 DialogFragment

前面的例子包含了activity和fragment之间的通信(activity需要接收关于对话事件的消息)。这需要定义自定义侦听器接口 + 正确覆盖Fragment#onAttach()方法。所有这些步骤都在以下文章中进行了解释:Fragment 和 Activity 之间的 Cummunication

于 2017-07-15T20:01:09.987 回答
-1

在显示时使用构建器并添加宽度和高度

builder.show().getWindow().setLayout(600, 250);
于 2020-01-23T23:45:06.413 回答