web-dev-qa-db-fra.com

Centrer ProgressBar par programme dans Android

J'essaie de centrer un ProgressBar par programme en utilisant ce qui suit:

ViewGroup layout = (ViewGroup) findViewById(Android.R.id.content).getRootView();
progressBar = newProgressBar(SignInActivity.this,null,Android.R.attr.progressBarStyleLarge);
progressBar.setIndeterminate(true);
progressBar.setVisibility(View.VISIBLE);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100,100);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
layout.addView(progressBar,params);

Le paramètre de taille semble fonctionner correctement, mais le ProgressBar ne se centre pas dans la disposition existante (définie par xml avec une disposition relative). Y a-t-il manifestement quelque chose qui cloche ici?

Le XML est le suivant:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".test"
Android:typeface="monospace">

</RelativeLayout>

c'est-à-dire que c'est juste une disposition relative vide pour tester et voir si je peux l'obtenir pour ajouter par programme une barre de progression.

Merci.

15
James B

Si vous voulez le faire par programme, vous pouvez le faire comme ci-dessous:

RelativeLayout layout = new RelativeLayout(this);
progressBar = new ProgressBar(SignInActivity.this,null,Android.R.attr.progressBarStyleLarge);
progressBar.setIndeterminate(true);
progressBar.setVisibility(View.VISIBLE);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100,100);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
layout.addView(progressBar,params);

setContentView(layout);
30
tasomaniac

J'ai écrit un cours basé sur @ DharmarajRupakheti réponse :

public class ProgressBarHandler {
    private ProgressBar mProgressBar;
    private Context mContext;

    public ProgressBarHandler(Context context) {
        mContext = context;

        ViewGroup layout = (ViewGroup) ((Activity) context).findViewById(Android.R.id.content).getRootView();

        mProgressBar = new ProgressBar(context, null, Android.R.attr.progressBarStyleLarge);
        mProgressBar.setIndeterminate(true);

        RelativeLayout.LayoutParams params = new
                RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

        RelativeLayout rl = new RelativeLayout(context);

        rl.setGravity(Gravity.CENTER);
        rl.addView(mProgressBar);

        layout.addView(rl, params);

        hide();
    }

    public void show() {
        mProgressBar.setVisibility(View.VISIBLE);
    }

    public void hide() {
        mProgressBar.setVisibility(View.INVISIBLE);
    }
}

Usage:

mProgressBarHandler = new ProgressBarHandler(this); // In onCreate
mProgressBarHandler.show(); // To show the progress bar
mProgressBarHandler.hide(); // To hide the progress bar
32
nima

Utilisez votre codage dans ce style, cela donne le résultat que vous souhaitez.

ViewGroup layout = (ViewGroup) findViewById(Android.R.id.content).getRootView();

progressBar = new ProgressBar(thisActivity,null,Android.R.attr.progressBarStyleLarge);
progressBar.setIndeterminate(true);
progressBar.setVisibility(View.VISIBLE);

RelativeLayout.LayoutParams params = new 
        RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT);

RelativeLayout rl = new RelativeLayout(thisActivity);

rl.setGravity(Gravity.CENTER);
rl.addView(progressBar);

layout.addView(rl,params);
10
Raj