2011.08.18(2)——— android 自定义组合组件 onFinishInflate onSizeChanged

2011.08.18(2)——— android 自定义组合组件 onFinishInflate onSizeChanged

参考:[url]http://gundumw100.iteye.com/blog/1139214[/url]

onFinishInflate 当View中所有的子控件均被映射成xml后触发
onSizeChanged 当view的大小发生变化时触发

先看一下执行顺序
ButtonWaveView 为自定义组合组件

public class ButtonWaveView extends LinearLayout {



public ButtonWaveView(Context context) {
super(context);
}
public ButtonWaveView(Context context, AttributeSet attrs) {
super(context, attrs);
System.out.println("ButtonWaveView");

}



@Override
protected void onFinishInflate() {
super.onFinishInflate();
System.out.println("onFinishInflate");
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
System.out.println("onSizeChanged");
}

}



MainActivity.java

public class MainActivity extends Activity {
private ButtonWaveView bwv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("1111111111111");
setContentView(R.layout.buttonwaveview);

bwv = (ButtonWaveView)findViewById(R.id.bwv);
System.out.println("22222222222222222222222");
}

}


这个结果为:
11111111111111
ButtonWaveView
onFinishInflate
22222222222222222222222


可以看出来 构造方法和onFinishInflate都是在
setContentView(R.layout.buttonwaveview);

就开始执行了 然后再回执行onCreate后面的代码

我见的自定义组合组件 大多有两种
1、在onSizeChanged里面写
2、在onFinishInflate里面写


1、onSizeChanged
其实 上面的代码onSizeChanged是不会执行 ,因为大家也看到了 它是在view大小发生改变时 才执行的
看我参考的那篇文章,所有代码都是在onSizeChanged里面写的 但是onSizeChanged不执行怎么办?所以 在构造方法里面
setBackgroundResource(R.drawable.tabswitcher_long);

设置了背景图片 认为的改变view 这样就可以调用onSizeChanged了

2、onFinishInflate

这个里面写也是可以的 但是 有一个问题
假如说 我在Activity里面 需要设置自定义组件ButtonWaveView 的一些变量,而且这些变量(例如 width,height)是必须在addview前面调用的
我们的set方法肯定是写在onCreat里面的 但是前面我们也看到了 onFinishInflate是先于执行的 这时 我们的程序就有问题了

解决方法有两个
1、用onSizeChanged
2、用自定义属性


自定义属性

参考:[url]http://mycoding.iteye.com/blog/1001889[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值