0

我在 xml 中有一个布局,其属性为 height:700dp 和 width: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);
4

4 回答 4

0

获得对视图的引用后,您可以执行以下操作:

ViewGroup.LayoutParameters lp = view.getLayoutParameters();
lp.height = . . .;
lp.width = . . .;
view.setLayoutParameters(lp);

这些值必须以像素为单位。有几个线程描述了如何将 dp 转换为像素。这是另一个问题的答案的代码片段:

public static float convertDpToPixel(float dp,Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = dp * (metrics.densityDpi/160f);
    return px;
}

然后,您应该添加 0.5f,然后再转换为 anint并分配给lp.

于 2012-10-26T05:24:40.950 回答
0
layout.setLayoutParams(new LinearLayout.LayoutParams(400,400));

从语句中获取参考后,使用上面的语句动态设置宽度和高度。如果您在 xml 中使用线性布局,则使用 LinearLayout.LayoutParams。其他明智的,如果它不同,则使用该布局参数。第一个是宽度,第二个是声明中的高度。如果有任何疑问,请在此处发表评论。

于 2012-10-26T05:29:30.917 回答
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);
于 2012-10-26T05:44:18.050 回答
0

我使用窗口管理器:

    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;
于 2012-10-26T06:17:07.543 回答