0

Zuerst erstreckt, mag ich die Farbe Menüpunkt Farbe ändern, habe ich diese:App nutzen: Thema bei der Toolbar von Android Support-Bibliothek

<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> 

Und es funktioniert gut!

Dann habe ich, um benutzerdefinierte Toolbar wollen:

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() {} 

Ändern der XML-Datei

<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" /> 

Danach wird die App: Thema nicht mehr funktioniert.

Wie kann ich das app: theme-Attribut in meiner benutzerdefinierten Ansicht behalten, wenn ich Toolbar verlängere?

+0

Können Sie ActivityMain bereitstellen? – Real73

+0

Grund, warum Sie eine benutzerdefinierte ToolBar erweitert und erstellt haben? :/ – OBX

Antwort

0

Wenn Sie eine benutzerdefinierte Ansicht von Toolbar erstreckt Sie haben diese Ansicht in der XML-Datei als auch zu verwenden, so in Ihrem Fall:

<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" /> 
+0

Sicher, ich habe es auf XML-Datei. –

+0

Können Sie einen Screenshot der Symbolleiste bereitstellen, die Sie erreichen möchten, damit ich die Änderungen an Ihrem Code vorschlagen kann – AhmedNMahran

0

für eine benutzerdefinierte Symbolleiste, die Sie brauchen nicht zu erstellen Eine neue Klasse und extending mit Toolbar. Sie können den folgenden Code in Ihrer Aktivitätsklasse verwenden.

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

Alles, was Sie ändern möchten, machen es in XML-Datei oder Style-Datei. Dann werfen Sie es Ihre Aktivitätsklasse.

+0

Ich weiß das. Aber das funktioniert nur, und der Code sieht nicht gut aus. Die Frage ist, wie kann ich die App wieder verwenden: Thema Attribut? –

0

fand ich eine Arbeit um Lösung aufblasen

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);}} 

Und innen 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"> 

Diese Lösung ist nicht schlecht mit ist, akzeptieren wir 1 mehr Eltern Layout Toolbar haben .

Verwandte Themen