2013-01-23 7 views
7

Sto utilizzando un AlertDialog con layout personalizzato. Il colore di TextView nel layout è nero, quindi quando si apre la finestra di dialogo su Android 4.0 con Holo.Light, il testo è visibile. Tuttavia se apri la finestra di dialogo in Android 2.2 il testo non è visibile a causa dello sfondo grigio. C'è un modo per cambiare il colore di sfondo?AlertDialog colore di sfondo

+1

dichiarare il vostro layout personalizzato in un file XML e non solo impostare la visualizzazione per la finestra di dialogo. – hardartcore

+0

È possibile personalizzare DlertDilaog. Vedi [questo] (http://stackoverflow.com/a/5392617). – burnO

risposta

1

basta definire lo sfondo della vista radice nel file layout.xml per la finestra di dialogo per un colore che si desidera.

Ti piace questa:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@color/dialog_background" > 
... 
+1

Funziona correttamente per il corpo principale della finestra di dialogo, ma l'intestazione con titolo e piè di pagina con il pulsante OK è ancora definita come colore "scuro" (per OS 2.3). –

0
AlertDialog.Builder.setView(getLayoutInflater().inflate(R.layout.your_layout, null)); 

utilizzando questa funzione è possibile gonfiare un layout per il dialogo. ora fai quello che vuoi nel layout xml. per esempio vedi il seguente codice.

AlertDialog.Builder about = new AlertDialog.Builder(this);  
about.setTitle(getString(name)); 
about.setIcon(R.drawable.icon); 
about.setView(getLayoutInflater().inflate(R.layout.your_layout, null)); 
9

Tuttavia, se si apre la finestra di Android 2.2 il testo non è visibile a causa del fondo grigio. C'è un modo per cambiare il colore di sfondo?

Sì, è possibile, l'ho usato sulla mia app utilizzando DialogBuilder. Basta mettere inverseBackgroundForced true

builder.setInverseBackgroundForced(true); 
AlertDialog dialog = builder.create(); 
dialog.show(); 

sul dialogo costruttore. Costringerà lo sfondo al colore bianco (anziché grigio scuro) nella versione Android prima di Froyo.

+0

Più pulito dell'impostazione dello sfondo della vista che si sta aggiungendo (mostrerebbe che la vista è bianca ma attorno sarà tutta grigia). Ci stavo provando per un po 'di tempo prima di trovare questa domanda. Grazie. :) – Sufian

+0

Come per la risposta accettata, posso commentare qui: Funziona OK per il corpo principale della finestra di dialogo, ma l'intestazione con titolo e piè di pagina con pulsante OK è ancora definita di colore "scuro" per il sistema operativo (OS 2.3). –

+0

Ha funzionato per me, grazie mille – Naruto

1

La ringrazio molto per StinePike e Artjom B.

L'idea di StinePike è molto buona.

Ho inserito un oggetto TextView in AlertDialog con uno sfondo personalizzato.

Ho mostrato come utilizzare lo sfondo solido e sfumato per personalizzare gli oggetti.

Per favore lasciatemi presentare il contesto in cui ho applicato l'idea di StinePike.

// posizione: MainActivity.java

AlertDialog mAlertDialog_With_Radio_Buttons;  
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
ini(); 

}

public void onAlert_With_Radio_Buttons_Close_Click(View view) { 

mAlertDialog_With_Radio_Buttons.dismiss(); 

} // onAlert_With_Radio_Buttons_Close_Click 

public void alert_with_radio_buttons(){ 

AlertDialog.Builder 
mAlertDialog_Builder = new AlertDialog.Builder(this); 

mAlertDialog_Builder 
.setView(getLayoutInflater() 
.inflate(R.layout.alert_with_radio_buttons, null)); 
mAlertDialog_Builder 
.setTitle("Select The Directory"); 

mAlertDialog_With_Radio_Buttons = mAlertDialog_Builder.create(); 
mAlertDialog_With_Radio_Buttons.show(); 

} // public void alert_with_radio_buttons(){ 

// location: alert_with_radio_buttons.xml in layout 

<LinearLayout 

android:id="@+id/alert_with_radio_buttons_tv_ll" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="@color/turquoise1" 
android:layout_alignParentTop="true" 
android:layout_centerHorizontal="true"> 

<TextView 

android:id="@+id/mAlert_With_Radio_Buttons_TextView" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:inputType="textMultiLine" 
android:background="@color/turquoise2" 
android:textSize="@dimen/main_wiz_size" 
android:text = "@string/alert_with_rb_tv_text" /> 

</LinearLayout> 

// Location: colors in values 

<color name="turquoise1">#FF00ABAB</color> 
<color name="turquoise2">#FF00BCBC</color> 

// Location: strings in values 
<string name="alert_with_rb_tv_text">Directory Names</string> 

// Close Definition 
// location: alert_with_radio_buttons.xml in layout 

<Button 

android:id="@+id/alert_with_radio_buttons_close_btn" 
android:text="@string/alert_with_radio_buttons_close" 

android:layout_width="wrap_content" 
android:layout_height="wrap_content" 

android:background="@drawable/btn_decor" 
android:onClick="onAlert_With_Radio_Buttons_Close_Click" /> 

// location: btn_decor.xml in drawable 

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:dither="true"> 
<gradient 
android:startColor="#700000ff" 
android:endColor="#70009B80" 
android:angle="-90"/> 

</shape> 

location: strings.xml in values 
<string name="alert_with_radio_buttons_close">Close</string> 
+0

Grazie mille per il vostro aiuto. Metto un TextView in AlertDialog con uno sfondo personalizzato per mantenere la mia risposta nell'argomento. Mi piace il tuo eccellente consiglio "Stand Alone Answer". Per favore aiutami a scoprire come inserire un'immagine accanto al mio commento. –

1

"C'è un modo per cambiare il colore di sfondo?" Sì, esistono diversi modi per diversi contesti.

Per favore lasciatemi "fornire dettagli e condividere la mia ricerca" per voi. Il mio codice mostra come ottenere sfondo TextView personalizzato per gli elementi di ListView incorporati nella finestra di dialogo degli avvisi.

Cominciamo con il modello per l'elemento di ListView
// posizione: customized_tv_for_list_view.xml dal layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 

android:layout_width="fill_parent" 
android:layout_height="fill_parent" 

android:background="@drawable/layer_border"> 

<TextView 
android:id="@+id/text_view_for_lv" 

android:layout_width="fill_parent" 
android:layout_height="wrap_content" 

android:layout_gravity ="center" 

android:padding ="5dip" 
android:background="@color/turquoise2" 

android:textSize="@dimen/lv_text_size" 

android:textColor="@color/blue0"/> 

</LinearLayout> 

// location: main_activity.xml in layout 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/decor" 
android:orientation="vertical" > 

<LinearLayout 
    android:id="@+id/main_activity_files_btn_ll" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/layer_border" > 

<Button 
    android:text="Files" 
    android:id="@+id/files_btn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/btn_decor" 
    android:onClick="onMainActivity_Files_Click" /> 

</LinearLayout> 

</LinearLayout> 

// location: colors.xml in values 
<color name="blue0">#0000FF</color> 
<color name="turquoise2">#FF00BCBC</color> 

// location: dimens.xml in values 
<dimen name="lv_text_size">24dp</dimen> 

// location: layer_border.xml in drawable 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<stroke android:width="1dp" android:color="#9999FF" /> 
<solid android:color="#CCCCFF" /> 
<padding android:left ="4dp" android:top="4dp" 
android:right="4dp" android:bottom="4dp" /> 
<corners android:radius="4dp" /> 
</shape> 

// location: decor.xml in drawable 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:dither="true"> 
<gradient 
android:startColor="#aa0000ff" 
android:endColor="#aa009B80" 
android:angle="-90"/> 
</shape> 

// location: MainActivity.java 
ListView mListView; 
AlertDialog mAlertDialog; 
ArrayAdapter<String> mArrayAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

mListView = new ListView(this); 
ArrayList<String> 
mArrayList_Days = new ArrayList<>(); 

for(int i = 0; i< 32; i++) 
mArrayList_Days.add("Day " + String.valueOf(i)); 

mArrayAdapter = new ArrayAdapter<>(
this, R.layout.customized_tv_for_list_view, 
R.id.text_view_for_lv, mArrayList_Days); 

mListView.setAdapter(mArrayAdapter);   
mListView 
.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> parent, View view, 
int position, long id) { 
String sel_item = (String) mListView 
.getItemAtPosition(position); 

Toast.makeText(MainActivity.this, sel_item, Toast.LENGTH_SHORT).show(); 
mAlertDialog.cancel(); 
} // onItemClick 
}); // .setOnItemClickListener 

build_files_alert_dialog(); 
} 

public void build_files_alert_dialog() { 
AlertDialog.Builder 
mAlertBuilder = new AlertDialog.Builder(MainActivity.this); 

mAlertBuilder.setTitle("Days"); 
mAlertBuilder.setView(mListView); 
mAlertDialog = mAlertBuilder.create(); 

WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(); 
mLayoutParams.copyFrom(mAlertDialog.getWindow().getAttributes()); 
} 

public void onMainActivity_Files_Click(View view) { 
mAlertDialog.show(); 
} // onMainActivity_Files_Click