1

将此源视为AlertDialogAndroid SDK 的 res\layout 文件夹中的布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout android:id="@+id/body"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:baselineAligned="false"
        android:paddingLeft="8dip"
        android:paddingTop="10dip"
        android:paddingRight="8dip"
        android:paddingBottom="10dip">

        <ProgressBar android:id="@android:id/progress"
            style="@android:style/Widget.ProgressBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:max="10000"
            android:layout_marginRight="12dip" />

        <TextView android:id="@+id/message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical" />
    </LinearLayout>
</FrameLayout>

我试图找到它的 id 是这样的“消息”的 TextView:

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

它工作正常。然后我试图找到它的 id 是“body”的 LinearLayout,如下所示:

LinearLayout body = (LinearLayout)dialog.findViewById(android.R.id.body);

但是eclipse显示这个错误:

body cannot be resolved or is not a field

这是片段代码:

ProgressDialog dialog = new ProgressDialog(WriteOpinionActivity.this);
            dialog.setMessage("some text");
dialog.show();
TextView tvMessage = (TextView)dialog.findViewById(android.R.id.message);
LinearLayout body = (LinearLayout)dialog.findViewById(android.R.id.body);

为什么会发生此错误以及如何到达“body”?

4

2 回答 2

0

改用这个。

TextView tvMessage = (TextView)dialog.findViewById(R.id.message);  
LinearLayout body = (LinearLayout)dialog.findViewById(R.id.body);  

您实际上并没有android.R.id.message首先使用。@+id/message表示您正在创建一个id名为message.

要使用idAndroid 框架中存在的 ,您可以在此处看到您使用@android:id/progress. 在源代码中,您可以像使用它一样使用它:android.R.id.progress.

否则,android:id="@=id/myIdentifier"在 XML 和
findViewById(R.id.myIdentifier)代码中使用。

http://developer.android.com/guide/topics/resources/overview.html

于 2013-03-27T02:24:53.243 回答
0

基本上,并非所有资源都可以从平台res文件夹访问。

例如,我可以@+id/messageglobal_actions_item.xml, usb_storage_activity.xml, alert_dialog_holo.xml, js_prompt.xml, progress_dialog_holo.xml, progress_dialog.xml, alert_dialog.xml(对于 API 17)中找到,因此,不保证您得到id定义的progress_dialog.xml内容(它可以在另一个文件中定义,并且只是因为同名您能够在进行中找到它对话框)。

实际上,这里定义了公共资源,但是,它看起来已经过时了,因此可能会丢失一些资源。查看有关所有可访问资源列表的这些问题:12

于 2013-03-27T03:32:25.367 回答