簡體   English   中英

如何將布局參數設置為單位 dp android

[英]How to set layout params to units dp android

mainLayout = (LinearLayout) findViewById(R.id.linearLayout);
mChart = new HorizontalBarChart(this);
mChart.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
mainLayout.addView(mChart);

我喜歡將寬度和高度更改為 dp 單位,例如 100 dp 或 200 dp。 setLayoutParams 不采用數字單位,選項只有(wrap_content 和 match_content)。我是 Android 新手,所以我很困惑如何更改它。

另一種方法是在 dimens.xml 中添加維度。

例如,添加<dimen name="chart_width">100dp</dimen>

然后,在您的代碼中:

float width = getResources().getDimension(R.dimen.chart_width);
mChart.setLayoutParams(new ViewGroup.LayoutParams(
            width,
            ViewGroup.LayoutParams.WRAP_CONTENT));

將傾角值轉換為像素將使您的布局正確構建,這行代碼將解決它:

int width = (int) TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 
    getResources().getDimension(R.dimen.desired_width), 
    getResources().getDisplayMetrics()
);

我認為我們不能直接將dp設置為視圖。 所以我們必須將尺寸從pixel轉換為dp

要從dp獲取pixel ,您可以使用TypedValue#applyDimension()方法。

Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, {sizeInDp}, r.getDisplayMetrics());

所以最終的代碼將是

float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, {widthInDp}, r.getDisplayMetrics());

float height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, {heightInDp}, r.getDisplayMetrics());

mChart.setLayoutParams(new ViewGroup.LayoutParams(
                width,
                height));
int dp1 = dip2pix(getContext(), 1);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
            dp1 * 100, ViewGroup.LayoutParams.WRAP_CONTENT);

public static int dip2pix(@NonNull Context context, int dip) {
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip,
            context.getResources().getDisplayMetrics());
}

試一試它肯定會起作用

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                200, 200);
        params.setMargins(5, 0, 5, 0);

        mChart= new HorizontalBarChart(getApplicationContext());
        mChart.setLayoutParams(params);

        mainLayout.addView(mChart);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM