什么是android.R.id.message?

时间:2014-07-15 01:24:16

标签: android android-alertdialog

我找到了两个SO线程,告诉我们如何将titlemessage放在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个对象(以及更多)的更多文档?这似乎是一个可能的金矿。

3 个答案:

答案 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