2012-02-06 13 views
18

Chciałbym umieścić Progressbar na pasku akcji, ale ustawienieStyling nieokreślony progressbar na ActionBar

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

na onCreate metodą produkuje średniej wielkości Progressbar (48dip x 48dip) Chyba. Chcę zmienić rozmiar paska postępu, ale nie mogę go znaleźć. Czy możesz mi pomóc?

Odpowiedz

28

Musisz utworzyć własny styl, aby zastosować go do paska akcji. Na ten temat znajdziesz świetny samouczek na temat Android Developers Blog. Aby ustawić pośredni pasek postępu, spróbuj użyć indeterminateProgressStyle i Widget.ProgressBar.Small. Oto krótki przykład.

<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

To nie działa ... Pasek postępu na pasku akcji jest wciąż taki sam ... – Matroska

+0

Edytowałem moją odpowiedź. Teraz działa. Przepraszam, wcześniej tego nie testowałem. Jeśli chcesz edytować mniejszy pasek postępu, użyj zamiast tego "Widget.ProgressBar.Small". :) – adneal

+0

działa, nawet jeśli teraz mam problemy ze zgodnością z actionbarsherlock – Matroska

2

Dla ActionBarSherlock można zmienić nieokreślony postępów przez rodziców z Widget.ProgressBar.Small, powinno to działać bez Sherlocka również.

Pobrałem rysunki z folderu android-15 res w pakiecie SDK, należy pobrać plik progress_small_white.xml i powiązany zasób.

<?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

działa ładnie, ale oczywiście nie porusza się. jak zastosować animację progress_small_white? – urSus

+0

Po kliknięciu elementu akcji można go zastąpić rzeczywistym układem paska postępu: refreshItem.setActionView (myProgressBarFrameLaoutInflated); – ThanksMister

15

Styled ANIMOWANY nieokreślony ikona progressbar na ActionBar:

1.Define res/wartości/styles.xml (Ten przykład wykorzystuje bibliotekę Sherlock dostarczenie actionbar w starych wersjach Androida tak, jeśli nie jest z ciebie za pomocą Sherlocka ty należy używać appropiated rodziców, aby zdefiniować swoje własne style):

<?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/odkształcalne/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. Powyższy kod wykorzystuje 2 obrazy (ic_progress_logo1 i ic_progress_logo2) jako niestandardową ikonę nieokreślonego postępu. Możesz użyć tyle zdjęć/rysunków, ile chcesz, dodając nowe elementy przedmiotów. Możesz także zastosować różne efekty/animacje. Więcej informacji tutaj:

<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 animowany zwyczaj postępu nieokreślony ikona:: D

+0

Możesz zaproponować kompletne rozwiązanie, a nie tylko łącze. Dzięki. –

+2

Edytowałem odpowiedź, baw się dobrze! –

2

Aby dokonać ProgressBar na utworzeniu użyciu AndroidManifest.xml Animation Resources

4.Apply styl ActionBar mniejszej, co chcesz zrobić, to zastąpić Widget.Holo.ProgressBar.Small jak ten

<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> 

i ustaw rozmiar na dowolny.

8

Zmagałem się z tymi wszystkimi rozwiązaniami, ponieważ nie używałem actionbarsherlock. Wykorzystałem odpowiedź Vlasto Benny'ego Lavy, która początkowo nie działała dla mnie.

Oto co zrobiłem krok po kroku:

1) otworzyć plik styles.xml należy pod /res/values/styles.xml. Jeśli nie istnieje, utwórz go.

2) pasta w:

<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> 

Jeden catchya natknąłem, nie można użyć nazwy hasłem "AppTheme" inaczej nadpisania nie będzie działać. Użyłem "MyTheme". Ten motyw wykorzystuje Holo, więc ma czarny ActionBar, jak widać na obrazku poniżej. Jeśli chcesz mieć białe kolorowe actionbar wtedy oczywiście zastąpić android:Theme.Holo z android:Theme.Holo.Light itp

3) Edytuj AndroidManifest.xml.

swój <application> musi zawierać android:theme="@style/myTheme" tak, że aplikacja jest przy użyciu stylów nadpisywania z styles.xml

czyli mój plik manifestu tag aplikacja wygląda mniej więcej tak:

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/myTheme" 
    android:name="Application Name Here" > 

ponieważ Twój prostu kurczy dół rozmiar z istniejącego postępu png nie ma potrzeby eksportowania żadnych zdjęć i przenoszenia ich do lokalizacji do rysowania itp.

Oto, jak wygląda moja kopalnia, ikona jest dla mnie idealna.

enter image description here

1

Wklej poniżej kod w metodzie on Create i uruchomić ten poniżej paska w trybie pośrednim.
Jeśli chcesz pokazać na procentowy postęp, to skomentować progressBar.setIndeterminate(true); metodę odkomentowane progressBar.setProgress(65) metody i utrzymać swoje postępy

 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

muszę być kompatybilny ze starszymi wersjami systemu Android SDK, więc musiałem zachować to proste i zastosowanie:

Styles.xml

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

ndroidManifest.xml

android:theme="@style/TallerTitleBarDialogThemeStyle" 

za aktywność muszę dostosować.