无法在Android中以编程方式关注edittext(即使在Stack Overflow上尝试以前的答案之后)

时间:2017-10-26 05:43:40

标签: android view android-edittext focus

注意:我的问题不是失去焦点,而是关于获得焦点,因此它不是标记问题的重复

我的工具栏上有一个搜索menuItem,点击它会打开它上面的搜索布局并允许用户搜索。我已经尝试了 Stack Overflow 中其他地方提到的以下解决方案,但它们似乎都不起作用。 (我应该提一下,由于它在别处使用,我无法编辑XML)

来自here

    searchText.requestFocus();
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT);
  1. 这只是弹出键盘,没有任何反应我尝试了这个+ editText.setCursorVisible(true);

  2. 在前述

    之前使用setFocusable(true)setFocusableInTouchMode(true);的各种组合
     searchText.setFocusable(true);
     searchText.setFocusableInTouchMode(true);
     searchText.requestFocus();
     InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
     imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT);
    
  3. 在单独的线程中使用(1)(使用Handler.post

     Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                editText.requestFocus();
                InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
            }
        },100);
    
  4. 致电editText.performClick()

  5. 清除以前的焦点:

    private void clearFocus() {
    if (activity.getCurrentFocus() != null) {
        InputMethodManager imm = (InputMethodManager) activity.getApplication().getSystemService(Activity.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
        activity.getCurrentFocus().clearFocus();
    }
    }
    
  6. 我的代码示例:

    public boolean onOptionsItemSelected(MenuItem menuItem) {
        if (menuItem.getItemId() == R.id.action_search) {
            menuItem.setVisible(false);
            onClickForSearchMenuItem();
            return true;
        }
        return super.onOptionsItemSelected(menuItem);
    }
    
     private void onClickForSearchMenuItem() {
        if (searchLayoutInToolbar != null) {
            searchLayoutInToolbar.setVisibility(View.VISIBLE);
            final EditText editText = (EditText) searchLayoutInToolbar.findViewById(R.id.custom_Search_Layout_Search_EditText);
            //clearFocus();
            //editText.setFocusableInTouchMode(true);
            //editText.setFocusable(true);
            editText.requestFocus();
    
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
            activity.invalidateOptionsMenu();
        }
    }
    

    android的开发者页面指出

      

    如果其父级之一的getDescendantFocusability()等于FOCUS_BLOCK_DESCENDANTS

    ,则视图不会成为焦点

    但我的观点的父母都没有设置到那个

1 个答案:

答案 0 :(得分:2)

试试这个....我希望,这可能对你有帮助。

searchText.setFocusableInTouchMode(true);
searchText.requestFocus();

某些手机(部分旧设备)可能需要这样做:

final InputMethodManager inputMethodManager = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(edittext, InputMethodManager.SHOW_IMPLICIT);

如果不起作用,请在活动的field.requestFocus()方法中尝试onResume()(而不是onCreate())。

感谢。