我想显示一个自定义警报对话框,其结构已在XML文件中定义。这是我使用的代码。
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(findViewById(R.layout.inputform));
builder.show();
单击按钮时会触发。但是,窗口没有显示出来。我在屏幕顶部有一个透明的灰色层,无法点击任何东西。但是,使用setMessage
或显示复选框等一些基本代码效果很好。谁能指出我做错了什么?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TableLayout android:id="@+id/TableLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TableRow android:id="@+id/TableRow01" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="Room name" android:id="@+id/TextView01"
android:layout_width="fill_parent" android:layout_height="wrap_content"/>
<EditText android:hint="Enter room name" android:id="@+id/EditText01"
android:layout_width="0dp" android:layout_height="wrap_content"
android:layout_weight="1"/>
</TableRow>
<TableRow android:id="@+id/TableRow02" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="Point id" android:id="@+id/TextView02"
android:layout_width="fill_parent" android:layout_height="wrap_content"/>
<EditText android:hint="Enter point id" android:id="@+id/EditText02"
android:layout_width="0dp" android:layout_height="wrap_content"
android:layout_weight="1"/>
</TableRow>
<TableRow android:id="@+id/TableRow03" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:text="OK" android:id="@+id/btnOK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</TableRow>
</TableLayout>
</LinearLayout>
答案 0 :(得分:6)
这是因为findViewById
用于在当前活动的布局中查找特定视图,而不是用于加载整个布局。
您可以使用@Matt's回答,也可以使用LayoutInflater来扩充布局:
LayoutInflater li = getLayoutInflater();
View v = li.inflate(R.layout.inputform);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(v);
builder.show();
(没试过,但我认为它应该有用)。
答案 1 :(得分:4)
试试这个:
Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.inputform);
dialog.show();
答案 2 :(得分:1)
尝试添加builder.create();在builder.show()之前。
答案 3 :(得分:1)
您可以使用以下课程
import android.app.Dialog;
import android.content.Context;
public class CustomDialog extends Dialog {
public CustomDialog(Context context) {
super(context);
}
public static CustomDialog show(Context context, CharSequence title,
CharSequence message) {
return show(context, title, message, false);
}
public static CustomDialog show(Context context, CharSequence title,
CharSequence message, boolean indeterminate) {
return show(context, title, message, indeterminate, false, null);
}
public static CustomDialog show(Context context, CharSequence title,
CharSequence message, boolean indeterminate, boolean cancelable) {
return show(context, title, message, indeterminate, cancelable, null);
}
public static CustomDialog show(Context context, CharSequence title,
CharSequence message, boolean indeterminate,
boolean cancelable, OnCancelListener cancelListener) {
CustomDialog dialog = new CustomDialog(context);
dialog.setTitle(null);
dialog.setCancelable(cancelable);
dialog.setOnCancelListener(cancelListener);
dialog.setContentView(R.layout.test);
dialog.show();
return dialog;
}
}
答案 4 :(得分:1)
表示对话框的简单方法......
AlertDialog dialog ;
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("Your Title Here");
builder.setView(view);//view is your inflate xml layout
dialog = builder.create();
dialog.show();
dialog.dismiss();//whenever you want to dismiss ,put this line
简单对话框here