AlertDialog setMessage被切断

时间:2016-09-01 01:10:46

标签: android

我目前正在查看一本书中提供的一些应用程序演示,这个使用AlertDialog的特定应用程序的行为非常奇怪,因为它将布局与消息重叠,并且仅在使用此特定布局时才会发生。我尝试在模拟器和真实设备上运行应用程序并获得相同的结果。任何帮助解决这个问题,谢谢!

这是对话框类。

    package android.bignerdranch.com.notetoself;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class DialogShowNote extends DialogFragment {

    Note mNote;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        LayoutInflater inflater = getActivity().getLayoutInflater();
        View dialogView = inflater.inflate(R.layout.dialog_show_note, null);

        TextView txtTitle = (TextView) dialogView.findViewById(R.id.txtTitle);
        TextView txtDescription = (TextView) dialogView.findViewById(R.id.txtDescription);
        txtTitle.setText(mNote.getTitle());
        txtDescription.setText(mNote.getDescription());

        ImageView ivImportant = (ImageView) dialogView.findViewById(R.id.imageViewImportant);
        ImageView ivTodo = (ImageView) dialogView.findViewById(R.id.imageViewTodo);
        ImageView ivIdea = (ImageView) dialogView.findViewById(R.id.imageViewIdea);

        if (!mNote.isImportant()){
            ivImportant.setVisibility(View.GONE);
        }

        if (!mNote.isTodo()){
            ivTodo.setVisibility(View.GONE);
        }

        if (!mNote.isIdea()){
            ivIdea.setVisibility(View.GONE);
        }

        Button btnOK = (Button) dialogView.findViewById(R.id.btnOK);

        builder.setView(dialogView).setMessage("Your mNote");

        btnOK.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });

        return builder.create();
    }


    public void sendNoteSelected(Note noteSelected) {
        mNote = noteSelected;
    }
 }

及其相关布局。

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="match_parent" android:layout_height="match_parent"
                    android:paddingLeft="10dp"
                    android:paddingTop="10dp"
                    android:paddingRight="10dp"
                    android:paddingBottom="20dp">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageViewImportant"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:src="@drawable/ic_warning_black_24dp" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageViewTodo"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/imageViewImportant"
            android:layout_toEndOf="@+id/imageViewImportant"
            android:src="@drawable/ic_check_box_outline_blank_black_24dp" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageViewIdea"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/imageViewTodo"
            android:layout_toEndOf="@+id/imageViewTodo"
            android:src="@drawable/ic_wb_incandescent_black_24dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Large Text"
            android:id="@+id/txtTitle"
            android:layout_below="@+id/imageViewIdea"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="27dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/txtDescription"
            android:layout_marginTop="34dp"
            android:layout_below="@+id/txtTitle"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="OK"
            android:id="@+id/btnOK"
            android:layout_alignParentBottom="true"
            android:layout_alignLeft="@+id/txtTitle"
            android:layout_alignStart="@+id/txtTitle"
            android:layout_marginBottom="28dp" />
    </RelativeLayout>

1 个答案:

答案 0 :(得分:1)

我自己也在同一本书中做同样的事情并获得相同的结果。我知道我的新音符对话框工作正常,但是显示音符对话框正在执行此操作。

从我发现的情况来看,这是因为某些设备处理AlertDialogs上的setMessage调用的方式。他们只是切断了这样的文字。解决方法是将布局中的Plain TextView小部件放在其他小部件上方,即“您的mNote”。

不幸的是,它看起来就像是你必须计划的事情之一,而不仅仅是让setMessage函数处理它。

更改

builder.setView(dialogView).setMessage("Your mNote");

builder.setView(dialogView);

在Simple for Show Note上添加带有文本“Your mNote”的Plain TextView(我将它的样式设置为AlertDialog.AppCompat,因此它有点类似)。

然后格式化其下的所有内容。

我相信这也是rmanalo在他的“切断的文本视图在哪里......”所得到的......