2016-05-27 4 views
2

ich zur Zeit mache eine App mit rückwärts für Symbolleiste unterstützen, und somit habe ich diese DateiWie programm Elemente in der Symbolleiste

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:elevation="4dp" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 
</android.support.v7.widget.Toolbar> 

ich dann programmatisch hinzufügen in die Ansichten von so etwas wie tun:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

aber ich möchte in der Lage sein, benutzerdefinierte Ansichten in der Symbolleiste, wie EditText und Textview ist ohne Hartcodierung sie in die toolbar.xml oben hinzuzufügen.

Gibt es eine Möglichkeit, dies zu tun? Es ist vielleicht erwähnenswert, dass ich die V7-Support-Bibliothek verwende.

Danke, Liam

+1

Sie sie immer in die XML und zeigen könnte hinzufügen oder sie dynamisch verstecken. – cyroxis

Antwort

4

geben Sie einfach einen Versuch an folgende

Schritt 1: LinearLayout in die Symbolleiste in XML-Datei

<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:elevation="4dp" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 
    <LinearLayout 
      android:[email protected]+id/toolbar_item_container 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" /> 
</android.support.v7.widget.Toolbar> 

Schritt 2 hinzufügen: Mit dieser LinearLayout Get in Code

Schritt 3: Hinzufügen und Entfernen Blick auf diesen LinearLayout folgenden Code mit

layoutToolbar.addView(); 
layoutToolbar.removeView(); 

Dies kann auch ohne LinearLayout getan werden, indem man direkt das Hinzufügen und Elemente aus Toolbar entfernen. Sie können beide Wege ausprobieren.

Hoffe, es wird helfen.

+0

Danke! Ich kann bestätigen, dass dies sowohl für das Anfügen an das Layout als auch direkt für die Symbolleiste funktioniert. Ich kann jedoch anscheinend nur Ansichten hinzufügen, indem Sie sie zur Laufzeit erstellen. Irgendeine Idee, wie ich eine benutzerdefinierte XML-Ansicht auf die Symbolleiste/das Layout aufblasen/anhängen würde? –

+0

Verwenden Sie die gleiche Weise wie oben erwähnt..mit der AddView-Methode. Und Element mit der LayoutInFlater-Klasse aufblasen. – ELITE

+3

Ich habe den Code verwendet: View v = getLayoutInflater(). Aufblasen (R.layout.homescreentoolbar, Symbolleiste, false); toolbar.addView (v) ;, aber der Text der Ansicht scheint nicht angezeigt zu werden. :/ –

0

wenn Sie nicht Symbolleiste in xml, können benutzerdefinierte Ansicht festlegen programmatisch

actionBar.setCustomView(R.layout.custom_view); 
    View view = actionBar.getCustomView(); 
    TextView locationTitle = view.findViewById(R.id.tv_custom_toolbar); 
    locationTitle.setText("some text"); 
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    actionBar.setDisplayHomeAsUpEnabled(true);