gem "devise", '~> 4.0.0.rc1'
我喜欢将宽度和高度更改为dp单位,如100 dp或200 dp。 setLayoutParams不采用数字单位,只有选择(wrap_content和match_content)..我是Android的新手,所以我很困惑如何改变它。
答案 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);