如何从工具栏 hide\show SearchView?
How to hide\show SearchView from Toolbar?
我有 ToolBar
并且我已经将 Searchview
定义为一个项目:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="never"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
</menu>
然后我有 BaseActivity
class 我定义 Toolbar
:
protected final void onCreate(Bundle savedInstanceState, int layoutId)
{
super.onCreate(savedInstanceState);
setContentView(layoutId);
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(myToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
assert myToolbar != null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
我有搜索 activity,我在其中显示工具栏,我想显示搜索视图。问题是 APP 因 空指针异常 而崩溃,无法找到 SearchView
action_search
public class SearchActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
SearchView searchview = (SearchView) findViewById(R.id.action_search);
searchview.setVisibility(SearchView.VISIBLE);
}
}
show\hide SearchView
的正确方法是什么?
在您的 SearchActivity 中,使用以下代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem menuItem = menu.findItem(R.id.action_search);
menuItem.setVisible(false);
return true;
}
请注意,onCreate
是第一个要调用的 activity 生命周期方法。 onCreateOptionsMenu
在(取决于您的 Android 版本)期间或 onCreate
之后触发。考虑到这一点,当您在 onCreate
方法中 findViewById(R.id.action_search)
时,它将产生一个 NULL
对象,因此会产生错误。
请检查 here 以了解其他开发人员的其他意见。
What is correct way to show\hide SearchView?
您不必手动 show/hide 它。在您的菜单资源中,您已经包含了 android:showAsAction="never"
选项。它means:
切勿将此项目放在应用栏中。相反,在应用栏的溢出菜单中列出项目。
默认情况下,您的搜索视图项已隐藏。要显示它,您需要单击工具栏上的溢出菜单(三个点)。
尝试以下:
首先:将 "app:showAsAction" 属性更改为 "always"
<menu xmlns:android="http://schemas.android.com/apk/res/android"
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
</menu>
其次:不能在onCreate中直接访问SearchView。所以删除下面的代码。
SearchView searchview = (SearchView) findViewById(R.id.action_search);
searchview.setVisibility(SearchView.VISIBLE);
第三:当SearchView添加到工具栏时,即调用onCreateOptionsMenu时,您可以访问SearchView。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem mSearch = menu.findItem(R.id.action_search);
mSearchView = (SearchView) mSearch.getActionView();//Store the reference in global variable of Base activity.
//Do you customization here, like
mSearchView.setOnQueryTextListener(this);
return true;
}
第四:现在你有了对SearchView的引用。所以你可以show/hide搜索视图,如下所示:
if(mSearchView.isShown()) {
mSearchView.setVisibility(View.GONE);
} else {
mSearchView.setVisibility(View.VISIBLE);
}
(科特林)
这里是 show/hide 搜索视图的简单方法:
private lateinit var menuItem: MenuItem
private var mSearchView: SearchView? = null
private fun updateSearchUI(visible: Boolean) {
if (isChecked) {
menuItem.isVisible = true
}else{
menuItem.isVisible = false
}
}
第一次加载 Activity 时,如果您想检查一些首选项和 show/hide:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu, menu)
menuItem = menu!!.findItem(R.id.shortcut_search)
mSearchView = menuItem.actionView as SearchView
updateSearchUI(PreferenceManager.getVisibilityStatus(applicationContext))
return true
}
如果你想切换搜索视图show/hide:
switch_on_off.setOnCheckedChangeListener { buttonView, isChecked ->
updateSearchUI(isChecked)
}
}
我有 ToolBar
并且我已经将 Searchview
定义为一个项目:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="never"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
</menu>
然后我有 BaseActivity
class 我定义 Toolbar
:
protected final void onCreate(Bundle savedInstanceState, int layoutId)
{
super.onCreate(savedInstanceState);
setContentView(layoutId);
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(myToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
assert myToolbar != null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
我有搜索 activity,我在其中显示工具栏,我想显示搜索视图。问题是 APP 因 空指针异常 而崩溃,无法找到 SearchView
action_search
public class SearchActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
SearchView searchview = (SearchView) findViewById(R.id.action_search);
searchview.setVisibility(SearchView.VISIBLE);
}
}
show\hide SearchView
的正确方法是什么?
在您的 SearchActivity 中,使用以下代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem menuItem = menu.findItem(R.id.action_search);
menuItem.setVisible(false);
return true;
}
请注意,onCreate
是第一个要调用的 activity 生命周期方法。 onCreateOptionsMenu
在(取决于您的 Android 版本)期间或 onCreate
之后触发。考虑到这一点,当您在 onCreate
方法中 findViewById(R.id.action_search)
时,它将产生一个 NULL
对象,因此会产生错误。
请检查 here 以了解其他开发人员的其他意见。
What is correct way to show\hide SearchView?
您不必手动 show/hide 它。在您的菜单资源中,您已经包含了 android:showAsAction="never"
选项。它means:
切勿将此项目放在应用栏中。相反,在应用栏的溢出菜单中列出项目。
默认情况下,您的搜索视图项已隐藏。要显示它,您需要单击工具栏上的溢出菜单(三个点)。
尝试以下:
首先:将 "app:showAsAction" 属性更改为 "always"
<menu xmlns:android="http://schemas.android.com/apk/res/android"
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
</menu>
其次:不能在onCreate中直接访问SearchView。所以删除下面的代码。
SearchView searchview = (SearchView) findViewById(R.id.action_search);
searchview.setVisibility(SearchView.VISIBLE);
第三:当SearchView添加到工具栏时,即调用onCreateOptionsMenu时,您可以访问SearchView。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem mSearch = menu.findItem(R.id.action_search);
mSearchView = (SearchView) mSearch.getActionView();//Store the reference in global variable of Base activity.
//Do you customization here, like
mSearchView.setOnQueryTextListener(this);
return true;
}
第四:现在你有了对SearchView的引用。所以你可以show/hide搜索视图,如下所示:
if(mSearchView.isShown()) {
mSearchView.setVisibility(View.GONE);
} else {
mSearchView.setVisibility(View.VISIBLE);
}
(科特林)
这里是 show/hide 搜索视图的简单方法:
private lateinit var menuItem: MenuItem
private var mSearchView: SearchView? = null
private fun updateSearchUI(visible: Boolean) {
if (isChecked) {
menuItem.isVisible = true
}else{
menuItem.isVisible = false
}
}
第一次加载 Activity 时,如果您想检查一些首选项和 show/hide:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu, menu)
menuItem = menu!!.findItem(R.id.shortcut_search)
mSearchView = menuItem.actionView as SearchView
updateSearchUI(PreferenceManager.getVisibilityStatus(applicationContext))
return true
}
如果你想切换搜索视图show/hide:
switch_on_off.setOnCheckedChangeListener { buttonView, isChecked ->
updateSearchUI(isChecked)
}
}