首先,我想更改颜色菜单项颜色,我使用了这个:
<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/search_toolbar"
style="@style/Widget.CustomActionBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/light_background"
app:theme="@style/SearchToolbarTheme" />
<style name="SearchToolbarTheme" parent="Widget.AppCompat.Toolbar">
<item name="colorControlNormal">@color/slate_grey</item> <!-- Arrow color -->
<item name="colorControlHighlight">@color/grey</item> <!-- Ripple effect color -->
<item name="colorPrimaryDark">@color/dark_blue</item> <!-- Status bar color -->
<item name="colorPrimary">@color/dark_blue</item> <!-- Status bar color -->
</style>
效果很好!
然后,我想自定义工具栏:
public class SearchToolbar extends Toolbar {
public SearchToolbar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public SearchToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {}
将xml文件更改为
<com.abc.searchtoolbar.SearchToolbar xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/search_toolbar"
style="@style/Widget.CustomActionBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/light_background"
app:theme="@style/SearchToolbarTheme" />
之后,应用:主题不再适用。
当我扩展工具栏时,如何在自定义视图中保留app:theme属性?
答案 0 :(得分:0)
如果要从工具栏扩展自定义视图,则必须在xml文件中使用该视图,因此在您的情况下:
<your.package.name.SearchToolbar xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/search_toolbar"
style="@style/Widget.CustomActionBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/light_background"
app:theme="@style/SearchToolbarTheme" />
答案 1 :(得分:0)
要获取自定义工具栏,您无需使用extending
创建新类和Toolbar
。您可以在Activity类中使用以下代码。
// Always cast your custom Toolbar here
Toolbar tb = (Toolbar) findViewById(R.id.yourCustomToolbarId);
setSupportActionBar(tb);
您要更改的所有内容都会在xml文件或样式文件中生成。然后将其转换为您的Activity类。
答案 2 :(得分:0)
我使用 inflate
找到了解决方案public class SearchToolbar extends FrameLayout {
public SearchToolbar(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public SearchToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
inflate(getContext(), R.layout.layout_search_toolbar, this);}}
在layout_search_toolbar.xml里面
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar 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:id="@+id/search_toolbar"
style="@style/Widget.CustomActionBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/light_background"
app:theme="@style/SearchToolbarTheme"
tools:showIn="@layout/layout_laz_appbar">
这个解决方案还不错,接受我们将有1个工具栏的父布局。