How to center ImageView in a toolbar?

2019-04-19 01:04发布

Been trying to center a logo inside my toolbar. When i navigate to the next activity, the "up affordance" icon is present, and it will push my logo slightly to the right. How can I keep my logo at the center of the toolbar, without removing the up affordance icon?

This is my toolbar tag

<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>

8条回答
smile是对你的礼貌
2楼-- · 2019-04-19 01:39

The easiest solution that works even with menu actions present is this:

 <android.support.design.widget.AppBarLayout
    android:id="@+id/apbMain"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/tlbMain"
        android:layout_width="match_parent"
        android:layout_height="?android:actionBarSize"
        app:navigationContentDescription="@null"
        app:title="@null"
        app:subtitle="@null"
        app:popupTheme="@style/AppTheme.PopupOverlay">

            <ImageButton
                android:id="@+id/btnBack"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingTop="12dp"
                android:paddingBottom="12dp"
                android:scaleType="centerInside"
                android:background="@null"
                android:onClick="onBackClickListener"
                android:src="@drawable/ic_navigation_back"
                android:visibility="@{showBackBtn ? View.VISIBLE : View.INVISIBLE}" />

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:layout_gravity="center"
                android:src="@drawable/toolbar_icon" />

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

</android.support.design.widget.AppBarLayout>
查看更多
神经病院院长
3楼-- · 2019-04-19 01:44

In javadoc, it says:

One or more custom views. The application may add arbitrary child views to the Toolbar. They will appear at this position within the layout. If a child view's Toolbar.LayoutParams indicates a Gravity value of CENTER_HORIZONTAL the view will attempt to center within the available space remaining in the Toolbar after all other elements have been measured.

It means you cannot do it unless you create a custom toolbar or remove the icon.

查看更多
Deceive 欺骗
4楼-- · 2019-04-19 01:44

I am bit late to answer this , but have wonderful solution

 <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>

and here is my 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

查看更多
干净又极端
5楼-- · 2019-04-19 01:47

You need to use the AppBarLayout widget with the Toolbar widget and setting the contentInsetStart to 0dp. Otherwise the Toolbar will about 8dp of padding at the start (to insert the navigation buttons if needed)

Here's the working code:

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:fitsSystemWindows="false"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

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

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="left"
            android:adjustViewBounds="true"
            android:scaleType="centerInside"
            android:src="@drawable/company_logo" />

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


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

Also, make sure you use ?attr/actionBarSize as the height for the toolbar as this is the default actionBar height and will adjust to all the different screen sizes.

查看更多
做自己的国王
6楼-- · 2019-04-19 01:49

You can do it as following it works for me :

<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>
查看更多
戒情不戒烟
7楼-- · 2019-04-19 01:52

For the devs who are using vector drawable or SVG images.
This can be your background for toolbar, 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>

and Yes, you have to fix the width and height of item inside drawable, although the vector drawable is already having fixed size.
This is your toolbar view,

<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"/>
查看更多
登录 后发表回答