layoutinflater - parent为null

时间:2011-04-15 08:18:24

标签: android xml layout android-inflate

我的课程延伸LinearLayout

在构造函数中我调用

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout view = (LinearLayout)inflater.inflate(R.layout.titlebar, this, true);

我可以在此视图中访问视图,但未绘制。我认为原因是这个视图的mParent仍然是null。但为什么? Partent应该是这个(扩展LinearLayout的类)

这里是xml:

<RelativeLayout android:id="@+id/header"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="35px" 
android:layout_width="fill_parent"
android:background="@drawable/titlebar_bg">

<TextView android:layout_width="wrap_content" 
    android:textColor="#000000"
    android:text="test" 
    android:id="@+id/title" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="10pt" 
    android:layout_height="wrap_content"
    android:textSize="10pt"
    android:layout_marginTop="3dip"></TextView>

<TextView android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:text="10:09 AM" 
    android:id="@+id/time" 
    android:textColor="#000000"
    android:layout_alignParentRight="true" 
    android:layout_marginRight="5px"
    android:layout_marginTop="3px"
    android:textSize="10pt"></TextView></RelativeLayout>

<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:layout_width="wrap_content" 
    android:textColor="#000000"
    android:text="test" 
    android:id="@+id/title" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="10pt" 
    android:layout_height="wrap_content"
    android:textSize="10pt"
    android:layout_marginTop="3dip"></TextView>

<TextView android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:text="10:09 AM" 
    android:id="@+id/time" 
    android:textColor="#000000"
    android:layout_alignParentRight="true" 
    android:layout_marginRight="5px"
    android:layout_marginTop="3px"
    android:textSize="10pt"></TextView>

使用merge标记并使用xml标记。

<package.Titlebar 
            android:id="@+id/testtitlebar" 
            android:layout_height="35px" 
            android:layout_width="fill_parent"
            android:background="@drawable/titlebar_bg"></package.Titlebar>

这就是它在课堂上的表现:

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.titlebar, this);

没有onLayout功能!!!我的一个缺点

2 个答案:

答案 0 :(得分:0)

你应该尝试: LinearLayout view =(LinearLayout)inflater.inflate(R.layout.titlebar,null,false);

AFAIK这将返回视图,其中root是膨胀的XML的根。

答案 1 :(得分:0)

你应该试试

LayoutInflater inflater = LayoutInflater.from(this);

如果您在活动课程内,或

LayoutInflater inflater = LayoutInflater.from(YourActivity.this);

如果您在活动类中的内联类中。

然后,如果您要将新视图添加到活动中的其他视图(例如my_canvas):

//[YourActivity.] is needed when you are in an inline class!
//RelativeLayout is not mandatory, you can have any other layout there
final RelativeLayout canvas = (RelativeLayout) [YourActivity.]this.findViewById(R.id.my_canvas);
final View titleBar = inflater.inflate(R.layout.titlebar, canvas, false);

现在您可以在任何需要的地方添加此titleBar。

<强>更新

这是inflate方法的apidocs:

public View inflate (int resource, ViewGroup root, boolean attachToRoot) 

自:API级别1
从指定的xml资源中扩充新的视图层次结构。如果出现错误,则抛出InflateException。

<强>参数
资源要加载的XML布局资源的ID(例如,R.layout.main_page)
root 可选视图是生成的层次结构的父级(如果attachToRoot为true),或者只是为返回的层次结构的根提供一组LayoutParams值的对象(如果attachToRoot为false)。
attachToRoot 是否应将膨胀的层次结构附加到根参数?如果为false,则root仅用于为XML中的根视图创建LayoutParams的正确子类。

<强>返回 膨胀层次结构的根视图。如果提供了root并且attachToRoot为true,则为root;否则它是膨胀的XML文件的根。