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?
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>
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
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.
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.
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>
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);
}
});
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.