首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用常规android组件创建自定义组件

使用常规android组件创建自定义组件
EN

Stack Overflow用户
提问于 2011-10-19 20:44:45
回答 1查看 636关注 0票数 0

基本上,我想用已有的代码封装一个简单的组件。

基本上,它是一个内部有按钮的LinearLayout。这些按钮将对ListView进行更改,它还将执行其他一些小操作。

目前,我有一个XML布局,并且我通过编程设置了所有其他东西:按钮、列表和其他小东西之间的交互。

显然,我对自己说,让我们把它封装起来吧。

我开始尝试扩展LinearLayout并添加按钮。我已经不知道如何扩展按钮以添加到视图中,我应该重写什么方法才能在创建视图之前创建此按钮,而不会干扰度量和膨胀等。

我已经环顾四周,但我看到的定制组件要么是全新的组件,要么只是在定制组件的基础上添加了一些小功能。

做这件事有什么指导原则吗?好的教程/例子?

任何帮助都是非常感谢的。谢谢!

编辑:

好的,这里有一些更具体的东西。

基本上,我想创建一个包含ListView的筛选器按钮的View。这将用于不同的地方与不同的过滤器,所以我需要灵活的按钮。

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

代码语言:javascript
复制
CustomView view = new CustomView(activity);
view.addButton("Lala", new OnFilterClickListener { 
    onClick(ListView list, View v) {
      // Do the filtering
    }
});

mListView.addHeaderView(view);

我想让视图调整它的权重来显示按钮,向用户显示哪个过滤器是活动的,诸如此类。

但我仍然不知道如何让这些动态添加的按钮出现,我在哪里生成它们,如何膨胀它们,诸如此类的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-19 21:25:08

代码语言:javascript
复制
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);
    }

    //...

}

您甚至可以在分派单击之前对视图执行一些操作,如下所示:

代码语言:javascript
复制
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);
    }

    //...

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7821526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档