如何将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> 

Solutions Collecting From Web of "如何将ImageView放在工具栏中?"

在javadoc中 ,它说:

一个或多个自定义视图。 该应用程序可能会将任意的子视图添加到工具栏。 他们会出现在布局的这个位置。 如果子视图的Toolbar.LayoutParams指示CENTER_HORIZONTAL的重力值,则在所有其他元素被测量之后 ,视图将试图在工具栏中剩余的可用空间内居中

这意味着你不能这样做,除非你创build一个自定义的toolbar或删除icon

你可以这样做,因为它遵循它为我工作:

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

将图像设置为工具栏的背景,而不是作为子视图。

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

您可以通过编程来完成,这是我设法将工具栏中的徽标完全居中的唯一方法。

添加到你的活动:

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

对于使用vector绘图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> 

是的,你必须修复在drawable中item的宽度和高度 ,虽然vector drawable已经具有固定大小。
这是你的工具栏视图,

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

我有点晚回答这个问题,但有一个很好的解决scheme

  <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可绘制的

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

在这里输出