Подтвердить что ты не робот

Android 5.x: Почему Dialog.Builder отключает текст?

У меня проблема с Dialog.Builder, где кнопки отключены. Как я могу решить эту проблему или это проблема для устройств Motorola?

  • сокращение текста не является решением
  • Я ожидаю такого же поведения, как S5-скриншот, слишком длинные кнопки → Кнопки ниже друг друга

Устройство: Motorola Moto G/ОС: Android 5.0.2 enter image description here

Устройство: Galaxy S5/ОС: Android 5.0.2 enter image description here

Здесь код и тема для отображения диалога

public void showDialog(final String title, final String message,
                       final OnClickListener onClickPositive,
                       final OnClickListener onCLickNegative, final String positiveButton,
                       final String negativeButton, final boolean cancelable) {
    if (!isFinishing()) {
        runOnUiThread(new Runnable() {

            @Override
            public void run() {

                if (dialog != null && dialog.isShowing()) {
                    dialog.cancel();
                }

                Builder builder;
                if (android.os.Build.VERSION.SDK_INT >= 14) {
                    builder = new AlertDialog.Builder(new ContextThemeWrapper(
                            MyActivity.this,
                            android.R.style.Theme_DeviceDefault_Light_Dialog));
                } else {
                    builder = new Builder(MyActivity.this);
                }

                if (title != null) {
                    builder.setTitle(title);
                }
                if (message != null) {
                    builder.setMessage(message);
                }

                if (positiveButton != null) {
                    builder.setPositiveButton(positiveButton, onClickPositive);
                }
                if (negativeButton != null) {
                    builder.setNegativeButton(negativeButton, onCLickNegative);
                }
                builder.setCancelable(cancelable);

                dialog = builder.show();
                colorizeDialog(dialog);
            }
        });
    }
}

//theme-xml
<style name="Theme.DeviceDefault.Light.Dialog" parent="Theme.Holo.Light.Dialog" >
    <item name="android:windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault.Light</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Dialog</item>

    <item name="android:buttonBarStyle">@android:style/DeviceDefault.Light.ButtonBar.AlertDialog</item>
    <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Light.Button.Borderless.Small</item>

    <item name="textAppearance">@android:style/TextAppearance.DeviceDefault.Light</item>
    <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Light.Inverse</item>
</style>

########################

ИЗОБРАЖЕНИЕ ОБНОВЛЕНИЯ

Похоже, что на каждом устройстве поведение не одинаково. У нас есть вторая проблема с добавлением "нейтральной" кнопки. Опять же, Galaxy S5 добавляет кнопки друг под друга (сверху вниз: положительный, нейтральный, отрицательный)

введите описание изображения здесь

Motorola Moto G (API 5.0.2/слева) показывает нейтральную кнопку посередине (красный "Аббречен" ) и снова нарезает текст кнопки (синяя стрелка).

Nexus 4 (API 4.3/правая сторона) показывает нейтральную кнопку слева, а не в середине

Похоже, нам нужно реализовать пользовательский диалог....

4b9b3361

Ответ 1

Попробовали ли вы использовать Dialog?

final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom);
dialog.setTitle("Title...");

// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");

// make 3 buttons instead of one
Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
    //do something
    }
});

dialog.show();

рекомендация: используйте линейный макет для диалога.