2015-02-10 3 views
10

Пробовал центрировать логотип внутри моей панели инструментов. Когда я перейду к следующему действию, появится значок «довольный доступ», и он слегка подтолкнет мой логотип вправо. Как я могу сохранить свой логотип в центре панели инструментов, не удаляя значок бесплатного доступа?Как центрировать ImageView на панели инструментов?

Это моя панель тегов

<android.support.v7.widget.Toolbar 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 

android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@color/primaryColor" 
android:paddingTop="@dimen/app_bar_top_padding" 
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" 
app:theme="@style/CustomToolBarTheme"> 

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_android_logo" 
    android:layout_gravity="center" 
    android:paddingBottom="3dp"/> 
</android.support.v7.widget.Toolbar> 

ответ

3

В javadoc, он говорит:

Один или несколько пользовательских просмотров. Приложение может добавлять произвольные дочерние элементы на панель инструментов. Они появятся в этом положении в макете . Если на панели инструментов ChildLayoutParams указано значение Gravity , значение CENTER_HORIZONTAL будет попыткой центрирования в пределах свободного пространства, оставшегося на панели инструментов, после того, как все остальные элементы будут измерены ..

Это означает, что вы не можете сделать это, если вы не создать собственный toolbar или удалить icon.

+0

Я нашел это умным решением http://stackoverflow.com/a/33082083/1544047 – nmdias

2

Установите изображение в качестве фона панели инструментов, а не как дочерний.

<android.support.v7.widget.Toolbar 
    android:id="@+id/detail_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:background="@drawable/my_image" 
    app:theme="@style/CustomToolBarTheme"> 
+0

С LayerList можно вытащить http://developer.android.com/guide/topics/resources/drawable-resource.html# LayerList вы также можете установить цвет фона, установив логотип в виде растрового изображения и помещая под ним цветное твердое (сверху на xml). То есть, если он не задан в теме панели инструментов. – Timo

9

Вы можете сделать это следующим образом она работает для меня:

<android.support.v7.widget.Toolbar 
     android:id="@+id/mainToolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="@dimen/abc_action_bar_default_height_material"> 

     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center"> 
      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/headerLogo" 
       android:contentDescription="@string/app_name" /> 
      </RelativeLayout> 

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

уверен, что это не сработает, если вы добавите пункты меню на панель инструментов, так как это сократит ширину RelativeLayout. – Slickelito

2

можно сделать программно, что это единственный способ, которым я уже успел полностью центрирования логотип в панели инструментов.

Добавить к вам активность:

@Override 
public void onWindowFocusChanged(boolean hasFocus){ 

    // set toolbar logo to center programmatically 
    Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar); 
    ImageView logo = (ImageView) findViewById(R.id.logo); 
    int offset = (toolbar.getWidth()/2) - (logo.getWidth()/2); 
    // set 
    logo.setX(offset); 

} 

и ваш toolbar_main.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" 
    android:id="@+id/main_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="@color/bg_yellow" 
    android:elevation="4dp" 
    android:fontFamily="@string/font_family_thin" 
    app:contentInsetStartWithNavigation="0dp" 
    android:layout_gravity="center_horizontal"> 

    <TextView 
     android:id="@+id/title_toolbar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:fontFamily="@string/font_family_light" 
     android:textColor="@color/text_dark_xxx" 
     android:textSize="@dimen/text_default" 
     android:layout_centerVertical="true" 
     /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:srcCompat="@drawable/logo" 
     android:id="@+id/logo" 
     android:paddingTop="5dp" /> 



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

Я думаю, что это должен быть принятый ответ, ничего не работает, но это! –

0

Я немного поздно, чтобы ответить на этот вопрос, но есть замечательный решение

<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 
<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     app:contentInsetStart="0dp" 
     app:contentInsetEnd="0dp" 
     app:popupTheme="@style/AppTheme.PopupOverlay"> 



    </android.support.v7.widget.Toolbar> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:gravity="center" 
     android:layout_height="wrap_content"> 


     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="?attr/actionBarSize" 
      android:contentDescription="@string/app_name" 
      android:id="@+id/logoImageView" 
      android:layout_centerInParent="true" 
      android:adjustViewBounds="true" 
      android:src="@drawable/toolbar_background" /> 
    </RelativeLayout> 
</FrameLayout> 


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

и здесь это мой toolbar_background.xml drawable

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
     <solid android:color="@color/colorPrimary" /> 
    </shape> 
</item> 
<item> 
    <bitmap 
     android:src="@drawable/splash" android:gravity="center" 
     /> 
</item> 

output here

1

Для разработчиков, которые используют вектор Drawable или SVG изображения.
Это может быть ваш фоном для панели инструментов, drawable_toolbar_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/primary"/> 
     </shape> 
    </item> 
    <item 
     android:width="@dimen/toolbar_app_icon_width" 
     android:height="@dimen/toolbar_app_icon_height" 
     android:drawable="@drawable/ic_app_logo" 
     android:gravity="center"/> 
</layer-list> 

и Да, вы должны зафиксировать ширину и высоту элемента внутри вытяжки, хотя вектор рисует уже имеют фиксированный размер.
Это ваш вид панели инструментов,

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/drawable_toolbar_background" 
    android:minHeight="?attr/actionBarSize" 
    android:theme="?attr/actionBarTheme"/> 
+0

Как-то ваше решение не работает для меня. Значок растягивается, чтобы соответствовать ширине панели инструментов. Вы когда-нибудь испытывали это поведение? Это было закрыто, которое я нашел до сих пор для векторных чертежей ... –

+0

@ DominikusK. Да, у меня была эта проблема. Вот почему вы должны фиксировать ширину и высоту вашего элемента внутри drawable_toolbar_background. Я остановлюсь на этом. –

Смежные вопросы