如圖所示,在點擊back鍵時同時隱藏上面包含EditText控件的View,這個問題糾結了我很久,後來在度娘裏頭找到了解決方法:
第一種解決辦法:
1、創建EventLinearLayout 繼承 LinearLayout
import 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(boolean hasKeybord) { this.hasKeybord = hasKeybord; } }
2、創建佈局文件
<?xml version="1.0" encoding="utf-8"?> <com.cmcc.migutvtwo.ui.widget.EventLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/comment_edit_panel" android:layout_width="match_parent" android:layout_height="wrap_content" >
</com.cmcc.migutvtwo.ui.widget.EventLinearLayout>
在其他程序中隱藏軟鍵盤的同時也要設置 EventLinearLayout 中的 軟鍵盤變量爲隱藏軟鍵盤:
((EventLinearLayout)danmakuInputview).setHasKeybord(false);
第二種解決辦法:
給播放器添加OnTouchListener事件,點擊軟鍵盤跟包含EditText控件的View之間的中間部位,軟鍵盤跟view同時消失,問題是在點擊view上面空餘部分時,軟鍵盤跟view也會同時消失,所以要避免這個問題,採用下面的方法處理,攔截view層的onTouch事件:
danmakuInputview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } });
軟鍵盤的監聽:
使用OnKeyListener的方法來監聽軟鍵盤按鍵
- edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- /*判斷是否是“GO”鍵*/
- if(actionId == EditorInfo.IME_ACTION_GO){
- /*隱藏軟鍵盤*/
- InputMethodManager imm = (InputMethodManager) v
- .getContext().getSystemService(
- Context.INPUT_METHOD_SERVICE);
- if (imm.isActive()) {
- imm.hideSoftInputFromWindow(
- v.getApplicationWindowToken(), 0);
- }
- return true;
- }
- return false;
- }
- });