android - update - 強制打開軟鍵盤



android系統 (7)

工作得很好.........

edt_searchfilter_searchtext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus){
                edt_searchfilter_searchtext.post(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager imm = (InputMethodManager) getFragmentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.showSoftInput(edt_searchfilter_searchtext, InputMethodManager.SHOW_IMPLICIT);
                    }
                });
            }
        }
    });

當你要打開鍵盤時,在線下調用

 edt_searchfilter_searchtext.requestFocus();

https://code.i-harness.com

我試圖在一個Activity中強制打開Soft Keyboard並抓取輸入的所有內容,因為我想自己處理輸入,我沒有EditText。 目前我已經嘗試了這個,但它不起作用。 我想在mAnswerTextView下打開Soft Keyboardto(注意:它是TextView而不是EditText)。

    InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    // only will trigger it if no physical keyboard is open
    mgr.showSoftInput(mAnswerTextView, InputMethodManager.SHOW_IMPLICIT);
  1. 如何強制打開軟鍵盤
  2. 如何獲取輸入的所有內容,以便我可以處理每個角色。 我想在處理之後從軟鍵盤中清除每個字符。 即,用戶不應該在軟鍵盤中輸入整個單詞。

可悲的是,儘管我喜歡對其中一個回復進行投票,但沒有一個對我有用。 似乎解決方案是等待佈局階段完成。 在下面的代碼中,請注意我如何檢查showKeyboard方法是否返回TRUE,並且當我刪除全局佈局偵聽器時。 沒有這樣做,它被擊中和錯過了。 現在看起來效果很好。

您需要在onResume()中理想地執行以下操作

@Override
public void onResume()
{
    super.onResume();

    ViewTreeObserver vto = txtTaskTitle.getViewTreeObserver();
            vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
            {
                @Override
                public void onGlobalLayout()
                {
                    if (txtTaskTitle.requestFocus())
                    {
                        if (showKeyboard(getContext(), txtTaskTitle))
                        {
                            txtTaskTitle.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                        }
                    }
                }
            });
}

public static boolean showKeyboard(Context context, EditText target)
{
        if (context == null || target == null)
        {
            return false;
        }

        InputMethodManager imm = getInputMethodManager(context);

        ((InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(target, InputMethodManager.SHOW_FORCED);

        boolean didShowKeyboard = imm.showSoftInput(target, InputMethodManager.SHOW_FORCED);
        if (!didShowKeyboard)
        {
            didShowKeyboard = ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(target, InputMethodManager.SHOW_FORCED);
        }
        return didShowKeyboard;
}

強制鍵盤打開我使用過

this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

它對我有用。


您可能需要具有某種可編輯的文本區域才能獲得焦點。 但是,您可能有一個不可見或透明背景,沒有光標。 您可能需要使用視圖的可聚焦設置。

使用TextWatcher檢查是否使用addTextChangedListener對EditText進行編輯,或者如果需要偶數較低級別的鉤子,請使用setOnKeyListener()方法設置textview的鍵偵聽器。 請參閱KeyListener文檔

使用此調用強制打開軟鍵盤:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
    .showSoftInput(myEditText, InputMethodManager.SHOW_FORCED);

這個關閉它:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
    .hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

請注意,這是不推薦的 - 強制鍵盤打開是一種混亂。 您的用例是什麼,真正需要您在沒有正常編輯框的情況下接受用戶輸入,並且需要逐個鍵地輸入用戶輸入而不回复它?


有時其他答案不起作用。
這是另一種方式..

它將通過監聽窗口焦點強制鍵盤顯示活動開始的時間。 onWindowFocusChanged()它將清除並請求EditText的焦點,然後將軟輸入模式設置為visible,並將選擇設置為框中的文本。 如果您從活動中調用它,這應始終有效。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        mEditText.clearFocus();
        mEditText.requestFocus();
        getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        mEditText.setSelection(mEditText.getText().toString().length());
    }
}

你可能還需要

mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT);
            }
        }
    });

編輯:我也看到鍵盤未在嵌套片段中打開,請注意這些情況。


簡單地說,使用添加2行就像魅力一樣:

如果使用XML

android:focusable="true"
android:focusableInTouchMode="true"

其他Java:

view.setFocusableInTouchMode(true);
view.requestFocus();

if(search.getText().toString().trim().isEmpty()) {
    InputMethodManager imm = (InputMethodManager)getSystemService(
              Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
}




android