Tom*_*ren 131 java android custom-component
我正在开发的Android应用程序的主要活动已经变得非常大.这主要是因为它包含TabWidget3个选项卡.每个选项卡都有很多组件.活动必须立即控制所有这些组件.所以我认为你可以想象这个Activity有20个字段(几乎每个组件都有一个字段).它还包含许多逻辑(单击侦听器,填充列表的逻辑等).
我通常在基于组件的框架中做的是将所有内容拆分为自定义组件.然后,每个自定义组件都有明确的责任.它将包含它自己的一组组件以及与该组件相关的所有其他逻辑.
我试图弄清楚如何做到这一点,我在Android文档中发现了他们喜欢称之为"复合控制"的东西.(请参阅http://developer.android.com/guide/topics/ui/custom-components.html#compound并滚动到"复合控件"部分)我想基于XML文件创建这样一个组件来定义查看结构.
在文档中它说:
请注意,就像使用Activity一样,您可以使用声明式(基于XML)方法来创建包含的组件,也可以从代码中以编程方式嵌套它们.
嗯,这是个好消息!基于XML的方法正是我想要的!但它没有说明如何做到这一点,除了它"像一个活动"...但我在一个活动中做的是调用setContentView(...)从XML膨胀视图.如果您是子类,那么该方法不可用LinearLayout.
所以我尝试像这样手动扩充XML:
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_layout, this);
}
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,除了我正在加载的XML已LinearLayout声明为根元素的事实.这导致被夸大LinearLayout的孩子MyCompoundComponent本身已经是一个LinearLayout!! 所以现在我们之间有一个冗余的LinearLayout MyCompoundComponent和它实际需要的视图.
有人可以请给我一个更好的方法来解决这个问题,避免LinearLayout实例化冗余吗?
bha*_*982 100
使用merge标记作为XML根目录
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Your Layout -->
</merge>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29052 次 |
| 最近记录: |