Android 以编程方式设置自定义视图的高度和宽度

我已经创建了一个名为 Graphview的自定义视图。

public class GraphView extends View {


public GraphView(Context context, float[] values, String title, String[] horlabels, String[] verlabels, boolean type) {
super(context);
........
}


..................
.................
}

我已经使用 addview()在一个桌子中添加了视图。它工作得很好。现在我要为 GraphView设置高度和宽度。怎么做?

298980 次浏览

你可以像这样设置高度和宽度:

myGraphView.setLayoutParams(new LayoutParams(width, height));

如果你知道视图的确切大小,只需使用 setLayoutParams():

graphView.setLayoutParams(new LayoutParams(width, height));

或者在 Kotlin:

graphView.layoutParams = LayoutParams(width, height)

但是,如果需要更灵活的方法,可以覆盖 onMeasure(),根据可用空间和布局约束(wrap_contentmatch_parent或固定大小)更精确地测量视图。你可以在 机器人文档中找到更多关于 onMeasure()的细节。

您可以在相对布局中设置视图的高度和宽度,如下所示

ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 130;
view.setLayoutParams(params);
spin12.setLayoutParams(new LinearLayout.LayoutParams(200, 120));

spin12是您的纺纱机和 200120widthheight为您的 spinner

这是一个基于 Kotlin 的版本,假设父视图是 LinearLayout的一个实例。

someView.layoutParams = LinearLayout.LayoutParams(100, 200)

这允许在一行中设置宽度和高度(100200)。

在 Kotlin,你可以直接使用它们的虚拟属性设置任何视图的宽度和高度:

someView.layoutParams.width = 100
someView.layoutParams.height = 200

如果你正在使用 Kotlin,你也可以使用下面的代码将给定的 lambda 应用到当前的布局参数上:

someView.updateLayoutParams {
height = 200
}

如果您想使用 WRAP _ CONTENT/MATCH _ PARENT,可以使用以下代码。

someView.layoutParams =
LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT)

典型的现实例子:

在一个碎片中:

private LinearLayout images;
...


float dpf = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 69, getResources().getDisplayMetrics());


for (int i = 0; i < 10; i++) {
SpecialImage s = new SpecialImage(getActivity());
images.addView(s);
s.setLayoutParams(new LinearLayout.LayoutParams(
(int) dpf, LinearLayout.LayoutParams.MATCH_PARENT));
}
  1. 除非使用 DIP 转换,否则无效
  2. 这通常发生在片段中,注意 getActivity()
  3. 你通常会在线性布局或类似的布局中添加一些
  4. 典型的一个维度是“填充父维度”
  5. 您必须在示例中使用“正确的”LayoutParams(即 LinearLayout.LayoutParams)