wake-up-neo.com

Unbestimmtes Fortschrittsbalken in ActionBar

Ich möchte eine Fortschrittsleiste in die Aktionsleiste setzen, aber einstellen 

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

die Methode onCreate erzeugt eine mittelgroße progressBar (48dip x 48dip) -rate. Ich möchte die Größe der Fortschrittsleiste ändern, finde aber nicht wie. Kannst du mir bitte helfen?

18
Matroska

Sie müssen Ihren eigenen Stil erstellen, um auf die ActionBar angewendet zu werden. Dazu gibt es ein tolles Tutorial im Android Developers Blog. Um den Fortschrittsbalken zu gestalten, verwenden Sie indeterminateProgressStyle und Widget.ProgressBar.Small. Hier ist ein kurzes Beispiel.

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

Animiertes unbestimmtes Fortschrittsbalkensymbol in ActionBar:

1. Definieren Sie res/values ​​/ styles.xml (In diesem Beispiel wird die Sherlock-Bibliothek verwendet, um die Actionbar in alten Android-Versionen bereitzustellen. Wenn Sie also nicht Sherlock verwenden, sollten Sie geeignete Eltern verwenden, um Ihre benutzerdefinierten Stile zu definieren.)

<?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. Definiere 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. Der obige Code verwendet 2 Bilder (ic_progress_logo1 und ic_progress_logo2) als benutzerdefiniertes Fortschritts-unbestimmtes Symbol. Sie können beliebig viele Bilder/Zeichnungen verwenden, indem Sie neue Elementelemente hinzufügen. Sie können auch verschiedene Effekte/Animationen anwenden. Weitere Infos hier: Animationsressourcen

4.Anwendung, die Sie mit AndroidManifest.xml erstellt haben:

<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.Genießen Sie Ihr animiertes benutzerdefiniertes Fortschritts-Symbol: D

15
Alberto M.

Ich hatte Probleme mit all diesen Lösungen, weil ich actionbarsherlock nicht verwendete. Ich nutzte die Antwort von Vlasto Benny Lava, die anfangs für mich nicht funktionierte.

Das habe ich Schritt für Schritt gemacht:

1) öffne deine styles.xml Datei, sie sollte sich unter /res/values/styles.xml befinden. Wenn es nicht existiert, erstellen Sie es.

2) Einfügen in:

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

Ein Catchya, auf das ich gestoßen bin, kann nicht den Themennamen "AppTheme" verwenden, da sonst die Überschreibungen nicht funktionieren. Ich habe "MyTheme" verwendet. Dieses Thema verwendet Holo, so dass es eine schwarze ActionBar hat, wie im Bild unten zu sehen. Wenn Sie eine weiße Aktionsleiste wünschen, ersetzen Sie Android:Theme.Holo natürlich durch Android:Theme.Holo.Light usw.

3) Edit AndroidManifest.xml

ihr <application> muss Android:theme="@style/myTheme" enthalten, damit die Anwendung Ihre Überschreibungsstile aus styles.xml verwendet.

dh meine Manifest-Anwendungs-Tag-Datei sieht ungefähr so ​​aus:

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

Da Sie die Größe des vorhandenen Fortschrittspng einfach verkleinern müssen, müssen Sie keine Bilder exportieren und sie an Ihren Zeichnungsort usw. verschieben.

So sieht meins aus, die Größe des Symbols ist für mich perfekt.

enter image description here

8
wired00

Um die Fortschrittsleiste in ActionBar zu verkleinern , solltest du Widget.Holo.ProgressBar.Small so überschreiben

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

und stellen Sie die Größe auf, was Sie möchten.

2
urSus

Bei ActionBarSherlock können Sie den unbestimmten Fortschritt ändern, indem Sie Widget.ProgressBar.Small als übergeordnetes Element festlegen. Dies sollte auch ohne Sherlock funktionieren. 

Ich habe die Drawables aus dem Android-15 res-Ordner im SDK abgerufen. Achten Sie darauf, progress_small_white.xml und die zugehörige Ressource zu verwenden.

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

Fügen Sie den folgenden Code in Ihre on Create-Methode ein und führen Sie diesen unter der Leiste im Zwischenmodus aus.
Wenn Sie den Prozentsatz des Fortschritts anzeigen möchten, kommentieren Sie die progressBar.setIndeterminate(true);-Methode und die unkommentierte progressBar.setProgress(65)-Methode, und behalten Sie Ihren Fortschritt bei

       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);
        }
    });
1
Gopal Sharma

Ich muss mit älteren Versionen des Android SDK kompatibel sein, daher musste ich es einfach halten und verwendete:

Styles.xml

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

AndroidManifest.xml

Android:theme="@style/TallerTitleBarDialogThemeStyle"

für die Aktivität muss ich mich anpassen.

0
obdkey