我正在创建动态进度条宽度,但它现在可以正确显示。当我在 xml 中设置宽度 (272 dp ( 时,它显示正确,但我以编程方式设置相同的宽度,它没有显示正确的宽度。
.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();
使用 :
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);
}