簡體   English   中英

當ActionText顯示在操作欄中時,如何聚焦和顯示軟鍵盤?

[英]How to focus and show soft keyboard when a EditText is shown in action bar?

我使用ActionBarSherlock來創建ActionBar它有一個顯示AutoCompleteEditText的搜索按鈕( SHOW_AS_COLLAPSIBLE_ACTION_VIEW )當點擊搜索按鈕時,會顯示EditText ,我希望EditText獲得焦點,從而顯示軟鍵盤,因為它擴展了這是代碼

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.activity_main, menu);

    boolean isLight = true;
    // Add Search button
    int menuItemId = menu
            .add("Search")
            .setIcon(
                    isLight ? R.drawable.ic_search_inverse
                            : R.drawable.ic_search)
            .setActionView(R.layout.collapsible_edittext)
            .setShowAsActionFlags(
                    MenuItem.SHOW_AS_ACTION_ALWAYS
                            | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)
            .getItemId();
    // Add Search Topic (Sub Menu)
    SubMenu subMenu1 = menu.addSubMenu("Topic");
    subMenu1.add(Menu.NONE, 10, 0, "All Topics");
    subMenu1.add(Menu.NONE, 11, 1, "Adult");
    subMenu1.add(Menu.NONE, 12, 2, "Pediatric");
    subMenu1.add(Menu.NONE, 13, 13, "Drug");

    MenuItem subMenu1Item = subMenu1.getItem();
    subMenu1Item.setIcon(R.drawable.abs__ic_menu_moreoverflow_holo_light);
    subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    searchBar = (AutoCompleteTextView) menu.findItem(menuItemId)
            .getActionView().findViewById(R.id.etSearch);

    setSearchSettings(searchMenuID);

    // get instance of Search Button
    searchWidgetItem = menu.findItem(menuItemId);

    searchBar
            .setOnEditorActionListener(new EditText.OnEditorActionListener() {


                @Override
                public boolean onEditorAction(TextView v, int actionId,
                        KeyEvent event) {
                    if (actionId == EditorInfo.IME_ACTION_SEARCH) {

                        // Perform a Search
                        performSearch(v.getText().toString(),
                                (searchMenuID < 0) ? 3 : searchMenuID);

                        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

                        // Collapse the ActionView (Search Bar)
                        searchWidgetItem.collapseActionView();

                        // Clear the TextEdit
                        v.setText("");

                        return true;
                    }
                    return false;
                }
            });
    return true;
}

我試圖在EditText上設置一個OnFocusChangeListener並顯示Soft Keboard,如果它有焦點,但它沒有用:

searchBar.setOnFocusChangeListener(new OnFocusChangeListener() {

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

這該怎么做 ?

找到解決方案:

searchWidgetItem.setOnActionExpandListener(new OnActionExpandListener() {

            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                searchBar.post(new Runnable() {
                    @Override
                    public void run() {
                        searchBar.requestFocus();
                        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.showSoftInput(searchBar,
                                InputMethodManager.SHOW_IMPLICIT);
                    }
                });
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {

                return true;
            }
});

如果仍有問題,請調用以下方法

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

代替

imm.showSoftInput(searchBar, InputMethodManager.SHOW_IMPLICIT);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM