2011.08.18(二)——— android 自定义组合组件 onFinishInflate onSizeChanged
2011.08.18(2)——— android 自定义组合组件 onFinishInflate onSizeChanged
2011.08.18(2)——— android 自定义组合组件 onFinishInflate onSizeChanged
参考:http://gundumw100.iteye.com/blog/1139214
onFinishInflate 当View中所有的子控件均被映射成xml后触发
onSizeChanged 当view的大小发生变化时触发
先看一下执行顺序
ButtonWaveView 为自定义组合组件
MainActivity.java
这个结果为:
可以看出来 构造方法和onFinishInflate都是在
就开始执行了 然后再回执行onCreate后面的代码
我见的自定义组合组件 大多有两种
1、在onSizeChanged里面写
2、在onFinishInflate里面写
1、onSizeChanged
其实 上面的代码onSizeChanged是不会执行 ,因为大家也看到了 它是在view大小发生改变时 才执行的
看我参考的那篇文章,所有代码都是在onSizeChanged里面写的 但是onSizeChanged不执行怎么办?所以 在构造方法里面
设置了背景图片 认为的改变view 这样就可以调用onSizeChanged了
2、onFinishInflate
这个里面写也是可以的 但是 有一个问题
假如说 我在Activity里面 需要设置自定义组件ButtonWaveView 的一些变量,而且这些变量(例如 width,height)是必须在addview前面调用的
我们的set方法肯定是写在onCreat里面的 但是前面我们也看到了 onFinishInflate是先于执行的 这时 我们的程序就有问题了
解决方法有两个
1、用onSizeChanged
2、用自定义属性
自定义属性
参考:http://mycoding.iteye.com/blog/1001889
2011.08.18(2)——— android 自定义组合组件 onFinishInflate onSizeChanged
参考:http://gundumw100.iteye.com/blog/1139214
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、用自定义属性
自定义属性
参考:http://mycoding.iteye.com/blog/1001889