如何使用app:theme扩展Android支持库的工具栏

时间:2016-11-01 11:00:46

标签: android android-layout android-support-library android-toolbar

首先,我想更改颜色菜单项颜色,我使用了这个:

<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属性?

3 个答案:

答案 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个工具栏的父布局。