Intereting Posts

IndeterminateProgressBar в стиле ActionBar – проблема с заполнением

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

<style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small"> <item name="android:progressBarPadding">32dp</item> <item name="progressBarPadding">32dp</item> <item name="android:itemPadding">32dp</item> <item name="itemPadding">32dp</item> </style> <style name="Widget.Styled.ActionBar.Tiles" parent="Widget.Sherlock.Light.ActionBar"> <item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item> <item name="android:progressBarPadding">32dp</item> <item name="progressBarPadding">32dp</item> <item name="android:itemPadding">32dp</item> <item name="itemPadding">32dp</item> </style> 

Проблема в том, что я не могу установить дополнение на индикатор выполнения. Как вы можете видеть выше, я пробовал все возможные комбинации itemPadding и progressBarPadding и т. Д.

Результат всегда один и тот же: Введите описание изображения здесь

Есть идеи?

Solutions Collecting From Web of "IndeterminateProgressBar в стиле ActionBar – проблема с заполнением"

Я нашел рабочее решение, как установить неопределенный индикатор выполнения с соответствующим размером и отступом . Мое решение не использует обходное решение с setActionView (). Это решение для встроенных функциональных возможностей, поддерживаемых встроенной панелью действий (ActionBarSherlock). Индикатор выполнения активирован / отключен с помощью метода setProgressBarIndeterminateVisibility (boolean) . Я тестировал его на Android 2, 3, 4 и ldpi, mdpi, xhdpi.

результат

AndroidManifest.xml:

 <application ... android:theme="@style/Theme.Example"> 

/res/values/styles.xml:

 <resources xmlns:android="http://schemas.android.com/apk/res/android"> ... <style name="Theme.Example" parent="Theme.Sherlock"> <item name="actionBarStyle">@style/Example.ActionBar</item> <item name="android:actionBarStyle">@style/Example.ActionBar</item> </style> <style name="Example.ActionBar" parent="Widget.Sherlock.ActionBar"> <item name="indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item> <item name="android:indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item> </style> <style name="Example.ActionBar.IndeterminateProgressBar" parent="@android:style/Widget.ProgressBar.Large.Inverse"> <item name="android:indeterminateDrawable">@drawable/layer_list_ab_indeterminate_progress_bar</item> <item name="android:minWidth">@dimen/ab_indeterminate_progress_bar_size</item> <item name="android:maxWidth">@dimen/ab_indeterminate_progress_bar_size</item> <item name="android:minHeight">@dimen/ab_indeterminate_progress_bar_size</item> <item name="android:maxHeight">@dimen/ab_indeterminate_progress_bar_size</item> </style> </resources> 

/res/drawable/layer_list_ab_indeterminate_progress_bar.xml:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <!-- /res/drawable-mdpi/ab_indeterminate_progress_bar asset is taken from /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png and its content (optical square) is resized to ~0.6 (must be even number) /res/drawable-mdpi-v14/ab_indeterminate_progress_bar asset is taken from /sdk/platforms/android-18/data/res/mdpi/spinner_48_outer_holo.png and its content (optical square) is resized to 0.75 --> <rotate android:drawable="@drawable/ab_indeterminate_progress_bar" android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="360" /> </item> </layer-list> 

/res/values/dimens.xml:

 <dimen name="ab_indeterminate_progress_bar_size">48dp</dimen> 

Наконец, я создал активацию показателей прогресса. Я использовал эти два актива из Android SDK:

  • /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png для сотовых и более старых
  • /sdk/platforms/android-18/data/res/mdpi/spinner_48_outer_holo.png для ICS и новее

Чтобы получить правильный размер и дополнение , нам нужно изменить размеры активов. Я изменил размер spinner_white_48.png до ~ 0.6 . Для mdpi это было 28px. Это должно быть четное число, которое будет центрально-симметричным. Я изменил только содержимое, а не весь значок. Значит, значок в mdpi имеет 48px, но его содержимое (оптический квадрат) меньше (28px). Вы можете легко изменить размер контента таким образом: сначала измените размер изображения на 28px X 28px, затем измените размер холста на 48px X 48px. Я изменил размер spinner_48_outer_holo.png до 0,75 . Вы можете загрузить перечисленные ниже активы.

Почему я использую разные активы для Honeycomb- и ICS +? Потому что, если я использую только активы Holo, анимация немного разрывается на некоторых устройствах с Honeycomb.

Совет. Вы можете добавить еще один элемент с некоторой анимацией в layer_list_ab_indeterminate_progress_bar.xml. Например, стандартный индикатор прогресса Холо использует 2 анимации в противоположном направлении и в разных градусах. См. Progress_medium_holo.xml в SDK.

/res/drawable-mdpi/ab_indeterminate_progress_bar.png:

Введите описание изображения здесь

/res/drawable-mdpi-v14/ab_indeterminate_progress_bar.png (почти не видно на этой странице):

Введите описание изображения здесь

/res/drawable-hdpi/ab_indeterminate_progress_bar.png:

Введите описание изображения здесь

/res/drawable-hdpi-v14/ab_indeterminate_progress_bar.png (почти не видно на этой странице):

Введите описание изображения здесь

/res/drawable-xhdpi/ab_indeterminate_progress_bar.png:

Введите описание изображения здесь

/res/drawable-xhdpi-v14/ab_indeterminate_progress_bar.png (почти не видно на этой странице):

Введите описание изображения здесь

Я не знаю точного ответа, но эти настройки работали для меня.

Это мой refresh_spinner.xml

  <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center"> <ProgressBar android:layout_width="32dp" android:layout_height="32dp" android:layout_gravity="center" android:layout_marginRight="12dp" android:layout_marginLeft="12dp" style="?indeterminateProgressStyle" /> </FrameLayout> 

И это в соответствующем стиле xml

 <style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.ActionBar"> <item name="indeterminateProgressStyle">?android:attr/progressBarStyleSmallInverse</item> </style> 

Эти настройки работали для меня. Пожалуйста, дайте мне знать, если у вас есть какие-либо сомнения.

С уважением Парваз Бхаскар

EDIT2: так как я пытался использовать разные методы, я в конечном итоге использовал? Android: attr / progressBarStyleSmallInverse как единственное свойство в моем стиле.xml, которое позже переопределило его из моего spinner xml под стилем как style = "? IndeterminateProgressStyle"

РЕДАКТИРОВАТЬ: сохраняйте ссылку на свой элемент меню, и всякий раз, когда вы хотите показать индикатор прогресса, используйте setActionView (R.layout.your_layout) и измените его на нулевое, когда это будет необходимо. OnCreateOptionsMenu было бы хорошим местом для захвата menuItem при запуске.

Я встречаюсь с этим сегодня и нахожу решение для Android 3/4 +

 ProgressBar mProgressBarInActionBar = null; Resources res = Resources.getSystem(); int id = res.getIdentifier("progress_circular", "id", "android"); View internal = findViewById(id); if(internal != null && internal instanceof ProgressBar){ mProgressBarInActionBar = (ProgressBar)internal; } mProgressBarInActionBar.setPadding(0, 0, right, 0); 

Установите подходящее право 🙂

У меня была та же проблема, и я нашел легкий ответ:

 <style name="ActionBarProgressBar.MyStyle" parent="@android:style/Widget.Holo.ProgressBar.Large"> <item name="android:minWidth">56dp</item> <item name="android:maxWidth">56dp</item> <item name="android:minHeight">35dp</item> <item name="android:maxHeight">35dp</item> </style> 

Ширина – это стандартная ширина элемента Actionbar. Если вы измените minHeight и maxHeight, изображение будет масштабироваться в обоих направлениях.

И вот стиль Actionbar, в котором вы устанавливаете внешний вид Неопределенного прогресса:

 <style name="action_bar_theme" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:indeterminateProgressStyle">@style/ActionBarProgressBar.MyStyle</item> </style> 

И определение в теме, которую вы используете (не забудьте использовать ее в своем манифесте):

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/action_bar_theme</item> </style> 

Привет, Пол