这是我的自定义视图:
public class FilterView extends RelativeLayout{
public FilterView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public void init(){
//To test, I add just a test button that will change the color of the view
Button b = new Button(getContext());
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) { setBackgroundColor(Color.GREEN); }
});
b.setText("TEST");
RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(100, 100);
addView(b, lay);
//Also have tried without settings the layoutparams...
setBackgroundColor(Color.BLUE);
}
}
我在这样的活动中添加了这个自定义视图(红色背景):
<com.example.android.FilterView android:id="@+id/filter"
android:layout_width="100dip"
android:background="#FF0000"
android:layout_height="100dip"/>
结果是颜色的视图...... BLUE,在init()中设置的颜色,因此init中的代码被很好地调用。但是,视图内部没有任何内容,只有蓝色,没有名为“TEST”的按钮,并且没有可点击的区域,因为无论我点击哪个视图都不会变为绿色
答案 0 :(得分:7)
抱歉,我犯了一个可怕的错误,
我的自定义视图是重新实现onLayout方法,并没有调用它的超级方法...添加超级解决了它。很抱歉打扰你这么愚蠢的问题..
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
}
答案 1 :(得分:0)
完成此行
addView(b, lay);
带
this.addView(b, lay);