2014-10-09 22 views
5

Sto avendo un problema con una visualizzazione personalizzata in una finestra sul API Android 10.Android AlertDialog produce testo nero con sfondo nero

Io uso AlertDialog.Builder di costruire la mia finestra. Includo un pannello di visualizzazione personalizzato utilizzando il comando setView sul builder.

Questo funziona sulla maggior parte delle API che ho testato con. Lo stile cambia un po 'da dispositivo a dispositivo, ma è quello che voglio, perché lo stile corrisponda al valore predefinito del dispositivo.

Il mio problema è che su API 10, qualsiasi testo nella mia vista personalizzata si presenta nero su sfondo nero.

Qualsiasi testo inserito utilizzando AlertDialog.Builder.setMessage() viene visualizzato correttamente.

Quale attributo/stile magico viene utilizzato dal generatore di finestre di dialogo per determinare l'aspetto del testo?

Il tema della mia app è Theme.AppCompat.Light.

Ecco il mio metodo onCreateDialog:

public Dialog onCreateDialog(Bundle savedInstanceState) { 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    final View view = inflater.inflate(R.layout.fragment_status_dialog, null); 
    mStatusTextView = (TextView) view.findViewById(R.id.text_status); 
    mConnectedDeviceTextView = (TextView) view.findViewById(R.id.text_connected_device); 

    MainService.ServiceState state = null; 
    if (getArguments().containsKey(SERVICE_STATUS_ARG_KEY)) { 
     state = (MainService.ServiceState) getArguments().getSerializable(SERVICE_STATUS_ARG_KEY); 
    } 
    setState(state); 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setView(view); 
    builder.setMessage("This will show up just fine."); 
    builder.setTitle(getString(R.string.status_title)); 
    builder.setNegativeButton(R.string.dialog_back_button_text, null); 
    builder.setNeutralButton(R.string.dialog_connect_to_text, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      mListener.onDialogConnectTo(); 
     } 
    }); 
    // Create the AlertDialog object and return it 
    return builder.create(); 
} 

Ecco il mio layout fragment_status_dialog

<?xml version="1.0" encoding="utf-8"?> 

    <RelativeLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:padding="18dp"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/status_starting" 
    android:id="@+id/text_status"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/status_connected_to_unknown" 
    android:paddingStart="4dp" 
    android:paddingLeft="4dp" 
    android:paddingRight="4dp" 
    android:id="@+id/text_connected_device" 
    android:layout_toRightOf="@+id/text_status" 
    android:layout_toEndOf="@+id/text_status"/> 
    </RelativeLayout> 

nota, ho provato https://stackoverflow.com/a/24505312/2350083 ma non risolvere il problema.

ex

+1

Provare a chiamare 'AlertDialog # setInverseBackgroundForced (true)'. –

+0

Alex, questa soluzione sembra funzionare per me! Grazie! L'ho provato finora sui dispositivi che usano l'API 10,13,15,19 – Jon

+0

Felice di sentirlo! L'ho aggiunto come risposta. –

risposta

2

Prova a chiamare AlertDialog#setInverseBackgroundForced(true).

0

Che dire semplicemente impostare il colore del testo? Es:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textColor="@android:color/white" 
    android:text="@string/status_starting" 
    android:id="@+id/text_status"/> 

Il TextView sta usando il colore del testo predefinito del dispositivo (o l'applicazione). Se si imposta il colore in modo specifico su TextView, verrà sovrascritto sui dispositivi indipendentemente dall'API.

+1

Le diverse API hanno stili diversi. Ad esempio, il mio Dell Streak 7 mostra tutte le finestre di dialogo con uno sfondo bianco. – Jon

Problemi correlati