Android 5.x:为什么Dialog.Builder会删除文本?

时间:2015-07-20 08:44:46

标签: android android-alertdialog

Dialog.Builder存在问题,按钮被切断了。 如何解决此问题,或者这是摩托罗拉设备的问题?

  • 缩短文字不是解决方案
  • 我期待像S5截图一样的行为,按钮太长 - >按钮低于对方

设备:摩托罗拉Moto G /操作系统:Android 5.0.2 enter image description here

设备: Galaxy S5 / OS: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 在彼此下方添加按钮(从上到下:正面,中性,负面)

enter image description here

摩托罗拉Moto G (API 5.0.2 /左侧)显示中间的中性按钮(红色“Abbrechen”)并再次剪切按钮文字(蓝色箭头)。

Nexus 4 (API 4.3 /右侧)显示左侧的中性按钮,而不是中间的

似乎我们必须实现自定义对话框....

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用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();

建议:对话框使用线性布局。

答案 1 :(得分:0)

我知道这是一个古老的问题……但是就我而言,它有助于使用android.support.v7.app.AlertDialog而不是“正常”问题。