Как использовать приложение: тема при расширении панели инструментов библиотеки поддержки Android

Во-первых, я хочу изменить цвет пункта меню color, я использовал это:

<android.support.v7.widget.Toolbar 
    
    
    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 


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 больше не работает.

Как сохранить атрибут app: theme в пользовательском представлении при расширении панели инструментов?

3 ответа

  1. Если вы расширяете пользовательское представление с панели инструментов, вы должны использовать это представление и в xml-файле, поэтому в вашем случае:

    <your.package.name.SearchToolbar 
    
    
    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" />
    
  2. Для получения настраиваемой панели инструментов вам не нужно создавать новый класс и extendingс Toolbar.в классе действий можно использовать следующий код.

    // Always cast your custom Toolbar here
     Toolbar tb = (Toolbar) findViewById(R.id.yourCustomToolbarId);
     setSupportActionBar(tb);
    

    Все, что вы хотите изменить, сделать это в xml-файле или файле стиля.Затем бросьте свой класс активности.

  3. Я нашел работу вокруг решения с помощью 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 
    
    
    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 Родительский макет панели инструментов.