web-dev-qa-db-fra.com

Comment définir une taille Android ProgressBar par programmation?

J'ai une vue personnalisée qui étend ViewGroup. Il comprend un ProgressBar et un WebView. J'affiche le ProgressBar pendant le chargement du WebView.

Cela fonctionne, mais le ProgressBar est trop grand. Comment puis-je le réduire?

Voici mon code non fonctionnel:

webView = new WebView(context);
webView.setWebViewClient(new MyWebChromeClient());
webView.loadUrl("file://" + path);
addView(webView);

progressBar = new ProgressBar(mContext, null,
                                         Android.R.attr.progressBarStyleSmall);
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
                                                    LayoutParams.WRAP_CONTENT);
progressBar.setLayoutParams(params);

addView(progressBar);
17
Qing

Vous pouvez utiliser LayoutParams pour modifier la largeur et la hauteur à votre guise.

ProgressBar progressBar = new ProgressBar(teste.this, null, Android.R.attr.progressBarStyleHorizontal);

            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(300, 10);

            progressBar.setLayoutParams(params );
            LinearLayout test = new LinearLayout(getApplicationContext());
            test.addView(progressBar);
            setContentView(test);

De plus, lorsque vous ajoutez une vue, vous pouvez utiliser ce code: test.addView(progressBar,50,50); où le premier paramètre est largeur et le second est hauteur.

27
Peter

Vous pouvez également définir la taille de votre barre de progression à partir du XML, utilisez simplement Android:maxHeight, Android:minHeight, Android:minWidth et Android:maxWidth propriétés à l'intérieur de votre balise ProgressBar.

par exemple, cela définira la hauteur de la barre de progression sur 35dip et largeur à 10dip,

   <ProgressBar
    Android:id="@+id/progressBar1"
    style="?android:attr/progressBarStyleLarge"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"

    Android:layout_centerVertical="true"
    Android:layout_marginLeft="60dip"
    Android:maxHeight="35dip"
    Android:minHeight="35dip"

    Android:minWidth="10dip"
    Android:maxWidth="10dip"

    Android:visibility="visible" />
19
bhuvesh

Dans le xml, définissez le style, par exemple,

style = "? android: attr/progressBarStyleLarge"

<ProgressBar
                        Android:id="@+id/progressBar3"
                        style="?android:attr/progressBarStyleLarge"
                        Android:layout_width="wrap_content"
                        Android:layout_height="wrap_content"
                        Android:layout_centerInParent="true" />
8
bat-el.g

Essayons...

J'ai corrigé le size de progressBar avec l'ajout de padding.

<RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">
        <ProgressBar
            Android:id="@+id/progressBar"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:padding="45dp"
            />
        <ImageView
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:id="@+id/category_img"
            Android:scaleType="fitXY"
            tools:ignore="ContentDescription" />
    </RelativeLayout>

Ressemble maintenant à ceci:

enter image description here

3
Asif Raza

La manière la plus simple est par échelle:

public class CustomProgressBarRenderer :ProgressBarRenderer
{
  protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e)
  {
    base.OnElementChanged(e);

    Control.ProgressDrawable.SetColorFilter(Color.FromRgb(182, 231, 233).ToAndroid(), Android.Graphics.PorterDuff.Mode.SrcIn);
    Control.ProgressTintList = Android.Content.Res.ColorStateList.ValueOf(Color.FromRgb(182, 231, 233).ToAndroid());
    Control.ScaleY = 10; // This changes the height

  }
}
2
kishang

Vous pouvez facilement le faire via la propriété scaleX et scaleY, voici comment:

progressBar.scaleX=0.5f
progressBar.scaleY=0.5f

Ici,

scaleX: Pour changer la largeur, 0,5 réduira donc la largeur à la moitié de la largeur réelle

scaleY: Pour changer la hauteur, 0,5 réduira la hauteur à la moitié de la hauteur réelle

1
Suraj Vaishnav

Solution monoligne, essayez ceci

progressBar.setPadding(0,24,0,24);//left,top,right,bottom
0
Latief Anwar