Jon
Jon

Reputation: 9833

Android AlertDialog produces black text with black background

I am having an issue with a custom view in a dialog on android API 10.

I use AlertDialog.Builder to construct my dialog. I include a custom view panel using the setView command on the builder.

This works on most of the API's I've tested with. The style changes somewhat from device to device, but that is what I want, for the style to match the device default.

My problem is that on API 10, any text that is in my custom view shows up as black on a black background.

Any text I insert using AlertDialog.Builder.setMessage() appears correctly.

What magical attribute/style is the dialog builder using to determine text appearance?

My app's theme is Theme.AppCompat.Light.

Here is my onCreateDialog method:

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

Here's my 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>

Note, I've tried https://stackoverflow.com/a/24505312/2350083 but it didn't fix it.

ex

Upvotes: 5

Views: 1154

Answers (2)

Alex Lockwood
Alex Lockwood

Reputation: 83301

Try calling AlertDialog#setInverseBackgroundForced(true).

Upvotes: 2

Simas
Simas

Reputation: 44158

What about simply setting the color of the text? Ex:

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

The TextView is using the default text color of the device (or the app). If you set the color specifically to the TextView it will be overriden on devices irrespective of the API.

Upvotes: 0

Related Questions