android dialog divider
Aquí hay una aplicación de muestra.

android - Styling titleDivider in Dialog



(15)

"Eliminar la línea azul" si supongo que correctamente significa quitar el borde entre el título del cuadro de diálogo y su cuerpo. Ese borde proviene del tema Holo, por lo que no es posible soltarlo sin utilizar su diseño personalizado.

Cree un archivo llamado custom-dialog.xml con el siguiente contenido (es solo un ejemplo ... modifíquelo como desee):

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/general_dialog_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/dialogTopImage" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="0.12" android:padding="10dp" /> <LinearLayout android:id="@+id/dialogLine" android:layout_width="fill_parent" android:layout_height="3dp" android:background="@drawable/green_btn" android:orientation="vertical" /> <TextView android:id="@+id/dialogText" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="0.32" android:padding="5dp" android:text="" /> <LinearLayout android:id="@+id/general_dialog_layout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center" android:layout_marginBottom="5dp" android:layout_weight="0.11" android:gravity="center" android:orientation="horizontal" > <Button android:id="@+id/dialogButton" android:layout_width="100dp" android:textSize="8pt" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:background="@drawable/green_btn" android:gravity="center" android:text="Ok" /> </LinearLayout>

Como ves, estoy usando recursos y cosas que no estarán en tu proyecto, pero puedes eliminarlas de manera segura. El resultado en mi caso es más o menos el siguiente, con una imagen en la parte superior que estableceré programáticamente en el código.

Para crear el diálogo entonces usa algo como:

private Dialog createAndShowCustomDialog(String message, Boolean positive, Drawable d, View.OnClickListener cl, String text1) { final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.general_dialog_layout); // BIND ImageView image = (ImageView) dialog.findViewById(R.id.dialogTopImage); TextView text = (TextView) dialog.findViewById(R.id.dialogText); Button button = (Button) dialog.findViewById(R.id.dialogButton); LinearLayout line = (LinearLayout) dialog.findViewById(R.id.dialogLine); // SET WIDTH AND HEIGHT DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int width = (int) (displaymetrics.widthPixels * 0.85); int height = (int) (displaymetrics.heightPixels * 0.60); WindowManager.LayoutParams params = getWindow().getAttributes(); params.width = width; dialog.getWindow().setLayout(width, height); // SET TEXTS text.setText(message); button.setText(text1); // SET IMAGE if (d == null) { image.setImageDrawable(getResources().getDrawable(R.drawable.font_error_red)); } else { image.setImageDrawable(d); } // SET ACTION if (cl == null) { button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); } else { button.setOnClickListener(cl); } // SHOW dialog.show(); return dialog; }

Me pregunto cómo es posible deshacerse de (o cambiar el color) titleDivider en el diálogo. Es una línea azul debajo del título del diálogo que se muestra en los dispositivos honeycomb +.

Supongo que esta es una parte relevante del diseño del SDK, pero como no hay ningún atributo de estilo, no sé cómo hacerlo. Si intento con findViewById no hay android.R.id.titleDivider

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:fitsSystemWindows="true"> <TextView android:id="@android:id/title" style="?android:attr/windowTitleStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="@android:dimen/alert_dialog_title_height" android:paddingLeft="16dip" android:paddingRight="16dip" android:gravity="center_vertical|left" /> <View android:id="@+id/titleDivider" android:layout_width="match_parent" android:layout_height="2dip" android:background="@android:color/holo_blue_light" /> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:foreground="?android:attr/windowContentOverlay"> <FrameLayout android:id="@android:id/content" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> </LinearLayout>

He intentado anular dialogTitleDecorLayout, que es solo una referencia a dialog_title_holo.xml en mi theme.xml, pero sin éxito. Error es:

error: Error: No se encontró ningún recurso que coincida con el nombre dado: attr ''dialogTitleDecorLayout''.


Antes de escribir dialog.show() , escribe:

int divierId = dialog.getContext().getResources().getIdentifier("android:id/titleDivider", null, null); View divider = dialog.findViewById(divierId); if(divider!=null){ divider.setBackgroundColor(getResources().getColor(R.color.transparent));}

En colors.xml :

<color name="transparent">#00000000</color>


Aquí es cómo resolví eso (gracias a http://joerg-richter.fuyosoft.com/?p=181 ):

MyDialogBuilder.class

public class MyDialogBuilder extends android.app.AlertDialog.Builder { public MyDialogBuilder(Context context) { super(context); } @NonNull @Override public android.app.AlertDialog create() { final android.app.AlertDialog alertDialog = super.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { int titleDividerId = getContext().getResources() .getIdentifier("titleDivider", "id", "android"); View titleDivider = alertDialog.findViewById(titleDividerId); if (titleDivider != null) { titleDivider.setBackgroundColor(getContext().getResources() .getColor(R.color.alert_dialog_divider)); } } }); return alertDialog; } }


En colors.xml:

<color name="transparent">#00000000</color>

En diálogo:

int divierId = dialog.getContext (). getResources (). getIdentifier ("android: id / titleDivider", null, null);

Ver divider = d.findViewById (divierId); divider.setBackgroundColor (getResources (). getColor (R.color.transparent));


Este está probado en algunos dispositivos 4.x:

TextView title = (TextView)getWindow().getDecorView().findViewById(android.R.id.title); ((ViewGroup)title.getParent()).getChildAt(1).setVisibility(View.GONE);


Esto no es una forma de ocultarlo por control brotha .. He tenido el mismo problema. Lo único que puedes hacer es crear tu propio CustomDialog

Aquí hay una aplicación de muestra.

Descarga y observa el patrón de diseño, entonces será fácil

Aquí hay un tutorial sobre cómo hacer un diálogo personalizado

La parte importante es que después de crear DialogObject, no establezca el Título mediante setTitle () cree TextView dentro de su CustomLayout y llámelo desde findViewByID () y establezca su título


Gracias a todos, pero obtuve la Solución para obtener una referencia al titulador de alertdialog para cambiar su color utilizando el código que aparece a continuación. Espero que esto ayude a alguien.

int divierId = dialog.getContext().getResources() .getIdentifier("android:id/titleDivider", null, null); View divider = dialog.findViewById(divierId); divider.setBackgroundColor(getResources().getColor(R.color.creamcolor));


Necesitas implementar

myDialog = builder.create(); myDialog.setOnShowListener(new OnShowListenerMultiple()); //---------------------------- //Function to change the color of title and divider of AlertDialog public static class OnShowListenerMultiple implements DialogInterface.OnShowListener { @Override public void onShow( DialogInterface dialog ) { if( !(dialog instanceof Dialog) ) return; Dialog d = ((Dialog) dialog); final Resources resources = d.getContext().getResources(); final int color = AppUtility.getColor( resources, R.color.defaultColor ); try { int titleId = resources.getIdentifier( "android:id/alertTitle", null, null ); TextView titleView = d.findViewById( titleId ); titleView.setTextColor( color ); } catch( Exception e ) { Log.e( "XXXXXX", "alertTitle could not change color" ); } try { int divierId = resources.getIdentifier( "android:id/titleDivider", null, null ); View divider = d.findViewById( divierId ); divider.setBackgroundColor( color ); } catch( Exception e ) { Log.e( "XXXXXX", "titleDivider could not change color" ); } } }


Para ocultar completamente la línea azul predeterminada (asumiendo que está en DialogFragment ):

Dialog dialog = getDialog(); if (dialog != null) { final int dividerId = dialog.getContext().getResources() .getIdentifier("android:id/titleDivider", null, null); View divider = dialog.findViewById(dividerId); if (divider != null) { divider.setBackground(null); } }


Puedes hacer un diálogo personalizado como este:

Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.custom_dialog); Button okay = (Button) dialog.findViewById(R.id.button1); okay.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { // do your work } });

Establecer un título personalizado en el diseño no use Android

dialog.setTitle();

y su custom_dialog.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android1="http://schemas.android.com/apk/res/android" android:id="@+id/layout_root" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:padding="10dp"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:textSize="40sp" android:text="Hello"/> <Button android:id="@+id/button1" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_marginLeft="150dp" android:text="OK" /> </RelativeLayout>


Resolví el problema usando el tema DialogFragment.STYLE_NO_TITLE y luego falsificando la barra de título en el diseño del diálogo.


Si no desea usar el estilo predeterminado, no use AlertDialog. Podría ir con Actividad (con su diseño personalizado) con Tema de diálogo.

<activity android:theme="@android:style/Theme.Dialog">


Tu idea fue correcta. Sin embargo, dialogTitleDecorLayout que buscaba es un recurso privado, por lo que no puede acceder a él de una manera normal. Pero todavía puedes acceder usando la sintaxis *

<item name="*android:dialogTitleDecorLayout">@layout/dialog_title</item>

Añadiendo esto a mi propio estilo y simplemente copiando dialog_title.xml a mi aplicación y cambiándolo, resolví un poco el problema en mi caso.


Ves this y hay una biblioteca especial para eso, puedes verlo there . Y el último link te solucionará el problema.


utilizar

<View android:id="@+id/titleDivider" android:layout_width="match_parent" android:layout_height="2dip" android:background=#CC3232 />