我正在尝试显示带有自定义视图的对话框。布局非常简单;基本上有两个LinearLayouts
;每个布局都带有TextView
和EditText
。
我正在使用的布局是:
<?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();
在我看来,对话框的宽度应该更小,以便布局填充对话框。 我尝试了几件事:
那么,我需要做些什么来获得正确大小的对话框?
修改 更新了图片
答案 0 :(得分: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();
答案 1 :(得分:1)
删除TextView并在EditText上使用android:hint
。将EditText in One LinearLayout
与vertical Orientation.
同时更改android:layout_width of EditText as fill_parent
及其父级。
答案 2 :(得分:1)
您已在lines=5
中设置EditText
,因此占用了空间。使用dp
代替dip
,请检查this
现在你想如何显示它?给出一些参考,以便确定确切的问题。
答案 3 :(得分:0)
这些答案都没有帮助我,所以这是我的解决方案(也许有人觉得它很有用)。
我在NumberPicker
中显示的AlertDialog
出现了类似的问题。 NumberPicker
有自己的布局,以相对单位("match_parent"
,android:layout_weight
,...)定义。
没有rootView
的展示布局会导致布局使用默认参数,因此布局大小不符合预期。使用rootView
扩展布局会导致IllegalStateException
:“当AlertDialog#create()
方法将视图附加到create()
时,指定的子项已经有一个父”内部对话框布局。
如How to make an alert dialog fill 90% of screen size?中所述,您可以覆盖默认参数,如下所示:
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
,因此将使用更新的{创建对话框{1}}根据当前的屏幕方向。这是一个简单的例子How to create DialogFragment。
上一个示例包含活动和片段之间的通信(活动需要接收有关对话事件的消息)。这需要定义自定义侦听器接口+正确覆盖dialogDim
方法。以下文章解释了所有这些步骤:Cummunication between Fragment and Activity。
答案 4 :(得分:-1)
使用构建器并在显示
的同时添加宽度和高度builder.show().getWindow().setLayout(600, 250);