Android自定义View面试view

Android自定义View 面试全解

2022-02-07  本文已影响0人  JianLee

本篇文章总结Android 自定义View中的一些面试问题。

  1. 每次自定义view都会有三个构造函数,那么三个构造函数有什么区别呢?分别在什么时候调用?


  1. 自定义View和自定义ViewGroup的区别
  1. MeasureSpec是什么?
    MeasureSpec是View中的内部类,基本都是二进制运算,由于int是32位的,用高两位表示mode,低30位表示size,MODE_SHIFT=30 的作用是移位,
  1. onLayout的时候 view.getWidth()有时会为零是为什么?getWidth()和getMeasuredWidth有什么区别?
  1. 假如我要在View中动态地注册与解除广播接收器,应该在哪里完成呢?
    比如,当Window显示时,注册一个监听器,根据监听到的广播事件改变自己的绘制,当Window不可见时,解除注册,因为此时改变自己的绘制已经没有意义了,自己也要跟着Window变成不可见了。
    在onAttachedToWindow和onDetachedFromWindow中完成这一功能。代码如下:
@Override
protected void onAttachedToWindow() {   
       super.onAttachedToWindow();    
      if (!mAttached) {      
          mAttached = true;      
          IntentFilter filter = new IntentFilter();        
        //这里确定我们要监听的三种系统广播
          filter.addAction(Intent.ACTION_TIME_TICK);   
          filter.addAction(Intent.ACTION_TIME_CHANGED);        
          filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);        
          getContext().registerReceiver(mIntentReceiver,   filter); 
       }   
        mCalendar = new Time();   
        onTimeChanged();
}

@Override
protected void onDetachedFromWindow() {    
          super.onDetachedFromWindow();  
          if (mAttached) {     
               getContext().unregisterReceiver(mIntentReceiver);     
               mAttached = false;   
           }
}
  1. invalidate()、postInvalidate()、requestLayout()
上一篇 下一篇

猜你喜欢

热点阅读