2017-04-14 1 views
1

Je crée une largeur de barre de progression dynamique, mais elle s'affiche maintenant correctement. Quand je règle la largeur (272 dp) dans le xml il montre correctement mais je mets la même largeur par programmation il ne montre pas la largeur correcte.Largeur de la barre de progression horizontale dynamique ne montrant pas la pleine largeur en android

XML:

<ProgressBar 
          android:id="@+id/progress_bar_sleep" 
          style="@style/SleepProgress" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_marginLeft="@dimen/text_size_16dp" 
          android:layout_marginTop="@dimen/default_gap" /> 

code:

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) progressBarList.get(2).getLayoutParams(); 
params.width = 272; 
     progressBarList.get(2).setLayoutParams(params); 
     progressBarList.get(2).invalidate(); 
+1

parce que params.width = 272 est en pixels. et en XML, vous définissez les valeurs dp –

+0

@DivyeshPatel que dois-je faire pour obtenir exactement? –

Répondre

2

utilisation:

progressWidth= convertDpToPixels(272, this); 

public int convertDpToPixels(float Dp, Context context) { 
     return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DP, Dp, context.getResources().getDisplayMetrics()); 
    } 

Une autre formule:

public static float convertDpToPixel(float dp){ 
     DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 
     float px = dp * (metrics.densityDpi/160f); 
     return Math.round(px); 
} 
+0

COMPLEX_UNIT_DP non disponible Doit-on utiliser DIP –

+0

le changer avec DIP –