什么是android.R.id.message?

DSl*_*r64 2 android android-alertdialog

我找到了两个 SO 线程,它们告诉我如何在对象中居中标题消息AlertDialog并通过编写我希望能够调用以居中 any 的方法来伪造我的方式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);
  }
Run Code Online (Sandbox Code Playgroud)

我做了大量的定制——即,我对我的发现和所做的事情有一些线索——但有一行让我想知道:

TextView messageView = (TextView) dialog.findViewById(android.R.id.message);

什么是 android.R.id.message

是我能找到的所有相关文档:

android.R.id
public static final int message = 16908299
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到有关Android.R.id对象(以及更多)的更多文档?这似乎是一个可能的金矿。

mat*_*ash 5

在 Android 中,布局中包含的视图通常(尽管并非总是如此)有一个 id。这个 id 的目的是能够识别特定的视图,例如:

Button button = (Button)layout.findViewById(R.id.button1);
button.setOnClickListener(...);
Run Code Online (Sandbox Code Playgroud)

创建布局 XML 文件时,通常会为视图创建新的 id,语法为:

<Button
    android:id="@+id/button1"
    ...
Run Code Online (Sandbox Code Playgroud)

这将在项目的R 文件 ( R.id.button1) 中创建一个整数值。

android.R.id,另一方面,包含在 Android 框架中定义或必须以某种方式被它引用的视图的 id。

在您的示例中,AlertDialog.Builder创建了一个具有固定ID的 TextView android.R.id.message。这样,您可以获取 返回的视图层次结构show(),并在其中找到 TextView。

您可以查看文档中预定义 id 的完整列表,但是该列表本身并没有提供太多信息。这些 id 通常在使用它们的每个特定功能的文档中提到。

作为另一个用例的示例(使用预定义的 android id 标记您自己的视图),当使用 时ListFragment,如果您提供自定义布局,则必须包含一个带有 id 的 ListView R.id.list。这是因为ListFragment该类检查膨胀的布局以查找此小部件。请参阅文档

ListFragment 具有由单个列表视图组成的默认布局。但是,如果您愿意,您可以通过从 onCreateView(LayoutInflater, ViewGroup, Bundle) 返回您自己的视图层次结构来自定义片段布局。为此,您的视图层次结构必须包含一个 ID 为“@android:id/list”的 ListView 对象(如果它在代码中,则为列表)

或者,您的视图层次结构可以包含任何类型的另一个视图对象,以在列表视图为空时显示。这个“空列表”通知器必须有一个id“android:empty”。