我在xml中有一个布局,属性高度为:700dp,宽度为:300 dp。我如何在代码中更改此布局的大小? 我尝试这样的东西,但我得到了NullPointer:
setContentView(R.layout.log_in_dialog_view);
view = findViewById(R.layout.log_in_dialog_view);
lp = view.getLayoutParams();
lp.height = 200;
lp.width = 200;
view.setLayoutParams(lp);
答案 0 :(得分:0)
一旦你有了对视图的引用,你就可以这样做:
ViewGroup.LayoutParameters lp = view.getLayoutParameters();
lp.height = . . .;
lp.width = . . .;
view.setLayoutParameters(lp);
值必须以像素为单位。有几个线程描述了如何将dp转换为像素。这是来自this answer to another question的代码片段:
public static float convertDpToPixel(float dp,Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi/160f);
return px;
}
然后您应该在转换为int
之前添加0.5f并分配到lp
的其中一个字段。
答案 1 :(得分:0)
layout.setLayoutParams(new LinearLayout.LayoutParams(400,400));
从声明中获取参考后,使用上面的句子动态设置宽度anbd高度。如果您在xml中使用线性布局,请使用LinearLayout.LayoutParams。其他明智的如果是不同的,那么使用那种布局参数。第一个是宽度,第二个是声明中的高度。如果有任何疑问只是在这里提出。
答案 2 :(得分:0)
您可以尝试以下代码
DisplayMetrics metrics = getResources().getDisplayMetrics();
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams((int) (metrics.density * 100 + 0.5f), (int) (metrics.density * 150 + 0.5f));
lp.setMargins(5, 5, 0, 0);
final ImageView imgRss = new ImageView(getApplicationContext());
imgRss.setLayoutParams(lp);
答案 3 :(得分:0)
我使用WindowManager:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
height = dm.heightPixels;
width = dm.widthPixels;
WindowManager.LayoutParams WMLP = getWindow()
.getAttributes();
WMLP.width = width-200;
WMLP.height = height-200;