2015-11-12 27 views
9

Mam obecnie szufladę nawigacji z paskiem narzędzi, który ma tytuł, chcę wyśrodkować ten tytuł na pasku narzędzi, ale pasek narzędzi nie bierze pod uwagę ikony szuflady, jak widać w następujący obraz.Tytuł centrum Android z szufladą nawigacji

Off centre

natomiast gdy używam tego samego układu Toolbar dla innych działań, które nie są wewnątrz szuflady nawigacji tytuł jest całkiem w środku, jak pokazano na tym zdjęciu:

enter image description here

Więc jak czy mogę to wziąć pod uwagę tę ikonę?

Oto mój plan:

<android.support.design.widget.AppBarLayout 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:theme="@style/Theme.App.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@color/black" 
     app:popupTheme="@style/Theme.App.PopupOverlay"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <TextView 
       android:id="@+id/toolbar_title" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerInParent="true" 
       android:textColor="@color/white" 
       android:textStyle="bold" 
       android:text="Title" 
       android:textSize="16sp" /> 

     </RelativeLayout> 

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

</android.support.design.widget.AppBarLayout> 

Odpowiedz

19

Musisz zrozumieć, że widget Pasek rozszerza ViewGroup klasę, i to ma swój własny LayoutParams.

Nie potrzebujesz RelativeLayout wewnątrz paska narzędzi i musisz dodać tylko jedną linię z TextView.

android:layout_gravity="center_horizontal" 

A końcowy XML powinien wyglądać tak,

<android.support.design.widget.AppBarLayout xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:theme="@style/Theme.App.AppBarOverlay" > 

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="@color/black" 
    app:popupTheme="@style/Theme.App.PopupOverlay" > 

    <TextView 
     android:id="@+id/toolbar_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Title" 
     android:textColor="@color/white" 
     android:textSize="16sp" 
     android:textStyle="bold" /> 
</android.support.v7.widget.Toolbar> 

+1

Dzięki @Chitrang zrobiłeś mój dzień –

+0

Potrzebuję pokazać obraz i TextView wewnątrz paska narzędzi, jak mogę to zrobić –

2

Musisz zmienić android:layout_width="wrap_content" do android:layout_width="match_parent" w TextView .....

+0

Wszystko to nie jest rozciągnąć widoku tekstu do szerokości paska narzędzi, który, jak mam podświetlonego nie stanowią ikony, więc nadal jest poza centrum –

+0

match_parent i ustawić jego wagi (nie layout_gravity) do center too –

+0

@ NguyễnHoàiNam ponownie nie rozwiązuje problemu, w którym jest przesunięty, ponieważ cały układ nie bierze pod uwagę szerokości przycisku szuflady. –

4

Usuń RelativeLayout, następnie zmienić TextView takiego:

<android.support.design.widget.AppBarLayout 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:theme="@style/Theme.App.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@color/black" 
     app:popupTheme="@style/Theme.App.PopupOverlay"> 

     <TextView 
      android:id="@+id/toolbar_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="Title" 
      android:textColor="@color/white" 
      android:textSize="16sp" 
      android:textStyle="bold"/> 

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

</android.support.design.widget.AppBarLayout> 

Po tej rozmowy setDisplayShowTitleEnabled, aby usuń oryginalny tytuł z onCreate Sposób swojej działalności:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 

     ... 
    } 
} 

Jest to wynik uzyskany:

enter image description here

+0

ta odpowiedź zaoszczędzić mój czas, dziękuję @Mattia –

0

nadzieję, że pomoże. spróbuj użyć tego kodu do kodu xml, z kilkoma zmianami:

enter image description here

<TextView 
     android:id="@+id/toolbar_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="title" 
     android:gravity="center" 
     android:textColor="#ffffff" 
     android:textSize="21dp" 
     android:textStyle="bold" 
     android:paddingRight="30dp" 
     android:paddingLeft="10dp" 
     android:paddingTop="15dp" /> 

użyć tego do każdego działania. Spowoduje to, że Twój tekst pokryje całe miejsce obok ikony i wyśrodkuje tekst w środku.

<android.support.v7.widget.Toolbar android:id="@+id/toolbar" 
    android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> 
<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:paddingTop="15dp" 
     android:src="@drawable/ic_keyboard_arrow_left_black_24dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:id="@+id/toolbar_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="title" 
     android:gravity="center" 
     android:textColor="#ffffff" 
     android:textSize="21dp" 
     android:textStyle="bold" 
     android:paddingRight="30dp" 
     android:paddingLeft="10dp" 
     android:paddingTop="15dp" /> 

</RelativeLayout> 

--------Nav_Drawer layout 

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" android:layout_height="@dimen/nav_header_height" 
     android:background="@drawable/side_nav_bar" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark" android:orientation="vertical" 
     android:gravity="bottom"> 

     <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:paddingTop="@dimen/nav_header_vertical_spacing" 
      android:src="@android:drawable/sym_def_app_icon" android:id="@+id/imageView" /> 

     <TextView android:layout_width="match_parent" android:layout_height="wrap_content" 
      android:paddingTop="@dimen/nav_header_vertical_spacing" android:text="Android Studio" 
      android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> 

     <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:text="[email protected]" android:id="@+id/textView" /> 

    </LinearLayout>