如图所示,在点击back键时同时隐藏上面包含EditText控件的View,这个问题纠结了我很久,后来在度娘里头找到了解决方法:
第一种解决办法:
1、创建EventLinearLayout 继承 LinearLayoutimport android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.widget.LinearLayout; import static com.cmcc.migutvtwo.util.LogUtils.LOGE; /** * Created by on 2016/1/24. */ public class EventLinearLayout extends LinearLayout { /** 初始化状态 **/ public static final byte KEYBOARD_STATE_INIT = -1; /** 隐藏状态 **/ public static final byte KEYBOARD_STATE_HIDE = -2; /** 打开状态 **/ public static final byte KEYBOARD_STATE_SHOW = -3; private boolean isInit;// 是否为初始化状态 private int viewHeight;// 布局高度 private boolean hasKeybord;// 标识是否打开了软键盘 private OnKeyboardsChangeListener keyboarddsChangeListener;// 键盘状态监听 public EventLinearLayout(Context context) { super(context); } public EventLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } public EventLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if (!isInit) { isInit = true; viewHeight = b; } else { viewHeight = viewHeight < b ? b : viewHeight; } if (isInit && viewHeight > b) { hasKeybord = true; keyboardSateChange(KEYBOARD_STATE_SHOW); this.setVisibility(VISIBLE); LOGE("弹幕 == 显示软键盘"); } if (isInit && hasKeybord && viewHeight == b) { hasKeybord = false; keyboardSateChange(KEYBOARD_STATE_HIDE); LOGE("弹幕 == 隐藏软键盘"); this.setVisibility(GONE); } } @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { this.setVisibility(GONE); LOGE("弹幕 == 隐藏 "); hasKeybord = false; return super.dispatchKeyEventPreIme(event); } /** * 切换软键盘状态 * * @param state * // 状态 */ public void keyboardSateChange(int state) { if (keyboarddsChangeListener != null) { keyboarddsChangeListener.onKeyBoardStateChange(state); } } /** * 软键盘状态切换监听 * * @author zihao * */ public interface OnKeyboardsChangeListener { public void onKeyBoardStateChange(int state); } public boolean isHasKeybord() { return hasKeybord; } public void setHasKeybord(