自定义一个布局
public class ResizeLayout extends RelativeLayout { public ResizeLayout(Context context) { super(context); } public ResizeLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ResizeLayout(Context context, AttributeSet attrs) { super(context, attrs); } public void setOnResizeListener(OnResizeListener l) { mListener = l; } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (mListener != null) { mListener.OnResize(w, h, oldw, oldh); } } private OnResizeListener mListener; public interface OnResizeListener { void OnResize(int w, int h, int oldw, int oldh); }; }监听界面高度改变利用handler发消息
ResizeLayout layout = (ResizeLayout) findViewById(R.id.my_layout); layout.setOnResizeListener(new OnResizeListener() { @Override public void OnResize(int w, int h, int oldw, int oldh) { int change = BIGGER; if (h < oldh) { change = SMALLER; } Message msg = new Message(); msg.what = 1; msg.arg1 = change; mHandler.sendMessage(msg); } });
class InputHandler extends android.os.Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case MSG_RESIZE: if (msg.arg1 == BIGGER) { // 关闭 isreply = false; reply_write_edit.setText(""); reply_write_edit.setHint(""); } else { } break; } } }
后来发现一个activity可以强制横竖屏切换 ,切换到横屏时不起作用,横屏监听软键盘可以用下面方法
给editText外层添加一个布局
<LinearLayout android:id="@+id/rl_inputdlg_view" android:layout_width="match_parent" android:layout_height="40dp" android:layout_alignParentBottom="true" android:background="@color/colorGray4" android:orientation="horizontal"> <EditText android:id="@+id/input_message" android:layout_width="200dp" android:layout_weight="4" android:layout_height="wrap_content" android:layout_gravity="center|left" android:background="@color/white" android:gravity="left" android:layout_marginLeft="10dp" android:singleLine="true" android:text="" android:textColor="@color/black" android:imeOptions="actionSend" android:focusable="true" android:maxLength="32" android:focusableInTouchMode="true" android:textSize="20sp" /> </LinearLayout>
final LinearLayout rldlgview = (LinearLayout) findViewById(R.id.rl_inputdlg_view); rldlgview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); //获取当前界面可视部分 getWindow().getDecorView().getWindowVisibleDisplayFrame(r); //获取屏幕的高度 int screenHeight = getWindow().getDecorView().getRootView().getHeight(); //此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数 int heightDifference = screenHeight - r.bottom; if (heightDifference <= 0 && mLastDiff > 0){
//这里软件盘关闭 imm.hideSoftInputFromWindow(messageTextView.getWindowToken(), 0); } mLastDiff = heightDifference; } });