Je n'étais pas pleinement satisfait de la accepté la réponse ci-dessus, j'ai donc fait quelques recherches complémentaires à moi-même.
Le truc je crois qu'ils ont utilisé est qu'ils ont récupéré la vue de dessus à la vue de la hiérarchie appelés DecorView
et ajout de la barre de progression. De cette façon, la barre de progression s'affiche à la fois sur la barre d'action ET la zone de contenu. Notez que le S. D. réponse met la barre de progression dans la zone de contenu et 'vole' espace de contenu réel, ce qui peut conduire à des résultats inattendus.
Exemple de captures d'écran de cette application:
![ProgressBar]()
![ProgressBarIndeterminate]()
Code
Juste mettre ce code en onCreate
méthode de l'activité et cela devrait fonctionner:
// create new ProgressBar and style it
final ProgressBar progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 24));
progressBar.setProgress(65);
// retrieve the top view of our application
final FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
decorView.addView(progressBar);
// Here we try to position the ProgressBar to the correct position by looking
// at the position where content area starts. But during creating time, sizes
// of the components are not set yet, so we have to wait until the components
// has been laid out
// Also note that doing progressBar.setY(136) will not work, because of different
// screen densities and different sizes of actionBar
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);
}
});
Vous pouvez jouer avec LayoutParams hauteur argument pour définir la progressBar plus large ou plus étroit, mais vous pourriez avoir à ajuster l' -10
offset.
Style
Malheureusement, vous pouvez voir le vilain fond gris de la barre de progression. Pour l'enlever, il suffit de chercher pour l'arrière-plan en identifiant et en essayant de cacher ça ne fonctionne pas. Pour supprimer le fond, j'ai dû créer identiques drawble de la version du système et de supprimer l'élément d'arrière-plan.
TL;DR: Créer le fichier progress_horizontal_holo_no_background_light.xml
et collez cette drawable:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/secondaryProgress">
<scale android:scaleWidth="100%"
android:drawable="@drawable/progress_secondary_holo_light" />
</item>
<item android:id="@android:id/progress">
<scale android:scaleWidth="100%"
android:drawable="@drawable/progress_primary_holo_light" />
</item>
</layer-list>
Copie appropriée .png un drawable d' sdk/platforms/android-xx/data/res/drawable-xxx/
à votre projet, puis dans le code, vous pouvez ajouter:
progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.progress_horizontal_holo_no_background_light));
Extra: Barre De Progression Indéterminée
Pré-KitKat versions indéterminée, les barres de progression sont assez moches, et de lag.
Vous pouvez télécharger de nouveaux lisse progressBar appelés ButteryProgressBar
. Il suffit de chercher sur google (je ne pouvez pas poster des liens, parce que je suis nouveau ici :[ ), ajouter la classe dans votre projet et vous pouvez simplement remplacer la précédente ProgressBar avec ce code et croustillant barre de progression indéterminée:
final ButteryProgressBar progressBar = new ButteryProgressBar(this);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 24));
Vous pourriez aussi avoir besoin de simplifier ce code:
final TypedArray ta = c.obtainStyledAttributes(attrs, R.styleable.ButteryProgressBar);
try {
mBarColor = ta.getColor(R.styleable.ButteryProgressBar_barColor,
c.getResources().getColor(android.R.color.holo_blue_light));
mSolidBarHeight = ta.getDimensionPixelSize(
R.styleable.ButteryProgressBar_barHeight,
Math.round(DEFAULT_BAR_HEIGHT_DP * mDensity));
mSolidBarDetentWidth = ta.getDimensionPixelSize(
R.styleable.ButteryProgressBar_detentWidth,
Math.round(DEFAULT_DETENT_WIDTH_DP * mDensity));
} finally {
ta.recycle();
}
pour ce code:
mBarColor = c.getResources().getColor(android.R.color.holo_blue_light);
mSolidBarHeight = Math.round(DEFAULT_BAR_HEIGHT_DP * mDensity);
mSolidBarDetentWidth = Math.round(DEFAULT_DETENT_WIDTH_DP * mDensity);
Espère que j'ai aidé :)