I've been trying to add two elements in a default AlertDialog but I can't seem to make it work. Here's my code:
// START Dialog
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
TextView tv = new TextView(this);
tv.setText(title);
tv.setPadding(40, 40, 40, 40);
tv.setGravity(Gravity.CENTER);
tv.setTextSize(20);
EditText et = new EditText(this);
etStr = et.getText().toString();
alertDialogBuilder.setView(et);
alertDialogBuilder.setTitle(title);
alertDialogBuilder.setMessage("Input Student ID");
alertDialogBuilder.setCustomTitle(tv);
if (isError)
alertDialogBuilder.setIcon(R.drawable.icon_warning);
// alertDialogBuilder.setMessage(message);
alertDialogBuilder.setCancelable(false);
// Setting Negative "Cancel" Button
alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
// Setting Positive "Yes" Button
alertDialogBuilder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (isError)
finish();
else {
Intent intent = new Intent(
ChangeDeviceActivity.this,
MyPageActivity.class);
startActivity(intent);
}
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
try {
alertDialog.show();
} catch (Exception e) {
// WindowManager$BadTokenException will be caught and the app would
// not display the 'Force Close' message
e.printStackTrace();
}
For now, this is only an EditText
with a message set by alertDialogBuilder.setMessage("Input Student ID");
but I want to make this a TextView
so I can center-justify it. How do I do this?
Haresh Chhelana
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
LinearLayout layout = new LinearLayout(this);
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setLayoutParams(parms);
layout.setGravity(Gravity.CLIP_VERTICAL);
layout.setPadding(2, 2, 2, 2);
TextView tv = new TextView(this);
tv.setText("Text View title");
tv.setPadding(40, 40, 40, 40);
tv.setGravity(Gravity.CENTER);
tv.setTextSize(20);
EditText et = new EditText(this);
etStr = et.getText().toString();
TextView tv1 = new TextView(this);
tv1.setText("Input Student ID");
LinearLayout.LayoutParams tv1Params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
tv1Params.bottomMargin = 5;
layout.addView(tv1,tv1Params);
layout.addView(et, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
alertDialogBuilder.setView(layout);
alertDialogBuilder.setTitle(title);
// alertDialogBuilder.setMessage("Input Student ID");
alertDialogBuilder.setCustomTitle(tv);
if (isError)
alertDialogBuilder.setIcon(R.drawable.icon_warning);
// alertDialogBuilder.setMessage(message);
alertDialogBuilder.setCancelable(false);
// Setting Negative "Cancel" Button
alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
// Setting Positive "OK" Button
alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (isError)
finish();
else {
Intent intent = new Intent(ChangeDeviceActivity.this,
MyPageActivity.class); startActivity(intent);
}
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
try {
alertDialog.show();
} catch (Exception e) {
// WindowManager$BadTokenException will be caught and the app would
// not display the 'Force Close' message
e.printStackTrace();
}
Make one .xml file which include whatever view you want like below.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView1"
android:layout_width="312dp"
android:layout_height="wrap_content"
android:text="Enter your email address :"
android:layout_marginLeft="5dp"
android:textAppearance="?android:attr/textAppearanceSmall"/>
<EditText
android:id="@+id/dialog1Edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:layout_marginTop="10dp"
android:inputType="textEmailAddress">
<requestFocus/>
</EditText>
After that in your .java file implements following code.
View view = View.inflate(this, R.layout.yourxmlname, null);
AlertDialog.Builder alert = new AlertDialog.Builder(this);
// Now set the dialog's content
alert.setContentView(view);
Hope it helps you.
When calling setView()
the original TextView
holding the message gets hidden.
You need to
- create a small layout xml and put the EditText and a TextView to it
- inflate the layout
- get references of the views with
findViewById()
- do something with the views
来源:https://stackoverflow.com/questions/18565482/how-to-add-textview-and-edittext-using-default-alertdialog-programmatically