Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Obtener el relleno predeterminado para AlertDialog

Necesito crear un AlertDialog con una vista personalizada. El mensaje de un AlertDialog tiene un relleno por defecto, pero cuando se establece una vista que no tiene relleno, i varita para obtener el mismo relleno que el predeterminado como el mensaje. Estoy usando un estilo que amplía el tema de 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> 

  • Android: ¿Cómo puedo configurar el AlertDialog de ancho y altura, y el botón del estilo AlertDialog?
  • Método recomendado para presentar texto con formato en Android?
  • Java.lang.IllegalArgumentException: No se encontró ninguna vista para id 0x1020002 (android: id / content) para el fragmento
  • ¿Cómo enviar SMS desde la aplicación Android sin hacer su registro en la vista SMS del dispositivo?
  • La construcción de Travis CI no funciona con Android Constraint Layout
  • ¿Está el servicio de Android todavía vivo incluso después de que onDestroy () sea llamado?
  • ¿Puede una aplicación Android controlar otra aplicación a través de UI Automator?
  • ¿Cómo puedo calcular la altura y el ancho de la pantalla en tiempo de ejecución?
  • 2 Solutions collect form web for “Obtener el relleno predeterminado para AlertDialog”

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

    Puede obtener un relleno constante en sus cuadros de diálogo personalizados especificando este atributo en el diseño del diálogo. Por ejemplo, android:paddingLeft="?dialogPreferredPadding" pondrá el contenido del diálogo en alineación con su título.

    Me quedé atascado con el mismo problema, así que tuve que encontrar la respuesta. En caso de que alguien venga a buscar la respuesta, aquí está 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 corresponder al tema Holo). El diseño tiene almohadillas codificadas (y pueden ser diferentes en diferentes versiones de android). Para conocer el relleno por defecto debes resumir todos los rellenos para Views que contengan 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 a la izquierda y 1 dp a la derecha de los rellenos (del elemento raíz, otros no tienen rellenos) que no es necesario configurar manualmente.

    Por lo tanto, para que el relleno resultante de una vista personalizada sea el mismo que el mensaje, póngalo a 19 dp a la izquierda ya 15 dp a la derecha (y no olvide guardar el padp de arriba y abajo de 5 dp por defecto).

    Ejemplo de código:

     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 resultado como esto (se ve bien). BTW, esto es tema material, que parece tener los mismos rellenos (también hardcoded).

    [ ]

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.