22

С новым API Lollipop мы должны использовать панель инструментов, если хотим персонализировать аспект панели действий.Как разместить ProgressBar справа от панели инструментов?

Добавление панели ProgressBar на панель инструментов так же просто, как добавление ее в панель инструментов ViewGroup, as Chris Banes said.

<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/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/material_green_500" 
    android:minHeight="?attr/actionBarSize" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <!-- Color is Brown 500 --> 
    <ProgressBar 
     android:id="@+id/toolbar_progress_bar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:indeterminateTint="#795548" 
     android:indeterminateTintMode="src_in"/> 

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

Но как мы можем поместить его справа от панели инструментов, к которой она принадлежит?

Атрибут layout_gravity не определен для панели инструментов. Установка его из xml не влияет. Я попытался изменить ширину ProgressBar, без успеха.

Что мне делать?

EDIT: Существует программное решение этой проблемы, см. Ответ @mdelolmo для этого.

+4

layout_gravity работает отлично в AppCompat 21.0.2 – Philio

+0

Awesome! Вы должны сделать ответ. – doplumi

+0

Я нашел эту страницу, имея ту же проблему, что и вы. layout_gravity - действительно ответ. Моя проблема и, вероятно, ваша заключается в том, что автозаполнение студии студии Android утверждает, что нет layout_gravity, но если вы просто наберете ее самостоятельно, она ее найдет. – Gober

ответ

14

я ударил же стену, но программно он работает:

Toolbar.LayoutParams layoutParams = new Toolbar.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      Gravity.TOP | Gravity.RIGHT); 

В моем фрагменте кода я выравнивать его к вершине, чтобы соответствовать выравниванию меню.

+1

Я уже пробовал программно, да, он работает. Проблема заключается в объявлении XML. + 1'ed, потому что это все равно стоит упомянуть, спасибо! – doplumi

-5

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

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/toolbar_height" 
     android:paddingRight="2dp" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:text="@string/app_name" 
      android:textColor="@android:color/white" 
      android:textSize="20sp" 
      android:fontFamily="sans-serif-medium" /> 

     <ProgressBar 
      android:id="@+id/toolbar_progress_bar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:indeterminateTint="#795548" 
      android:indeterminateTintMode="src_in" /> 

</RelativeLayout> 

Обратите внимание, что 20sp без засечек-среда шрифт, используемый в панели инструментов леденец, возможно, потребуется настроить параметры просмотра текста, чтобы сделать его выглядеть естественно в более ранних версиях.

33

Вы можете попробовать это. Это сработало для меня. Ключевым моментом здесь является определение layout_gravity в XML: android:layout_gravity="right"

<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/toolbar" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@color/material_green_500" 
android:minHeight="?attr/actionBarSize" 
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

<!-- Color is Brown 500 --> 
<ProgressBar 
    android:id="@+id/toolbar_progress_bar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:indeterminateTint="#795548" 
    android:indeterminateTintMode="src_in" 
    android:layout_gravity="right" 
/> 

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

Предпочитаете использовать 'layout_gravity =" end "для совместимости справа налево. Однако обратите внимание, что это доступно только для API 17. – bryant1410

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