java - 如何在 Android 的 Appbar 中更改 Search View 的背景?
问题描述
我想更改 Appbar 中 SearchView 的背景,这在使用 Java 的 Android 中默认可用。
下图显示了我当前的应用栏的样子:
下图显示了我想要实现什么样的 SearchView 背景(类似于此):
以下是我用于搜索栏的代码:
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
MenuItem item = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
adapter.getFilter2().filter(newText);
return false;
}
});
xml代码是:
<androidx.appcompat.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="#1F2D78"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:titleTextColor="@color/white">
请帮我弄清楚如何实现这一目标
解决方案
您可以使用工具栏内的自定义编辑文本,而不是使用菜单搜索视图。
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center"
app:elevation="0dp">
<com.google.android.material.appbar.MaterialToolbar
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/white"
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center">
<ImageView
android:id="@+id/btnBack"
android:layout_width="22dp"
android:layout_height="match_parent"
android:layout_marginEnd="10dp"
android:layout_marginStart="15dp"
android:src="@drawable/ic_back" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/searchContainer"
android:layout_weight="1"
app:endIconMode="none"
android:layout_width="0dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edtSearch"
android:drawableStart="@drawable/ic_search"
android:drawablePadding="3dp"
android:hint="Search.."
android:paddingStart="7dp"
android:paddingEnd="7dp"
android:inputType="textPersonName"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>
你可以自定义你的TextInputLayout
推荐阅读
- python - 使用索引在列表中搜索 N 个数字并返回索引
- google-cloud-platform - 有没有办法在 GCP 中存储机密,类似于 Azure 保险库?
- c# - 使用 CsvHelper 进行动态列选择 - 如何获取动态 ClassMap
- angular - 以角度 5 实现虚拟滚动
- c++ - 细化会破坏边界处的线条
- .net-core - 创建 ApplicationDbContext 时 HttpContext 为空
- javascript - Joi - 同一对象的参考值
- node.js - mysql2 async/await 未定义的行和字段 node.js
- ruby - Ruby:不同数量的案例语句
- javascript - 完整的日历每年重复特定事件