使用常规Android组件创建自定义组件

时间:2011-10-19 12:44:45

标签: android android-custom-view

基本上我想从我已经拥有的代码中封装一个简单的组件。

基本上它是一个带有按钮的LinearLayout。这些按钮会对ListView进行更改,还会有其他一些小功能。

目前我有一个XML布局,我以编程方式设置其他所有内容:按钮,列表与其他小东西之间的交互。

显然我想到了,让我们把它封装起来。

我开始尝试扩展LinearLayout并添加按钮。 我已经不知道如何给按钮充气以添加到视图中 在创建视图之前,我可以覆盖什么方法来创建此按钮,而不会弄乱测量和通胀等。

我环顾四周,但我看到的自定义组件要么是全新的组件,要么只是为自定义组件添加小功能。

是否有一些指导方针可以做到这一点? 好的教程/例子?

感谢任何帮助。谢谢!

编辑:

好的,这里有一些更具体的内容。

基本上我想创建一个View来保存ListView的过滤器按钮。这将在具有不同过滤器的不同地方使用,因此我需要灵活的按钮。

基本上我想做这样的事情:

CustomView view = new CustomView(activity);
view.addButton("Lala", new OnFilterClickListener { 
    onClick(ListView list, View v) {
      // Do the filtering
    }
});

mListView.addHeaderView(view);

我希望视图调整显示按钮的权重,向用户显示哪个过滤器处于活动状态,这样的东西。

但我仍然不知道如何使这些动态添加的按钮出现,我在哪里生成它们,如何给它们充气等等。

1 个答案:

答案 0 :(得分:1)

public class myLayout extends LinearLayout {

    //...

    public void addButton(String text, OnClickListener listener) {
        Button newButton = new Button(mContext);
        newButton.setText(text);
        newButton.setOnClickListener(listener);
        //Say we want the weights to be equal
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1);
        addView(newButton, params);
    }

    //...

}

您甚至可以在调度点击之前对视图执行某些操作:

public class myLayout extends LinearLayout {

    //...

    public void addButton(String text, final OnClickListener listener) {
        Button newButton = new Button(mContext);
        newButton.setText(text);
        newButton.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                //do whatever you want
                //like change background of button or something
                //finally
                listener.onClick(v);
            }
        });
        //Say we want the weights to be equal
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1);
        addView(newButton, params);
    }

    //...

}