我有布局文件,我在屏幕上动态充气。 然后在我的活动中,我必须初始化一些UI逻辑(听众等等)。
但现在这个逻辑需要转移到某个类。我无法决定在xml中创建具有布局的基于视图的对象的最佳方式。
public MyView extends View {
MyView(Context context) {
super(context);
//inflation here...
}
OR
MyViewFactory {
View get(Inflater inflater) {
}
或其他什么?
可能有人也可以推荐在哪里寻找源代码。
答案 0 :(得分:3)
您可能不希望使用像ImageView这样的简单视图来执行此操作。你希望它是一个更复杂的布局(包含按钮的线性布局等)?
如果您需要第一个,那么最好使用简单的视图实例,例如ImageView img = new ImageView(context);
或工厂,如果您认为更简单的设置它们在xml中,则涉及更多参数。
就更复杂的布局而言,我更喜欢使用扩展一些viewGroups的自定义类(赞: MyView extends LinearLayout
)
创建一个名为init();
从每个构造函数中调用函数
在里面实现类似:
LayoutInflater.from(context).inflate(R.layout.my_layout,this,true);
此 + true 表示布局将附加到根目录,在本例中为linearLayout,您可以直接在viewgroup上使用findViewById)
ImageView img = findViewById(R.id.myView);
我发现创建自定义视图非常重要,因为它们始终包含特定于它们的逻辑并且可以重复使用,并且还会公开一些公共方法以从包含自定义视图的活动中调用。