支持工具栏与支持搜索视图
support Toolbar Versus support search View
我对支持工具栏有疑问。当我折叠搜索视图时。所有工具栏项目(在我的例子中是 ProgressBar)都设置为 View.VISIBLE ,并且在搜索视图完成折叠时,SearchView 和 SupportMenuItem 都没有监听器,手动 return 我的项目可见性。
我的Toolbar.xml
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark" >
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
<ProgressBar
android:id="@+id/progress_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:indeterminate="true"
android:maxHeight="30dip"
android:minHeight="30dip"
android:visibility="gone" />
</android.support.v7.widget.Toolbar>
以及创建菜单选项
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search, menu);
final SupportMenuItem searchItem = (SupportMenuItem) menu
.findItem(R.id.search);
searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(this);
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view,boolean queryTextFocused) {
if (!queryTextFocused) {
searchItem.collapseActionView();
searchView.setQuery("", false);
}
}
});
return super.onCreateOptionsMenu(menu);
}
实际问题是如何恢复所需工具栏项的可见性?
参考 "All items in custom Toolbar are set to View.VISIBLE after closing SearchView"
https://code.google.com/p/android/issues/detail?id=78160
更新找到解决方案
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark" >
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
<LinearLayout
android:id="@+id/holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right" >
<ProgressBar
android:id="@+id/progress_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:maxHeight="30dip"
android:minHeight="30dip"
android:visibility="gone" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
似乎搜索视图折叠只影响工具栏的直接子项。 :)
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark" >
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
<LinearLayout
android:id="@+id/holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right" >
<ProgressBar
android:id="@+id/progress_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:maxHeight="30dip"
android:minHeight="30dip"
android:visibility="gone" />
</LinearLayout>
似乎搜索视图折叠只影响工具栏的直接子级。希望这篇 post 对你们中的一些人有用。
我对支持工具栏有疑问。当我折叠搜索视图时。所有工具栏项目(在我的例子中是 ProgressBar)都设置为 View.VISIBLE ,并且在搜索视图完成折叠时,SearchView 和 SupportMenuItem 都没有监听器,手动 return 我的项目可见性。
我的Toolbar.xml
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark" >
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
<ProgressBar
android:id="@+id/progress_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:indeterminate="true"
android:maxHeight="30dip"
android:minHeight="30dip"
android:visibility="gone" />
</android.support.v7.widget.Toolbar>
以及创建菜单选项
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search, menu);
final SupportMenuItem searchItem = (SupportMenuItem) menu
.findItem(R.id.search);
searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(this);
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view,boolean queryTextFocused) {
if (!queryTextFocused) {
searchItem.collapseActionView();
searchView.setQuery("", false);
}
}
});
return super.onCreateOptionsMenu(menu);
}
实际问题是如何恢复所需工具栏项的可见性?
参考 "All items in custom Toolbar are set to View.VISIBLE after closing SearchView" https://code.google.com/p/android/issues/detail?id=78160
更新找到解决方案
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark" >
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
<LinearLayout
android:id="@+id/holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right" >
<ProgressBar
android:id="@+id/progress_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:maxHeight="30dip"
android:minHeight="30dip"
android:visibility="gone" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
似乎搜索视图折叠只影响工具栏的直接子项。 :)
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark" >
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
<LinearLayout
android:id="@+id/holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right" >
<ProgressBar
android:id="@+id/progress_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:maxHeight="30dip"
android:minHeight="30dip"
android:visibility="gone" />
</LinearLayout>
似乎搜索视图折叠只影响工具栏的直接子级。希望这篇 post 对你们中的一些人有用。