2017-04-14 54 views
1

我正在创建动态进度条宽度,但现在正确显示。当我在xml中设置宽度(272 dp)时,它显示正常,但我设置的宽度相同,但不显示正确的宽度。动态水平进度条宽度在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" /> 

代码:

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

因为params.width = 272以像素为单位。在xml中,你正在设置dp值 –

+0

@DivyeshPatel我该怎么做才能得到准确的? –

回答

2

使用:

progressWidth= convertDpToPixels(272, this); 

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

另一公式:

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不可用我应该使用DIP –

+0

更改它与DIP –