Android how to focus ActionBar searchView

后端 未结 9 1250
野性不改
野性不改 2020-12-23 09:19

Hello i need to put some text inside the searchView and focus/expand the searchView widget.

this is what i tried but it doesn\'t work

@Override
publi         


        
相关标签:
9条回答
  • 2020-12-23 10:06

    I implemented it in onCreateOptionMenu and it worked. You don't need to using setIconified(false);

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
    
            // Associate searchable configuration with the SearchView
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
            searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
            searchView.setMaxWidth(Integer.MAX_VALUE);
            searchView.setOnClickListener(view -> menu.findItem(R.id.action_sleep_timer).setVisible(false));
            searchView.setOnCloseListener(() -> {
                menu.findItem(R.id.action_sleep_timer).setVisible(true);
                return false;
            });
            searchView.setOnSearchClickListener(view -> {
                menu.findItem(R.id.action_sleep_timer).setVisible(false);
                searchView.requestFocus();
            });
    return true;
        }
    
    0 讨论(0)
  • 2020-12-23 10:08
    public void setIconified(boolean iconify) {
        if (iconify) {
            onCloseClicked();
        } else {
            onSearchClicked();
        }
    }
    

    this is code in SearchView

    setIconified() is worked for me

    0 讨论(0)
  • 2020-12-23 10:10

    In case SearchView is made by menu configuration, I expand the action view using menu item.

    private var searchMenuItem: MenuItem? = null
    
    // create search menu item
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.search_menu, menu)
        searchMenuItem = menu?.findItem(R.id.action_search)
        val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
        (searchMenuItem?.actionView as? SearchView)?.apply {
            setSearchableInfo(searchManager.getSearchableInfo(componentName))
        }
        return super.onCreateOptionsMenu(menu)
    }
    
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_search)
        setSupportActionBar(findViewById(R.id.toolbar))
        // Execute 'expandActionView' delayed 
        // because I want to focus field only when first start.
        Handler().postDelayed({
            // show field and focus it.
            searchMenuItem?.expandActionView()
        }, 500)
    }
    
    0 讨论(0)
提交回复
热议问题