我的main.xml
看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
由于根元素是LinearLayout
,其扩展为ViewGroup
,为什么main.xml
会变成View
而不是ViewGroup
?例如,在我的主要Activity
课程中,我尝试获取LinearLayout
包含的子视图的数量,如下所示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewGroup vg = (ViewGroup) findViewById(R.layout.main);
Log.v("myTag", "num children: " + vg.getChildCount());
但是当我拨打vg.getChildCount()
时,它会崩溃。
这样做的正确方法是什么?
答案 0 :(得分:6)
findViewById
应该将布局XML文件中定义在内的视图的ID,而不是文件本身的ID。一旦您通过手动或通过setContentView
对视图进行了充气,您可以使用它来获取布局,如果您这样做的话:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/mainlayout"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
人:
ViewGroup vg = (ViewGroup) findViewById(R.id.mainlayout);
请注意添加android:id
属性并在R.id
调用中使用匹配的findViewById
值。它与Dev Guide中描述的用法相同。然后,您应该能够将结果安全地转换为ViewGroup
或LinearLayout
。
如果您希望单独加载主视图,例如作为子视图,使用getLayoutInflater()
。inflate(...)
来构建和检索它。