Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android AlertDialog produces black text with black background

Tags:

android

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

like image 770
Jon Avatar asked Nov 01 '22 16:11

Jon


1 Answers

Try calling AlertDialog#setInverseBackgroundForced(true).

like image 54
Alex Lockwood Avatar answered Nov 08 '22 04:11

Alex Lockwood