[英]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.