這個昨天寫了蠻近,太費勁了,目前還沒有我覺得比較好的方式去解決。
也查閱了很多朋友的資料和博客,卻一直沒有完成我需要的效果。
最后無奈使用了下面這個方法:
1 public class InputStateLinearLayout extends LinearLayout{ 2 private OnSizeChangedListener listener; 3 4 public InputStateLinearLayout(Context context) { 5 super(context); 6 } 7 8 public InputStateLinearLayout(Context context, AttributeSet attrs) { 9 super(context, attrs); 10 } 11 12 public InputStateLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { 13 super(context, attrs, defStyleAttr); 14 } 15 16 @Override 17 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 18 super.onMeasure(widthMeasureSpec, heightMeasureSpec); 19 } 20 21 @Override 22 protected void onLayout(boolean changed, int l, int t, int r, int b) { 23 super.onLayout(changed, l, t, r, b); 24 } 25 26 @Override 27 protected void onSizeChanged(int w, int h, int oldw, int oldh) { 28 super.onSizeChanged(w, h, oldw, oldh); 29 if (listener != null) { 30 listener.onSizeChanged(w, h, oldw, oldh); 31 } 32 } 33 34 public void setOnSizeChangedListener(OnSizeChangedListener listener) { 35 this.listener = listener; 36 } 37 38 /** * Activity主窗口大小改變時的回調接口(本示例中,等價於軟鍵盤顯示隱藏時的回調接口) */ 39 public interface OnSizeChangedListener { 40 public void onSizeChanged(int w, int h, int oldw, int oldh); 41 } 42 }
以上代碼不多說,繼續上代碼:
1 mRoot.setOnSizeChangedListener(new InputStateLinearLayout.OnSizeChangedListener() { 2 @Override 3 public void onSizeChanged(int w, int h, int oldw, int oldh) { 4 if (h>oldh){//關閉 5 //你自己需要處理的邏輯 6 } 7 } 8 });
mRoot其實就是這個界面的根布局。自己測試得出,h>oldh是關閉,反之打開。
以上暫時完成了我的需求。
然后當時我還用到了,監聽
ViewTreeObserver
雖然也是可以的,但是總歸沒有達到我的需求。
轉載請注明出處!
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。