2015-05-18 2 views
1

Целью того, что я хочу достичь, является центрирование пользовательского логотипа на ActionBar. У меня есть следующий пользовательский макет для моего ActionBar:Каков наилучший способ правильно настроить логотип на ActionBar?

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:contentDescription="@string/app_name" 
     android:src="@drawable/logo_header" /> 
</FrameLayout> 

Это дает ожидаемый визуальный результат, если не будет какой-либо кнопки действий иконки/перелив справа. Если есть, логотип будет центрирован относительно доступного пространства на ActionBar, что делает его похожим на то, что он не центрирован, потому что логотип будет выровнен слева.

Высокий уровень, что я хочу попробовать, рассчитать разницу между абсолютной шириной экрана ActionBar и доступной шириной, а затем применить на логотипе layoutMarginLeft, равный значению этой разницы. Я думаю, что могу добиться этого, получив количество видимых пунктов меню и умножив их по их ширине (я полагаю, что могу найти для него размер по умолчанию).

Однако, прежде чем я это сделаю, мне было интересно, есть ли более простое решение, которое я пропускаю? Может ли это быть разрешено только через пользовательский макет, например?

Спасибо!

ответ

1

У меня был такой же выпуск. Я закончил тему темы NoActionabr, а затем использовал панель инструментов и поместил ее над ней, сделав ее центрированной.

Тема

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/primary</item> 
     <item name="colorPrimaryDark">@color/primary_dark</item> 
    </style> 

</resources> 

XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    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="match_parent"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar_journal_main" 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:background="@color/primary" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 
    </android.support.v7.widget.Toolbar> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:layout_marginLeft="72dp" 
     android:layout_marginRight="72dp"> 

     <ImageView 
      android:id="@+id/datePrevious" 
      android:layout_width="48dp" 
      android:layout_height="48dp" 
      android:layout_centerVertical="true" 
      android:background="@drawable/button_flat_selector" 
      android:clickable="true" 
      android:padding="8dp" 
      android:src="@mipmap/ic_chevron_left"/> 

     <TextView 
      android:id="@+id/tbDate" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center" 
      android:text="Today, April 20" 
      android:textColor="@color/white" 
      android:textSize="18dp" 
      android:textStyle="bold"/> 

     <ImageView 
      android:id="@+id/dateNext" 
      android:layout_width="48dp" 
      android:layout_height="48dp" 
      android:layout_alignParentRight="true" 
      android:layout_centerVertical="true" 
      android:background="@drawable/button_flat_selector" 
      android:clickable="true" 
      android:padding="8dp" 
      android:src="@mipmap/ic_chevron_right"/> 
    </RelativeLayout> 
</RelativeLayout> 

enter image description here

+0

Что касается тени, я создал файл XML и помещен это ниже. Если вы хотите, чтобы я загрузил этот файл, я обновлю ответ. –

+1

Спасибо, Евгений, ты действительно думал из коробки на этом :) –

1

Через день, я нашел ответ that was posted on StackOverflow некоторое время назад, который работает очень хорошо.

Вот суть его:

ActionBar.LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER); 

View customView = getLayoutInflater().inflate(R.layout.action_bar_custom_view, null); 

getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM) 
getActionBar().setCustomView(customView, lp); 
1

основе @Amokrane Chentir ответ я был в состоянии создать простой пользовательский макет Рез файл/макет/custom_actionbar_content.xml. Он может содержать любой текст/изображения, которые мы можем настроить.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar_journal_main" 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:background="@android:color/transparent"> 

     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" 
      android:text="INSIDE ORIGINAL ACTION TOOLBAR"/> 

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

, а затем в Acivity OnCreate():

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 

    val abLayoutParams = ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER); 
    val abCustomView = layoutInflater.inflate(R.layout.custom_actionbar_content, null) 
    supportActionBar?.displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM 
    supportActionBar?.setCustomView(abCustomView, abLayoutParams) 

    title = "" 
} 

Результат:

enter image description here

enter image description here

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