gpt4 book ai didi

android - 如何在单击 "Search"菜单时更改操作栏背景?

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:53 26 4
gpt4 key购买 nike

我已经完成了 Android 开发者网站上的搜索界面教程并成功实现了。

我唯一没能实现的是在点击搜索菜单时更改 Actionbar 背景并在点击“后退”按钮时恢复原状?

以下是 Gmail 应用程序的屏幕截图。正常的操作栏看起来像这样。

enter image description here

当您单击“搜索”菜单时,它会更改为如下所示,但不会更改 Activity 。

enter image description here

我想实现这个功能。请帮忙。谢谢。

最佳答案

基本上 FrameLayout 是在包含两个 View 的 Gmail 应用程序中创建的:

  • 工具栏 - 第一个在公共(public) API 中可用的红色工具栏
  • MaterialSearchActionView 包含三个 View
    • ImageView - 带后退箭头
    • 编辑文本
    • ImageView - 带有“x”/“麦克风”

第二个 View 在公共(public) API 中不可用。

我认为这个想法很简单。当您打开 Activity 时,第二个 View 是 GONE,当您按下 Search icon 时,它会显示。无法获取 MaterialSearchActionView,因此您必须创建自己的包含这些控件的 View 。

我创建了如何执行此操作的小示例:

DoubleActionBarActivity.class:

public class DoubleActionBarActivity extends ActionBarActivity {

Toolbar toolbar;
Toolbar searchToolbar;
boolean isSearch;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_with_double_toolbar);
toolbar = (Toolbar) findViewById(R.id.toolbar);
searchToolbar = (Toolbar) findViewById(R.id.toolbar_search);
prepareActionBar(toolbar);
}

private void prepareActionBar(Toolbar toolbar) {
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
if (Build.VERSION.SDK_INT >= 21) {
getWindow().setStatusBarColor(getResources().getColor(isSearch ? android.R.color.darker_gray : android.R.color.holo_red_dark));
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(isSearch ? R.menu.search_for_second_toolbar : R.menu.search_item_only, menu);
if (isSearch) {
final SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView();

search.setIconified(false);
search.setQueryHint("search");
search.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
return true;
}
});
}
return super.onCreateOptionsMenu(menu);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.action_search:{
isSearch = true;
searchToolbar.setVisibility(View.VISIBLE);
prepareActionBar(searchToolbar);
supportInvalidateOptionsMenu();
return true;
}
case android.R.id.home:
if(isSearch){
isSearch = false;
prepareActionBar(toolbar);
searchToolbar.setVisibility(View.GONE);
supportInvalidateOptionsMenu();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}

activity_with_double_toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="@dimen/abc_action_bar_default_height_material">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:background="@android:color/holo_red_dark"
android:layout_width="match_parent"
android:layout_height="match_parent">

</android.support.v7.widget.Toolbar>
<android.support.v7.widget.Toolbar
android:visibility="gone"
android:background="@android:color/darker_gray"
android:gravity="center_vertical"
android:id="@+id/toolbar_search"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.Toolbar>
</FrameLayout>

</LinearLayout>

search_for_second_toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
app:showAsAction="ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
</menu>

search_item_only.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_search"
android:title="search"
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
app:showAsAction="ifRoom" ></item>
</menu>

另外你可以看看这个图书馆

https://github.com/Quinny898/PersistentSearch

这对你来说可能很有趣。

关于android - 如何在单击 "Search"菜单时更改操作栏背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29076628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com