2011-10-19 47 views
0

基本上我想从我已有的代码中封装一个简单的组件。使用普通Android组件创建自定义组件

基本上这是一个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); 

我想以适应它的权重显示按钮,显示哪个过滤器是活跃用户,这样的东西。

但我还是真的不知道如何使这些动态添加的按钮出现,我在哪里生成它们,如何夸大他们和类似的东西。

+0

添加/膨胀一切的构造 –

+0

如果我想'新CustomView后添加的东西() '?构造函数被调用,但该项目尚未绘制。 – Draiken

+0

如果它扩展了'LinearLayout',你仍然可以使用函数'addView'通常是 –

回答

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); 
    } 

    //... 

} 
+0

我最终做了完全像你说的问题之前,我问了这个问题,但不断收到错误。认为这是这个代码,但它是另一回事,哈哈......谢谢! – Draiken