ActionBar "up" 按钮颜色变化
ActionBar "up" button color change
我正在尝试更改我在对话框中显示的 ActionBar 上 "up" 图标的颜色。
基本上,我在 ActionBar 上有一个蓝色背景。单击搜索图标后,我将背景更改为灰色,此时我希望我的向上箭头也为灰色(在前一个案例中为白色,背景为蓝色)。
这是我在点击搜索时更改背景的代码:
MenuItemCompat.setOnActionExpandListener(searchView,
new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem menuItem) {
mIsSearchViewOpen = true;
ActionBar ab = ((MyActivity) getActivity()).getSupportActionBar();
//Change the ActionBar background color when SearchView is expanded
if (ab != null) {
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayHomeAsUpEnabled(true);
ab.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_gray_rect));
ab.setHomeAsUpIndicator(R.drawable.ic_back_arrow); //this doesn't work. its still white.
}
return true;
}
});
在上述情况下,灰色背景按预期应用,但为什么没有显示后退箭头?它仍然是白色的。
编辑:我注意到的一件事是它在项目展开时不适用,但在搜索折叠后适用。因此,当对话框打开时,它是白色的。当我点击搜索将其展开时,它仍然是白色的。但是当我点击它并且搜索崩溃时,它变成灰色。
编辑:
我在我的 MyActivity
中设置了我的操作栏,如下所示:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if(toolbar == null) {
ActionBar ab = getSupportActionBar();
if (ab != null) {
ab.setDisplayHomeAsUpEnabled(true);
ab.setElevation(0);
}
} else {
setSupportActionBar(toolbar);
}
此外,这是我的 toolbar
:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:contentInsetLeft="72dp"
android:contentInsetStart="72dp"
app:contentInsetLeft="72dp"
app:contentInsetStart="72dp"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:theme="@style/MyApp.ThemeOverlay.AppCompat.ActionBar"
app:titleTextAppearance="@style/TextAppearance.MyApp.ActionBar.Title"
tools:ignore="UnusedAttribute">
<ImageView
android:id="@+id/toolbar_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/logo_action_bar"
android:visibility="gone"
tools:ignore="ContentDescription" />
<Spinner
android:id="@+id/spinner_nav"
style="@style/Widget.MyApp.Spinner.DropDown.ActionBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
这是我应用于上面工具栏的 theme
:
<style name="MyApp.ThemeOverlay.AppCompat.ActionBar" parent="Theme.AppCompat">
<item name="android:homeAsUpIndicator">@drawable/ic_arrow_back</item>
<item name="homeAsUpIndicator">@drawable/ic_arrow_back</item>
</style>
您可以将 ColorFilter
添加到 Drawable
以对其进行着色:
MenuItemCompat.setOnActionExpandListener(searchView,
new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem menuItem) {
mIsSearchViewOpen = true;
ActionBar ab = ((DSActivity) getActivity()).getSupportActionBar();
//Change the ActionBar background color when SearchView is expanded
if (ab != null) {
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayHomeAsUpEnabled(true);
ab.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_gray_rect));
Drawable drawable = ResourcesCompat.getDrawable(getActivity(), R.drawable.ic_back_arrow, null);
drawable.setColorFilter(new PorterDuffColorFilter(getResources().getColor(R.color.gray), PorterDuff.Mode.SRC_IN));
ab.setHomeAsUpIndicator(drawable);
}
return true;
}
});
在您的 Manifest activity 声明中,确保按如下方式指定您的主题:
android:theme="@style/MyApp.ThemeOverlay.AppCompat.ActionBar"
在 setcontentview 下面的 oncreate 方法中添加以下代码来更改向上箭头的颜色。
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);
我正在尝试更改我在对话框中显示的 ActionBar 上 "up" 图标的颜色。
基本上,我在 ActionBar 上有一个蓝色背景。单击搜索图标后,我将背景更改为灰色,此时我希望我的向上箭头也为灰色(在前一个案例中为白色,背景为蓝色)。
这是我在点击搜索时更改背景的代码:
MenuItemCompat.setOnActionExpandListener(searchView,
new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem menuItem) {
mIsSearchViewOpen = true;
ActionBar ab = ((MyActivity) getActivity()).getSupportActionBar();
//Change the ActionBar background color when SearchView is expanded
if (ab != null) {
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayHomeAsUpEnabled(true);
ab.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_gray_rect));
ab.setHomeAsUpIndicator(R.drawable.ic_back_arrow); //this doesn't work. its still white.
}
return true;
}
});
在上述情况下,灰色背景按预期应用,但为什么没有显示后退箭头?它仍然是白色的。
编辑:我注意到的一件事是它在项目展开时不适用,但在搜索折叠后适用。因此,当对话框打开时,它是白色的。当我点击搜索将其展开时,它仍然是白色的。但是当我点击它并且搜索崩溃时,它变成灰色。
编辑:
我在我的 MyActivity
中设置了我的操作栏,如下所示:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if(toolbar == null) {
ActionBar ab = getSupportActionBar();
if (ab != null) {
ab.setDisplayHomeAsUpEnabled(true);
ab.setElevation(0);
}
} else {
setSupportActionBar(toolbar);
}
此外,这是我的 toolbar
:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:contentInsetLeft="72dp"
android:contentInsetStart="72dp"
app:contentInsetLeft="72dp"
app:contentInsetStart="72dp"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:theme="@style/MyApp.ThemeOverlay.AppCompat.ActionBar"
app:titleTextAppearance="@style/TextAppearance.MyApp.ActionBar.Title"
tools:ignore="UnusedAttribute">
<ImageView
android:id="@+id/toolbar_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/logo_action_bar"
android:visibility="gone"
tools:ignore="ContentDescription" />
<Spinner
android:id="@+id/spinner_nav"
style="@style/Widget.MyApp.Spinner.DropDown.ActionBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
这是我应用于上面工具栏的 theme
:
<style name="MyApp.ThemeOverlay.AppCompat.ActionBar" parent="Theme.AppCompat">
<item name="android:homeAsUpIndicator">@drawable/ic_arrow_back</item>
<item name="homeAsUpIndicator">@drawable/ic_arrow_back</item>
</style>
您可以将 ColorFilter
添加到 Drawable
以对其进行着色:
MenuItemCompat.setOnActionExpandListener(searchView,
new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem menuItem) {
mIsSearchViewOpen = true;
ActionBar ab = ((DSActivity) getActivity()).getSupportActionBar();
//Change the ActionBar background color when SearchView is expanded
if (ab != null) {
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayHomeAsUpEnabled(true);
ab.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_gray_rect));
Drawable drawable = ResourcesCompat.getDrawable(getActivity(), R.drawable.ic_back_arrow, null);
drawable.setColorFilter(new PorterDuffColorFilter(getResources().getColor(R.color.gray), PorterDuff.Mode.SRC_IN));
ab.setHomeAsUpIndicator(drawable);
}
return true;
}
});
在您的 Manifest activity 声明中,确保按如下方式指定您的主题:
android:theme="@style/MyApp.ThemeOverlay.AppCompat.ActionBar"
在 setcontentview 下面的 oncreate 方法中添加以下代码来更改向上箭头的颜色。
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);