studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android alertdialog

android - programacion - Obtener el relleno predeterminado para AlertDialog



manual de programacion android pdf (2)

El atributo ?dialogPreferredPadding ahora tiene este valor. Fue introducido en API 22; ver https://developer.android.com/sdk/api_diff/22/changes/android.R.attr.html .

Puede obtener un relleno consistente en sus diálogos personalizados especificando este atributo en el diseño del diálogo. Por ejemplo, android:paddingLeft="?dialogPreferredPadding" los contenidos del diálogo con su título.

Necesito hacer un AlertDialog con una vista personalizada. El mensaje de AlertDialog tiene un relleno predeterminado, pero cuando configuro una vista no tiene relleno, busco el mismo relleno que el predeterminado. Estoy usando un estilo que amplía el tema Holo (si esto es relevante).

AlertDialog.Builder builder = new AlertDialog.Builder(PlaylistListView.this.getContext()); builder.setTitle("Title"); builder.setView(inflate(context, R.layout.music_player_create_dialog, null)); builder.setPositiveButton("OK", null); builder.setNegativeButton("Cancel", null); builder.show();

este es el diseño del contenido:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/abc_dialog_padding_material" android:paddingRight="@dimen/abc_dialog_padding_material" android:paddingTop="@dimen/abc_dialog_padding_top_material" android:paddingBottom="@dimen/abc_dialog_padding_top_material"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Title:"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="bottom" android:background="@null" android:layout_marginTop="20dp"/> <View android:layout_width="match_parent" android:layout_height="1px" android:background="@color/divider"/> </LinearLayout>


Me quedé con el mismo problema, así que tuve que encontrar la respuesta. En caso de que alguien venga a buscar la respuesta, esta es mi solución.

El código fuente para el diseño de AlertDialog se describe en alert_dialog.xml (por ejemplo, aquí para Android 4.4.1 , que debe corresponderse con el tema Holo). El diseño tiene rellenos codificados (y pueden ser diferentes en diferentes versiones de Android). Para conocer el relleno predeterminado, debe resumir todos los rellenos para Vistas que contengan el id/message" TextView. En este caso son 3 + 14 + 5 = 22 dp a la izquierda y 1 + 10 + 5 = 16 dp a la derecha.

El elemento android:id/custom es donde se inserta una vista personalizada y tiene 3 dp left y 1 dp right dodds (desde el elemento raíz, otros no tienen paddings) que no tienes que configurar manualmente.

Para que el relleno resultante de una vista personalizada sea el mismo que el de los mensajes, configúrelo a 19 dp a la izquierda y 15 dp a la derecha (y no se olvide de mantener el relleno superior e inferior predeterminado de 5 dp).

Código de ejemplo:

final EditText input = new EditText( getContext() ); float dpi = ctx.getResources().getDisplayMetrics().density; AlertDialog dialog = (new AlertDialog.Builder(getContext())) .setTitle("Rename track") .setMessage("Track name:") .setPositiveButton("OK", null) .setNegativeButton("Cancel", null) .create(); dialog.setView(input, (int)(19*dpi), (int)(5*dpi), (int)(14*dpi), (int)(5*dpi) ); dialog.show();

Este código da un resultado como este (se ve bien). Por cierto, este es el tema Material, que parece tener los mismos rellenos (también codificados).

[ ]