如何将布局参数设置为单位dp android

时间:2016-02-12 02:54:23

标签: android

gem "devise", '~> 4.0.0.rc1'

我喜欢将宽度和高度更改为dp单位,如100 dp或200 dp。 setLayoutParams不采用数字单位,只有选择(wrap_content和match_content)..我是Android的新手,所以我很困惑如何改变它。

5 个答案:

答案 0 :(得分:11)

另一种方法是在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));

答案 1 :(得分:5)

将dip值转换为像素将使您的布局正确构建,这行代码将解决它:

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, YOUR_DESIRED_WIDTH, getResources().getDisplayMetrics());

答案 2 :(得分:1)

我认为我们无法直接将dp设置为视图。因此,我们要将维度从pixel转换为dp

要从pixel获取dp,您可以使用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));

答案 3 :(得分:0)

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());
}

答案 4 :(得分:-1)

尝试一下它肯定会起作用

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

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

        mainLayout.addView(mChart);