Вы не можете сделать это с диалогом по умолчанию. Но, очевидно, вы можете начать с собственного макета в диалоге.
Custom AlertDialog
Этот полный пример включает передачу данных обратно в Activity.
![enter image description here](https://i.stack.imgur.com/keoAH.png)
Создание пользовательского макета
В этом простом примере используется макет с EditText
, но вы можете заменить его на что угодно.
custom_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Используйте диалоговое окно в коде
. Ключевыми частями являются
- , использующие
setView
для назначения пользовательского макета для AlertDialog.Builder
- , отправляющего любыеданные возвращаются в действие при нажатии кнопки диалога.
Это полный код примера проекта, показанного на изображении выше:
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void showAlertDialogButtonClicked(View view) {
// create an alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Name");
// set the custom layout
final View customLayout = getLayoutInflater().inflate(R.layout.custom_layout, null);
builder.setView(customLayout);
// add a button
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// send data from the AlertDialog to the Activity
EditText editText = customLayout.findViewById(R.id.editText);
sendDialogDataToActivity(editText.getText().toString());
}
});
// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();
}
// do something with the data coming from the AlertDialog
private void sendDialogDataToActivity(String data) {
Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
}
}
Примечания
- Если вы обнаружите, что используете это в нескольких местах, подумайте о создании подкласса
DialogFragment
, как описано в документации .
См. Также