Стадия неопределенного прогресса на ActionBar
Я хотел бы поместить progressBar в панель действий, но установив
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarIndeterminateVisibility(true);
on onCreate
метод производит средний размер progressBar (48dip x 48dip), я думаю. Я хочу изменить размер progressBar, но я не могу найти, как это сделать. Можете ли вы мне помочь?
Ответы
Ответ 1
Вам нужно создать свой собственный стиль, чтобы применить к ActionBar. Там есть отличный учебник по Блог разработчиков Android. Чтобы создать промежуточную полосу прогресса, попробуйте использовать indeterminateProgressStyle
и Widget.ProgressBar.Small
. Вот краткий пример.
<style name="YourTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/ActionBarIPS</item>
</style>
<style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar">
<item name="android:indeterminateDrawable">@drawable/ic_launcher</item>
</style>
<style name="ActionBarIPS" parent="@android:style/Widget.ActionBar">
<item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item>
<item name="android:background">@color/white</item>
</style>
Ответ 2
Стилированный ANIMATED неопределенный значок progressbar на ActionBar:
1.Define res/values /styles.xml(В этом примере используется библиотека Шерлок для обеспечения панели действий в старых версиях Android, поэтому, если вы не используете Sherlock, вы должны использовать соответствующих родителей для определения ваших пользовательских стилей):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="Theme.Sherlock">
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.Light.ActionBar">
<item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item>
<item name="indeterminateProgressStyle">@style/IndeterminateProgress</item>
</style>
<style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small">
<item name="android:indeterminateDrawable">@drawable/progress_indeterminate_custom</item>
</style>
</resource>
2.Define res/drawable/progress_indeterminate_custom.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<rotate
android:drawable="@drawable/ic_progress_logo1"
android:fillAfter="true"
android:fromDegrees="-180"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="180" />
</item>
<item>
<rotate
android:drawable="@drawable/ic_progress_logo2"
android:fillAfter="true"
android:fromDegrees="180"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="-180" />
</item>
</layer-list>
3. В предыдущем коде используется 2 изображения (ic_progress_logo1 и ic_progress_logo2) в качестве пользовательского прогона неопределенного значка. Вы можете использовать столько изображений/чертежей, сколько хотите, добавив новые элементы элемента. Кроме того, вы можете применять различные эффекты/анимации. Подробнее здесь: Анимационные ресурсы
Стиль 4.Apply, который вы создали с помощью AndroidManifest.xml:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name=".application.MyApplication">
<activity
android:name=".activities.MyActivity"
android:label="@string/app_name"
android:theme="@style/MyTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
5. Наслаждайтесь вашим анимированным пользовательским прогрессом неопределенного значка: D
Ответ 3
Я боролся со всеми этими решениями, потому что не использовал actionbarsherlock
. Я воспользовался ответом Vlasto Benny Lava, который изначально не работал у меня.
Вот что я сделал шаг за шагом:
1) откройте файл styles.xml, он должен находиться под /res/values/styles.xml
. Если он не существует, создайте его.
2)
вставить:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="myTheme" parent="android:Theme.Holo">
<item name="android:actionBarStyle">@style/ActionBar.MyStyle</item>
</style>
<style name="ActionBar.MyStyle" parent="@android:style/Widget.Holo.ActionBar">
<item name="android:indeterminateProgressStyle">@style/ActionBarProgressBar.MyStyle</item>
</style>
<style name="ActionBarProgressBar.MyStyle" parent="@android:style/Widget.Holo.ProgressBar.Small">
<item name="android:minWidth">28dp</item>
<item name="android:maxWidth">28dp</item>
<item name="android:minHeight">28dp</item>
<item name="android:maxHeight">28dp</item>
</style>
</resources>
Один catchya, на который я наткнулся, вы не можете использовать название темы "AppTheme", иначе переопределения не будут работать. Я использовал "MyTheme". Эта тема использует Holo, поэтому он имеет черный ActionBar, как показано на изображении ниже. Если вы хотите иметь белый цвет панели действий, то, конечно, замените android:Theme.Holo
на android:Theme.Holo.Light
и т.д.
3) Изменить AndroidManifest.xml
.
ваш <application>
должен содержать android:theme="@style/myTheme"
, чтобы приложение использовало стили переопределения от styles.xml
т.е. мой файл тега манифеста приложений выглядит примерно так:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/myTheme"
android:name="Application Name Here" >
Поскольку вы просто сокращаете размер существующего прогресса png, нет необходимости экспортировать какие-либо изображения и перемещать их в свое доступное место и т.д.
Здесь, как выглядит мой, размер значка идеально подходит для меня.
![enter image description here]()
Ответ 4
Для ActionBarSherlock вы можете изменить неопределенный прогресс, родив Widget.ProgressBar.Small, это должно работать без Шерлока.
Я извлек чертежи из папки android-15 res в SDK, не забудьте захватить progress_small_white.xml и связанный ресурс.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Dark" parent="Theme.Sherlock">
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.Light.ActionBar">
<item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item>
<item name="indeterminateProgressStyle">@style/IndeterminateProgress</item>
</style>
<style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small">
<item name="android:indeterminateDrawable">@drawable/progress_small_holo</item>
</style>
</resource>
Ответ 5
Чтобы сделать ProgressBar на ActionBar меньше, то, что вы хотите сделать, это переопределить Widget.Holo.ProgressBar.Small
как этот
<style name="Theme.MyStyle" parent="@style/Theme.AppCompat.Light.DarkActionBar">
...
<item name="actionBarStyle">@style/ActionBar.MyStyle</item>
...
</style>
<style name="ActionBar.MyStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
...
<item name="android:indeterminateProgressStyle">@style/ActionBarProgressBar.MyStyle</item>
...
</style>
<style name="ActionBarProgressBar.MyStyle" parent="@android:style/Widget.Holo.ProgressBar.Small">
<item name="android:minWidth">28dp</item>
<item name="android:maxWidth">28dp</item>
<item name="android:minHeight">28dp</item>
<item name="android:maxHeight">28dp</item>
</style>
и установите размер в соответствии с тем, что вы хотите.
Ответ 6
Вставьте ниже код в свой on Create
метод и запустите эту панель ниже в промежуточном режиме.
Если вы хотите показать процент прогресса, прокомментируйте метод progressBar.setIndeterminate(true);
и раскомментируйте progressBar.setProgress(65)
и поддерживайте свой прогресс.
progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 24));
//progressBar.setProgress(65);
//progressBar.setBackgroundDrawable(getResources().getDrawable(R.color.lock_background_greeen));
progressBar.setIndeterminate(true);
// retrieve the top view of our application
final FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
decorView.addView(progressBar);
ViewTreeObserver observer = progressBar.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
View contentView = decorView.findViewById(android.R.id.content);
progressBar.setY(contentView.getY() - 10);
ViewTreeObserver observer = progressBar.getViewTreeObserver();
observer.removeGlobalOnLayoutListener(this);
}
});
Ответ 7
Я должен быть совместим со старыми версиями Android SDK, поэтому мне пришлось держать его простым и используемым:
styles.xml
<style name="TallerTitleBarDialogThemeStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowTitleSize">36dp</item>
</style>
AndroidManifest.xml
android:theme="@style/TallerTitleBarDialogThemeStyle"
для активности, которую мне нужно настроить.