Android 在Fragment下控制輸入鍵盤

在Fragment下控制實體返回鍵

在EditTextOverWrite(客制的EditText) 狀態下,會有鍵盤彈出,在這個時候硬體控制權會被系統搶走,因此要加判斷
若該頁面沒有EditText,則無須理會IsKeyboardHidden以及其function

Java部分

private EditTextOverWrite editEmailLoginAccount,editEmailLoginPassword;
editEmailLoginAccount = (EditTextOverWrite) view.findViewById(R.id.editEmailLoginAccount);
editEmailLoginPassword = (EditTextOverWrite) view.findViewById(R.id.editEmailLoginPassword);

editEmailLoginAccount.setOnKeyboardHidden(onKeyboardHidden);
editEmailLoginPassword.setOnKeyboardHidden(onKeyboardHidden);
view.setFocusableInTouchMode(true);
        view.requestFocus();
        view.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK && KeyEvent.ACTION_UP == event.getAction()) {
                    if (IsKeyboardHidden) {
                        IsKeyboardHidden = false;
                    }else {
                        imgEmailLoginBack.performClick();
                    }
                    return true;
                }
                return false;
            }
        });

    
private EditTextOverWrite.OnKeyboardHidden onKeyboardHidden = new EditTextOverWrite.OnKeyboardHidden() {
        @Override
        public void onKeyboardHidden() {
            IsKeyboardHidden = true;
            view.requestFocus();
        }
    };

Xml部分

<android2017.box.com.sports.Tools.EditTextOverWrite
            android:id="@+id/editEmailLoginAccount"
            style="@style/EditTextStyle"
            android:layout_width="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/textView2"
            android:ems="10"
            android:hint="@string/Enter_the_email_used_when_registering"
            android:inputType="textEmailAddress" />

針對EditTextOverWrite客製化的function
public class EditTextOverWrite extends EditText {
    private OnKeyboardHidden mOnKeyboardHidden;

    public EditTextOverWrite(Context context) {
        super(context);
    }

    public EditTextOverWrite(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextOverWrite(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public EditTextOverWrite(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    public interface OnKeyboardHidden {
        public void onKeyboardHidden();
    }

    public void setOnKeyboardHidden(OnKeyboardHidden action) {
        mOnKeyboardHidden = action;
    }

    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
//        Log.e("keyCode", String.valueOf(keyCode));
//        Log.e("event", String.valueOf(event));
        if (keyCode == KeyEvent.KEYCODE_BACK && KeyEvent.ACTION_UP == event.getAction()) {
//            Log.e("TEST", "OK");
            InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
            clearFocus();
            mOnKeyboardHidden.onKeyboardHidden();
        }
        return super.onKeyPreIme(keyCode, event);
    }

}

留言

  1. Slot Review: Slot Demo & Casinos at Cobra Casino Web Site
    Read our in-depth review of Cobra Casino web site for 강릉 출장안마 more 하남 출장안마 details 밀양 출장마사지 and get instant withdrawal. Click 부천 출장마사지 here for 바카라 details!

    回覆刪除

張貼留言

這個網誌中的熱門文章

jQuery獲取Select選擇的Text和Value(轉)

彈跳視窗iframe的運用