2015-10-20 12 views
10

Jestem nowy w rozwoju Androida i mam duże problemy z tworzeniem niestandardowego paska narzędzi. Moje wymagania:Jak utworzyć pasek narzędzi z przyciskiem niestandardowym po lewej?

  1. Niestandardowe przycisk po lewej (ikona + tekst)
  2. Przegroda po przycisku niestandardowego wysokość
  3. Przyciski powinny być takie same jak pasku narzędzi (bez marginesów)

Oto próbka obrazek wyjaśniający moje wymagania: enter image description here

Próbowałem użyć actionBar.setCustomView(v);, ale to nie rozwiązało moich problemów:

  1. prawy przyciski posiadają górny/dolny margines - są one mniejsze niż pasku
  2. I nie był w stanie dodać rozdzielacz.
  3. Lewy przycisk (z widoku niestandardowego) był mniejszy niż wysokość paska narzędzi.

Moje pytania:

  1. Czy naprawdę muszę widok niestandardowy, aby dodać niestandardowy przycisk po lewej stronie?
  2. Jak dodać dzielnik po lewej?
  3. Jak ustawić wysokość przycisków taką samą jak wysokość paska narzędzi?
+0

nie masz okazję przetestować dostarczonego rozwiązania? – reVerse

Odpowiedz

23

Toolbar jest w zasadzie FrameLayout, dzięki czemu można dodać wewnątrz znacznika układu, co chcesz. W twoim przypadku coś jak poniżej wydaje się wystarczający:

layout.xml

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?actionBarSize" 
    android:background="?colorPrimary" 
    app:contentInsetLeft="0dp" 
    app:contentInsetStart="0dp" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="?attr/actionBarSize" 
     android:divider="@drawable/divider" 
     android:dividerPadding="8dp" 
     android:orientation="horizontal" 
     android:showDividers="end"> 

     <TextView 
      android:id="@+id/toolbar_save" 
      style="@style/TextAppearance.Widget.AppCompat.Toolbar.Subtitle" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="?attr/selectableItemBackground" 
      android:drawableLeft="@drawable/ic_action_check" 
      android:drawablePadding="8dp" 
      android:gravity="center_vertical" 
      android:paddingLeft="16dp" 
      android:paddingRight="16dp" 
      android:text="Save" 
      android:textAllCaps="true" /> 

    </LinearLayout> 
</android.support.v7.widget.Toolbar> 

divider.xml

Dodaj do tego folderu /res/drawable. Jest to używane jako dzielnik LinearLayout w powyższym kodzie.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <size android:width="1dp" /> 

    <solid android:color="@android:color/white" /> 

</shape> 

Kod

private void setupToolbar() { 
    Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(mToolbar); 
    // Hide the title 
    getSupportActionBar().setTitle(null); 
    // Set onClickListener to customView 
    TextView tvSave = (TextView) findViewById(R.id.toolbar_save); 
    tvSave.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO 
     } 
    }); 
} 

Pod względem pozycji po prawej stronie: Wystarczy skorzystać z metody domyślnej onCreateOptionsMenu i nadmuchać odpowiedni R.menu.* zasobu.

Wynik

result image

+1

app: contentInsetStart = "0dp" rozwiązało to mój problem – umesh

0
<android.support.v7.widget.Toolbar 
     android:layout_width="match_parent" 
     android:layout_height="?actionBarSize" 
     app:contentInsetLeft="0dp" 
     app:contentInsetStart="0dp" 
     app:contentInsetStartWithNavigation="0dp" 
     /> 

Trzeba również aplikację: contentInsetStartWithNavigation = "0DP" do Pasek

Powiązane problemy