我找到了两个SO线程,告诉我们如何将title和message放在AlertDialog
对象中,并通过编写一个我希望能够调用中心的方法来伪造我的方式任何AlertDialog
。它在手机和平板电脑上运行良好,甚至可以显示多行消息,无论是否有'\n'
s。
public void showCenteredInfoDialog(TextView _title, TextView _message) {
_title.setGravity(Gravity.CENTER);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setPositiveButton("OK", null);
builder.setCustomTitle(_title);
builder.setMessage(_message.getText());
AlertDialog dialog = builder.show();
TextView messageView = (TextView)
dialog.findViewById(android.R.id.message);
messageView.setGravity(Gravity.CENTER);
}
我做了相当多的定制 - 也就是说,我对我发现和做过的事情有一些线索 - 但有一条线让我感到疑惑:
TextView messageView = (TextView) dialog.findViewById(android.R.id.message);
什么是android.R.id.message ?
Here是我能找到的关于它的所有文档:
android.R.id
public static final int message = 16908299
我在哪里可以找到Android.R.id
个对象(以及更多)的更多文档?这似乎是一个可能的金矿。
答案 0 :(得分:4)
在Android中,布局中包含的视图通常(尽管不总是)具有id。此id的目的是能够识别特定视图,例如:
Button button = (Button)layout.findViewById(R.id.button1);
button.setOnClickListener(...);
创建布局XML文件时,通常会为视图创建新的ID,语法为:
<Button
android:id="@+id/button1"
...
这将在项目的 R文件(R.id.button1
)中创建一个整数值。
android.R.id
包含在Android框架中定义的视图ID,或者必须以某种方式引用它。
在您的示例中,AlertDialog.Builder
创建了一个带有固定 ID的文本视图android.R.id.message
。这样,您可以获取show()
返回的视图层次结构,并在其中找到TextView。
您可以查看预定义ID in the documentation的完整列表,但是此列表本身并不是非常有用。对于使用它们的每个特定功能,通常会在文档中提及这些ID。
作为其他用例的示例(使用预定义的android id标记自己的视图),使用ListFragment
时,如果提供自定义布局,则必须包含ID为{{3}的ListView }。这是因为ListFragment
类检查膨胀的布局以查找此窗口小部件。请参阅R.id.list
:
ListFragment具有由单个列表组成的默认布局 视图。但是,如果需要,可以通过自定义片段布局 从onCreateView返回您自己的视图层次结构(LayoutInflater, ViewGroup,Bundle)。为此,您的视图层次结构必须包含 具有id“@android:id / list”的ListView对象(如果它在,则列出 代码)
或者,您的视图层次结构可以包含任何其他视图对象 列表视图为空时显示的类型。这个“空单” 通知程序必须有一个id“android:empty”。
答案 1 :(得分:2)
@matiash的回答给出了一些很好的见解。
用最简单的术语来说,假设您为对话框提供自定义布局,您只需使用R.id.viewId
访问视图 - 您在自定义xml布局中定义的ID。
android.R.id.message
将允许您访问由android预定义的视图。例如,在您的情况下,您正在使用具有预定义布局的AlertDialog。因此,使用特定的ID,您将能够访问TextView,您可以在AlertDialog中设置消息。
答案 2 :(得分:0)
android.R.id.message
是指资源, id ,名为消息。
例如,TextView在这里:
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/backbutton"
android:text="Back"
android:layout_x="10px"
android:layout_y="5px"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/message"
android:layout_x="10px"
android:layout_y="110px"
android:text="First Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</AbsoluteLayout>
对不起,当我告诉你,如果你不知道,你真的应该阅读Android培训指南:http://developer.android.com/training/index.html