1

我有我在屏幕上动态膨胀的布局文件。然后在我的活动中,我必须初始化一些 UI 逻辑(监听器等)。

但是现在这个逻辑需要转移到某个类。而且我无法决定哪种方式是创建基于视图的对象的最佳方式,该对象的布局在 xml 中。

public MyView extends View {
    MyView(Context context) {
        super(context);
        //inflation here...        
    }

或者

MyViewFactory {
    View get(Inflater inflater) {

    }

或者是其他东西?

可能有人还可以推荐源代码在哪里寻找。

4

1 回答 1

3

您可能不想使用 ImageView 之类的简单视图来执行此操作。你希望它是一个更复杂的布局,比如(包含按钮等的线性布局)?

如果您需要第一个,最好使用简单的视图实例ImageView img = new ImageView(context);或工厂,如果您认为在 xml 中设置它们更简单,则涉及更多参数。

至于更复杂的布局,我更喜欢使用扩展一些 viewGroups 的自定义类(比如 MyView extends LinearLayout:)

创建一个名为init();

从每个构造函数调用函数

在其中实现类似:

LayoutInflater.from(context).inflate(R.layout.my_layout,this,true);

this + true意味着布局将附加到根,在这种情况下为线性布局,您可以直接在视图组上使用 findViewById)

ImageView img = findViewById(R.id.myView);

我发现创建自定义视图非常重要,因为它们总是包含特定于它们的逻辑并且可以重用,并且还公开了一些公共方法以从包含自定义视图的活动中调用。

于 2012-07-17T14:52:12.893 回答