我目前正在查看一本书中提供的一些应用程序演示,这个使用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>
答案 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在他的“切断的文本视图在哪里......”所得到的......