2012-02-06 2 views
18

Я хотел бы поставить ProgressBar на панели действий, но установкаStyling неопределенный прогрессбар на ActionBar

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
setProgressBarIndeterminateVisibility(true); 

на onCreate методе производит средний размер ProgressBar (48dip х 48dip) я думаю. Я хочу изменить размер progressBar, но я не могу найти, как это сделать. Не могли бы вы мне помочь?

ответ

28

Вам необходимо создать свой собственный стиль для применения к ActionBar. Там есть отличный учебник по Android Developers Blog. Чтобы создать промежуточную полосу прогресса, попробуйте использовать 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> 
+0

он не работает ... progressbar на панели действий все тот же ... – Matroska

+0

Я отредактировал свой отзыв. Он работает сейчас. Извините, я раньше этого не тестировал. Если вы хотите отредактировать меньший ProgressBar, вместо этого используйте «Widget.ProgressBar.Small». :) – adneal

+0

он работает, даже если теперь у меня проблемы с совместимостью с actionbarsherlock – Matroska

2

Для 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> 
+0

работает красиво, но, конечно, не движется. как применить анимацию progress_small_white? – urSus

+0

Когда вы нажимаете на элемент действия, вы можете заменить его фактическим расположением строки выполнения: refreshItem.setActionView (myProgressBarFrameLaoutInflated); – ThanksMister

15

стилизации ANIMATED неопределенными значок прогрессбар на ActionBar:

1.Define Рез/значения/styles.xml (В этом примере используется библиотека Шерлока, чтобы обеспечить ActionBar в старых версиях Android так, если вы Арент с помощью Шерлока вас следует использовать appropiated родителей, чтобы определить свои собственные стили):

<?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 Рез/рисуем/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) в качестве символа неопределенного прогресса. Вы можете использовать столько изображений/чертежей, сколько хотите, добавив новые элементы элемента. Кроме того, вы можете применять различные эффекты/анимации. Более подробная информация здесь: Animation Resources

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.Enjoy вашего анимированного пользовательского прогресс неопределенного значок: D

+0

Возможно, вы захотите предоставить полное решение, а не только ссылку. Благодарю. –

+2

Я отредактировал ответ, наслаждаюсь! –

2

Чтобы сделать 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> 

и установите размер по своему желанию.

8

Я боролся со всеми этими решениями, потому что я не использовал 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, как показано на изображении ниже. Если вы хотите иметь белый цвет ActionBar тогда, конечно, заменить android:Theme.Holo с android:Theme.Holo.Light и т.д.

3) Edit 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 нет необходимости экспортировать любые изображения и перемещать их в ваше доступное место и т. д.

Вот что выглядит мое, си ze значка идеально подходит для меня.

enter image description here

1

Paste ниже кода в методе 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); 
     } 
    }); 
0

Я должен быть совместим с более старыми версиями Android SDK, так что я должен был держать его простым и используется:

styles.xml

<style name="TallerTitleBarDialogThemeStyle" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowTitleSize">36dp</item> 
</style> 

ndroidManifest.xml

android:theme="@style/TallerTitleBarDialogThemeStyle" 

для деятельности мне нужно настроить.

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