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");}@Overrideprotected void onFinishInflate() {super.onFinishInflate();System.out.println("onFinishInflate");}@Overrideprotected 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");    }    }


这个结果为:
11111111111111ButtonWaveViewonFinishInflate22222222222222222222222


可以看出来 构造方法和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



更多相关文章

  1. Android 最新获取手机内置存储大小,SD卡存储空间大小方法
  2. Android蓝牙通信代码
  3. Android 启动浏览器的方法
  4. Android代码规范
  5. Android根据电量变化为不同图片的方法【电池电量提示】
  6. Android之日期时间选择器使用方法
  7. Android 图片旋转(使用Matrix.setRotate方法)
  8. Android Http请求失败解决方法
  9. android典型代码系列(二十二)------按键使上面的EditText抖动

随机推荐

  1. android模拟器创建报错: PANIC: Could not
  2. Android(安卓)实现点击两次BACK键退出应
  3. Android(安卓)Weekly Notes Issue #240
  4. GitHub上的一些开源项目
  5. Drawable资源——Transition Drawable
  6. Android学习【3】Android开发问题记录
  7. android中联系人搜索框
  8. 解决android使用google map时显示方格的
  9. 菜鸟在android中密码框的纠结过程
  10. android中RadioGroup、RadioButton、Spin