Android-UI详解:软键盘弹出后,动态改变UI布局(IM聊天窗口设计示例)

下面是效果图:

 

效果图1:

 

 

效果图2:

 

效果图3:(消息框下面的部分将不再显示)

 

 

 

android目前还没有直接对软键盘事件进行直接监听的方法,实现这样的效果需要自己写一个布局类继承LinearLayout,并重写onSizeChanged方法。

注意:

不能直接在OnResizeListener中对要改变的View进行更改,因为OnSizeChanged函数实际上是运行在View的layout方法中,如果直接在onSizeChange中改变view的显示属性,那么很可能需要重新调用layout方法才能显示正确。然而我们的方法又是在layout中调用的,因此会出现错误。因此我们在例子中采用了Handler的方法。

附:代码 package cn.itcast.test.ui; import cn.itcast.test.chat.R; import android.content.Context; import android.os.Handler; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.LinearLayout; public class ResizeLayout extends LinearLayout { int count = 0; int count1 = 0; int count2 = 0; //定义默认的软键盘最小高度,这是为了避免onSizeChanged在某些下特殊情况下出现的问题。 private static final int SOFTKEYPAD_MIN_HEIGHT = 50; private Handler uiHandler = new Handler(); private static final String TAG = "ResizeLayout"; public ResizeLayout(Context context) { super(context); } public ResizeLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onSizeChanged(int w, final int h, int oldw, final int oldh) { super.onSizeChanged(w, h, oldw, oldh); Log.i(TAG, "onSizeChanged " + count++ + "=>onResize called! w=" + w + ",h=" + h + ",oldw=" + oldw + ",oldh=" + oldh); uiHandler.post(new Runnable() { @Override public void run() { if (oldh - h > SOFTKEYPAD_MIN_HEIGHT) // 必须设置为View.GONE不占空间 findViewById(R.id.talk_panel).setVisibility(View.GONE); else findViewById(R.id.talk_panel).setVisibility(View.VISIBLE); } }); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); Log.e(TAG, "onLayout " + count1++ + "=>OnLayout called! l=" + l + ", t=" + t + ",r=" + r + ",b=" + b); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); Log.e(TAG, "onMeasure " + count2++ + "=>onMeasure called! widthMeasureSpec=" + widthMeasureSpec + ", heightMeasureSpec=" + heightMeasureSpec); } }  

 

csdn似乎不能上传附件。

 

源码下载地址:

 

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=74595&page=1&extra=#pid783682

 

推荐给大家一篇博文:

关于Android软键盘的隐藏显示研究:http://winuxxan.blog.51cto.com/2779763/522810

 

 

 

你可能感兴趣的:(android开发)