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
risposta
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" >
...
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). –
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));
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.
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
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). –
Ha funzionato per me, grazie mille – Naruto
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>
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. –
"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
dichiarare il vostro layout personalizzato in un file XML e non solo impostare la visualizzazione per la finestra di dialogo. – hardartcore
È possibile personalizzare DlertDilaog. Vedi [questo] (http://stackoverflow.com/a/5392617). – burnO