2014-10-21 34 views

Odpowiedz

138

Trzeba użyć nowego Toolbar widżet do osiągnięcia tego celu. Pasek narzędzi ma specjalną obsługę dla minimalnej wysokości, aby zadeklarować ilość miejsca używanego na przyciski (i akcje).

W poniższym przykładzie ustawiamy wysokość na 128dp (czyli 56dp + 72dp zgodnie z definicją w specyfikacji), ale zachowujemy android:minHeight jako standard actionBarSize (zwykle 56dp). Oznacza to, że przyciski i akcje są ograniczone do pionowej pozycji w górnym 56dp. Możemy następnie użyć android:gravity, aby ustawić tytuł na dole.

<Toolbar 
    android:id="@+id/toolbar" 
    android:layout_height="128dp" 
    android:layout_width="match_parent" 
    android:minHeight="?android:attr/actionBarSize" 
    android:background="?android:attr/colorPrimary" 
    android:gravity="bottom" /> 

Jeśli używasz AppCompat, a następnie zmienić deklarację korzystania android.support.v7.widget.Toolbar zamiast korzystania i to atrybuty.

+3

Jeśli używasz 'layout_height' jest do zrobienia, spodziewam się, że obejście opisane przez monsun tutaj również nie jest obejściem, ale właściwą drogą? https://code.google.com/p/android/issues/detail?id=77874 –

+0

Świetnie, ale zgodnie z danymi w wytycznych 56 + 72dp w przypadku portretu. Krajobraz 48dp + 72dp. Stąd moje pragnienie czegoś automagicznego/wbudowanego.Nie można określić actionBarSize + 72dp i wolałby nie powielać kwalifikatorów actionBarSize dla krajobrazu/portretu/tabletu/telefonu. –

+3

Chciałbym też móc zadeklarować wyrażenia również dla wymiarów, ale nie możemy. –

3

Dzięki za pytanie, jej odpowiedź, a ponadto do wykonania paska w natywnej i supportlibrary :)

I możemy grać więcej. W czasie wykonywania możemy grać z wysokością i MinimalHighight.

Wysokość to wysokość paska narzędzi, jest prosta, każde ciało rozumie, a grawitacja działa zgodnie z tą wysokością.

Minimalna wysokość jest trudniejsza i nie powinna wynosić co najmniej 56dp. Ta minHeight służy do umieszczenia linii twojego menuItem. Ta linia jest w środku twojej minHeight.

Możesz dodać ten kod do swojej aktywności, aby przekonać się samemu o różnicy. :)

Runnable toolBarAnimator=new Runnable() { 
     @Override 
     public void run() { 
      if(postICS){ 
//    toolbar.setTranslationX(iteration); 
//    toolbar.setElevation(iteration); 
       toolbar.setMinimumHeight(iteration * 5); 
       toolbar.getLayoutParams().height++; 
      } 
      uiThreadHanlder.postDelayed(this,16); 
      iteration++; 
      if(iteration>150)iteration=0; 
     } 
    }; 
    Handler uiThreadHanlder=new Handler(); 
    int iteration=0; 


    @Override 
    protected void onResume() { 
     super.onResume(); 
     //launch the animation 
     uiThreadHanlder.postDelayed(toolBarAnimator, 1000); 
    } 


    @Override 
    protected void onPause() { 
     super.onPause(); 
     //stop the animation 
     uiThreadHanlder.removeCallbacks(toolBarAnimator); 
    } 

Gdzie jest pasek narzędzi:

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

Kiedy robi to uzyskać: enter image description here

ale jeśli zostawisz animację nadal można uzyskać: enter image description here

jest to dlaczego, ustawienie paska narzędzi androida: layout_height do wrap_content jest dobrym rozwiązaniem w większości przypadku, ponieważ pasek narzędzi dostosuje jego wysokość zgodnie z jego zawartością (i można zmienić zawartość w czasie wykonywania :)

I w ten sposób zmieniasz rozmiar paska narzędziowego w czasie wykonywania.

Dzięki Chris Banes za niesamowitą pracę wykonaną na pasku akcji.

+0

co to jest postICS? in if (postICS) {... –

+0

@MohammadHadi Wyobrażam sobie, że postICS zostałby zdefiniowany w stylu: 'boolean postICS = Build.VERSION.SDK_INT> = Build.VERSION_CODES.JELLY_BEAN;' – dm78

Powiązane problemy