2011-05-09 32 views
9

¿Cómo puedo cambiar el color de fondo de la barra de título de una casilla de alerta?Establecer color de fondo de la barra de título AlertBox

AlertDialog.Builder alert=new AlertDialog.Builder(getParent()); 
alert.setTitle("sample"); 
alert.show(); 
+0

Puede ser que esta ayuda: [. La creación de cuadro de alerta personalizada En Android] (http://stackoverflow.com/questions/3928562/creating-custom-alert-box-in-android) –

+0

mejor respuesta que he conseguido hasta ahora : http://blog.supenta.com/2014/07/02/how-to-style-alertdialogs-like-a-pro/ –

Respuesta

10

La manera más fácil es a subclase un cuadro de diálogo mediante la creación de una clase que se extiende de diálogo e implementa el constructor que tome estilo como un parámetro. Luego, haga su propio diseño personalizado.

El Código para mostrar el cuadro de diálogo:

private void showDialog() 
{ 
    Custom_Dialog dialog = new Custom_Dialog(this, R.style.myCoolDialog); 

    dialog.setContentView(R.layout.custom_dialog); 
    dialog.setTitle("Custom Dialog"); 

    TextView text = (TextView) dialog.findViewById(R.id.text); 
    text.setText("Hello, this is a custom dialog!"); 
    ImageView image = (ImageView) dialog.findViewById(R.id.image); 
    image.setImageResource(R.drawable.icon); 

    dialog.show(); 
} 

El código para la subclase:

package com.stackoverflow; 

import android.app.Dialog; 
import android.content.Context; 

public class Custom_Dialog extends Dialog { 

    protected Custom_Dialog(Context context, int theme) { 
     super(context, theme); 
     // TODO Auto-generated constructor stub 
    } 

} 

la estilo: myCoolDialog.xml

<resources> 
    <style name="myCoolDialog" parent="android:Theme.Dialog"> 
     <item name="android:windowBackground">@drawable/blue</item> 
     <item name="android:colorForeground">#f0f0</item> 
    </style> 
</resources> 

y dura el diseño: c ustom_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/layout_root" 
       android:orientation="horizontal" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:padding="10dp" 
       > 
    <ImageView android:id="@+id/image" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:layout_marginRight="10dp" 
       /> 
    <TextView android:id="@+id/text" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:textColor="#FFF" 
       /> 
</LinearLayout> 
+0

Hola CornflakesDK, quiero mostrar la lista de contenido en el cuadro de diálogo de alerta. El color de fondo del título cambió, pero no dislpay, la lista de contenido. Estoy usar este código para mostrar la lista de contenido alert.setItems (list, new DialogInterface.OnClickListener() { @Override public void onClick (Diálogo DialogInterface, int pos) { TODO Método autogenerado stub}}); – Jeeva

+0

A continuación, cambie el diseño. Puede agregar sus propios botones y botones. EnClickListeners si es necesario. – CornflakesDK

+0

Gracias, listView funciona bien. – Jeeva

0

Sólo puede establecer título personalizado como éste

LayoutInflater inflater = this.getLayoutInflater(); 
View titleView = inflater.inflate(R.layout.custom_title, null); 

new AlertDialog.Builder(SubCategoryActivity.this) 
        .setCustomTitle(titleView); 

y en la disposición custom_title puede crear título personalizado como éste

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 
     android:id="@+id/llsubhead" 
     android:background="@color/colorPrimary"> 

     <TextView 
      android:id="@+id/exemptionSubHeading4" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="10dp" 
      android:layout_weight="1" 
      android:text="Exemption Sub Head" 
      android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" 
      android:textColor="@color/white" /> 
    </LinearLayout> 
</LinearLayout> 
0

A partir de la respuesta y @CornflakesDK @ espíritu de hielo, pensé que puedes usar la implementación actual AlertDialog.Builder para hacer el diálogo personalizado y hacerlo fácil de mantener.

CustomDialogBuilder.java

public class CustomDialogBuilder extends AlertDialog.Builder { 

    private View view; 

    public CustomDialogBuilder(Context context) { 
    super(context); 
    view = LayoutInflater.from(getContext()).inflate(R.layout.custom_dialog_title, null); 
    setCustomTitle(view); 
    } 

    @Override 
    public Builder setTitle(int titleId) { 
    TextView titleTextView = view.findViewById(R.id.exemptionSubHeading4); 
    titleTextView.setText(getContext().getString(titleId)); 
    return this; 
    } 

    @Override 
    public Builder setTitle(CharSequence title) { 
    TextView titleTextView = view.findViewById(R.id.exemptionSubHeading4); 
    titleTextView.setText(title); 
    return this; 
    } 
} 

custom_dialog.xml

<?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"> 
    <LinearLayout 
    android:id="@+id/llsubhead" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:background="@color/black" 
    android:orientation="vertical"> 
    <TextView 
     android:id="@+id/exemptionSubHeading4" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_margin="15dp" 
     android:layout_gravity="center" 
     android:text="Exemption Sub Head" 
     android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" 
     android:textColor="@color/white" /> 
    </LinearLayout> 
</LinearLayout> 

Dentro de su código de actividad,

new CustomDialogBuilder(MyActivity.this) 
        .setTitle(R.string.actions) 
        .setItems(R.array.items_actions, (dialog, which) -> { 
        // handle items 
        }).create().show(); 

A continuación, puede tener un estilo dentro de la DialogBuilder y también utilizar las funciones de AlertDialog.Builder.

Cuestiones relacionadas