我已经按照部分"创建复合视图"在this guide。在我的应用程序中的一个活动中,有如下定义的视图:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- some other subviews... -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<!-- some other subviews... -->
<include
android:id="@+id/myHeaderView"
layout="@layout/view_my_header"></include>
</FrameLayout>
</LinearLayout>
自定义myHeaderView
的布局在xml文件中定义如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="250dip"
android:orientation="vertical"
android:background="@android:color/transparent">
<View
android:layout_height="5dip"
android:layout_width="match_parent"
app:layout_aspectRatio="100%"
android:background="@android:color/holo_green_light" />
<View
android:id="@+id/yellowView"
app:layout_heightPercent="50%"
app:layout_aspectRatio="100%"
android:layout_width="120dp"
android:layout_height="120dp"
android:background="@android:color/holo_orange_light"
android:layout_marginBottom="12dp"
android:layout_marginLeft="12dp"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true" />
<View
android:id="@+id/redView"
app:layout_heightPercent="40%"
app:layout_aspectRatio="200%"
android:background="@android:color/holo_red_light"
android:layout_width="200dip"
android:layout_height="100dip"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" />
<View
android:layout_height="5dip"
android:layout_width="match_parent"
app:layout_aspectRatio="100%"
android:background="@android:color/holo_green_light"
android:layout_alignParentBottom="true"/>
</android.support.percent.PercentRelativeLayout>
基本上它应该是这样的:
运行良好,自定义视图按预期显示。但是,如果我使用以下内容替换xml中自定义视图元素的include
标记:
<com.myDomain.myHeaderView
android:id="@+id/myHeaderView"
android:layout_width="match_parent"
android:layout_height="250dip"
android:orientation="vertical"
android:background="@android:color/transparent"/>
并更新自定义类MyHeaderView
的构造函数,如下所示:
public MyHeaderView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
// some other constructor implementations, which they all call "initView(context)"
private void initView(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.view_my_header, this, true);
}
自定义标题视图的子视图(例如黄色视图)将消失。我查看了设备监视器的布局视图,看起来标题视图的大小及其子视图是正常的。但由于某些原因我不知道,它们不可见。
我做错了吗?我知道include
标记表示我正在重复使用相应文件定义的布局组件,但我想将自定义视图引用为类MyHeaderView
而不是{{1}所以我可以调用其中定义的方法,因此更新视图,我该如何实现呢?
谢谢!
答案 0 :(得分:1)
您可以尝试将<include>
置于<MyHeaderView>
内而不是MyHeaderView
中充气:
<com.myDomain.MyHeaderView
android:id="@+id/myHeaderView"
android:layout_width="match_parent"
android:layout_height="250dip"
android:orientation="vertical"
android:background="@android:color/transparent">
<include
layout="@layout/view_my_header"/>
</com.myDomain.MyHeaderView>