web-dev-qa-db-fra.com

Styling barre de progression indéterminée sur ActionBar

Je voudrais mettre un progressBar sur la barre d’action mais en mettant 

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

la méthode onCreate produit une barre de progression de taille moyenne (48dip x 48dip). Je souhaite modifier la taille de la barre de progression, mais je ne trouve pas comment le faire. Pouvez-vous m'aider s'il vous plaît?

18
Matroska

Vous devrez créer votre propre style à appliquer à la barre d’action. Il existe un excellent didacticiel à ce sujet sur le Blog des développeurs Android. Pour styler la barre de progression intermédiaire, essayez d'utiliser indeterminateProgressStyle et Widget.ProgressBar.Small. Voici un exemple rapide.

<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

Icône de barre de progression indéterminée ANIMATED de style dans la barre d’action:

1.Définissez res/values ​​/ styles.xml (cet exemple utilise la bibliothèque Sherlock pour fournir une barre d’action dans les anciennes versions d’Android. Ainsi, si vous n’utilisez pas Sherlock, vous devez utiliser des parents appropriés pour définir vos styles personnalisés):

<?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.Définissez 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. Le code ci-dessus utilise 2 images (ic_progress_logo1 et ic_progress_logo2) en tant qu'icône indéterminée de progression personnalisée. Vous pouvez utiliser autant d'images/dessins que vous le souhaitez en ajoutant de nouveaux éléments. En outre, vous pouvez appliquer différents effets/animations. Plus d'infos ici: Ressources d'animation

4.Appliquez le style que vous avez créé avec 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.Profitez de votre icône indéterminée de progression personnalisée personnalisée: D

15
Alberto M.

J'ai eu du mal avec toutes ces solutions parce que je n'utilisais pas actionbarsherlock. Je me suis inspiré de la réponse de Vlasto Benny Lava, qui ne fonctionnait pas pour moi au départ.

Voici ce que j'ai fait étape par étape:

1) ouvrez votre fichier styles.xml, il devrait être sous /res/values/styles.xml. S'il n'existe pas, créez-le.

2) Coller dans:

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

Un catchya que j'ai rencontré, vous ne pouvez pas utiliser un nom de thème "AppTheme" sinon les remplacements ne fonctionneront pas. J'ai utilisé "MyTheme". Ce thème utilise Holo, il a donc un ActionBar noir, comme illustré dans l'image ci-dessous. Si vous souhaitez avoir une barre d’action blanche, remplacez bien sûr Android:Theme.Holo par Android:Theme.Holo.Light etc.

3) Edit AndroidManifest.xml

votre <application> doit contenir Android:theme="@style/myTheme" pour que l'application utilise vos styles de substitution à partir de styles.xml

c'est-à-dire que mon fichier de balises d'application manifeste ressemble à ceci:

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

Parce que vous réduisez simplement la taille du fichier png Progress existant, il n’est pas nécessaire d’exporter d’images et de les déplacer à l’emplacement que vous souhaitez, etc.

Voici à quoi ressemble le mien, la taille de l'icône me convient parfaitement.

enter image description here

8
wired00

Pour réduire la barre de progression sur ActionBar , vous voulez remplacer le Widget.Holo.ProgressBar.Small comme ceci

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

et définir la taille à ce que vous voulez.

2
urSus

Pour ActionBarSherlock, vous pouvez modifier la progression indéterminée en attribuant à Widget.ProgressBar.Small un rôle parental, cela devrait également fonctionner sans Sherlock. 

Je suis allé chercher les éléments dessinables dans le dossier de résolution Android-15 du SDK. N'oubliez pas de récupérer progress_small_white.xml et la ressource associée.

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

Collez le code ci-dessous dans votre méthode on Create et exécutez la barre ci-dessous en mode intermédiaire.
Si vous souhaitez afficher le pourcentage de progression, commentez la méthode progressBar.setIndeterminate(true); et décommentez la méthode progressBar.setProgress(65) et maintenez votre progression.

       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

Je dois être compatible avec les anciennes versions du SDK Android, donc je devais rester simple et utilisé:

Styles.xml

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

AndroidManifest.xml

Android:theme="@style/TallerTitleBarDialogThemeStyle"

pour l'activité que j'ai besoin d'ajuster.

0
obdkey