2014-10-09 12 views
5

ich mit einer benutzerdefinierten Ansicht in einem Dialog ein Problem habe auf Android API 10.Android Alertdialog produziert schwarzen Text mit schwarzem Hintergrund

ich AlertDialog.Builder benutze meinen Dialog zu konstruieren. Ich schließe ein benutzerdefiniertes Ansichtsfenster mit dem Befehl setView für den Builder ein.

Dies funktioniert auf den meisten APIs, mit denen ich getestet habe. Der Stil ändert sich etwas von Gerät zu Gerät, aber das ist es, was ich möchte, damit der Stil dem Geräte-Standard entspricht.

Mein Problem ist, dass auf API 10 jeder Text, der in meiner benutzerdefinierten Ansicht ist, schwarz auf schwarzem Hintergrund angezeigt wird.

Jeder Text, den ich mit AlertDialog.Builder.setMessage() einfüge, wird korrekt angezeigt.

Welches magische Attribut/Stil verwendet der Dialoggenerator, um die Textdarstellung zu bestimmen?

Das Thema meiner App ist Theme.AppCompat.Light.

Hier ist meine onCreateDialog Methode:

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(); 
} 

Hier ist mein fragment_status_dialog Layout

<?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> 

Hinweis, habe ich versucht, https://stackoverflow.com/a/24505312/2350083 aber es hat fix es nicht.

ex

+1

Versuchen Sie, 'AlertDialog # setInverseBackgroundForced (true)' aufzurufen. –

+0

Alex, diese Lösung scheint für mich zu funktionieren! Vielen Dank! Ich habe es bisher auf Geräten mit API getestet 10,13,15,19 – Jon

+0

Froh, es zu hören! Ich habe es als Antwort hinzugefügt. –

Antwort

2

Versuchen Sie, AlertDialog#setInverseBackgroundForced(true) zu rufen.

0

Was einfach die Farbe des Textes einstellen? Beispiel:

<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"/> 

Das TextView verwendet die Standardtextfarbe des Geräts (oder der App). Wenn Sie die Farbe speziell für TextView festlegen, wird sie unabhängig von der API auf Geräten überschrieben.

+1

Die verschiedenen APIs haben unterschiedliche Stile. Zum Beispiel zeigt mein Dell Streak 7 alle Dialoge mit einem weißen Hintergrund an. – Jon

Verwandte Themen