[英]Android set height and width of Custom view programmatically
我创建了一个名为Graphview
的自定义视图。 这是 GraphView 类的结构。
public class GraphView extends View {
public GraphView(Context context, float[] values, String title, String[] horlabels, String[] verlabels, boolean type) {
super(context);
........
}
..................
.................
}
我使用addview()
在表格行中添加了视图。 它工作正常。 现在我想为GraphView
设置高度和宽度。 怎么做?
您可以像这样设置高度和宽度:
myGraphView.setLayoutParams(new LayoutParams(width, height));
如果您知道视图的确切大小,只需使用setLayoutParams()
:
graphView.setLayoutParams(new LayoutParams(width, height));
或者在 Kotlin 中:
graphView.layoutParams = LayoutParams(width, height)
但是,如果您需要更灵活的方法,您可以重写onMeasure()
以根据可用空间和布局约束( wrap_content
、 match_parent
或固定大小)更精确地测量视图。 您可以在android 文档中找到有关onMeasure()
的更多详细信息。
您可以像这样在相对布局中设置视图的高度和宽度
ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 130;
view.setLayoutParams(params);
在 Kotlin 上,您可以直接使用其虚拟属性设置任何视图的宽度和高度:
someView.layoutParams.width = 100
someView.layoutParams.height = 200
如果您使用的是 Kotlin,您还可以使用以下代码将给定的 lambda 应用于当前布局参数:
someView.updateLayoutParams {
height = 200
}
spin12.setLayoutParams(new LinearLayout.LayoutParams(200, 120));
spin12
是您的微调器, 200和120是您的spinner
的width
和height
。
这是一个基于 Kotlin 的版本,假设父视图是LinearLayout
的一个实例。
someView.layoutParams = LinearLayout.LayoutParams(100, 200)
这允许在一行中设置宽度和高度( 100
和200
)。
由@MorganWilde 添加到解决方案中。 如果要使用 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));
}
getActivity()
LayoutParams
(即示例中的LinearLayout.LayoutParams
在这里,这个类会处理以编程方式处理视图所需的一切
public class LayoutHelper {
public static final int MATCH_PARENT = -1;
public static final int WRAP_CONTENT = -2;
private static int getSize(float size) {
return (int) (size < 0 ? size : AndroidUtilities.dp(size));
}
public static ScrollView.LayoutParams createScroll(int width, int height, int gravity) {
return new ScrollView.LayoutParams(getSize(width), getSize(height), gravity);
}
public static ScrollView.LayoutParams createScroll(int width, int height, int gravity, float leftMargin, float topMargin, float rightMargin, float bottomMargin) {
ScrollView.LayoutParams layoutParams = new ScrollView.LayoutParams(getSize(width), getSize(height), gravity);
layoutParams.leftMargin = AndroidUtilities.dp(leftMargin);
layoutParams.topMargin = AndroidUtilities.dp(topMargin);
layoutParams.rightMargin = AndroidUtilities.dp(rightMargin);
layoutParams.bottomMargin = AndroidUtilities.dp(bottomMargin);
return layoutParams;
}
public static FrameLayout.LayoutParams createFrame(int width, float height, int gravity, float leftMargin, float topMargin, float rightMargin, float bottomMargin) {
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(getSize(width), getSize(height), gravity);
layoutParams.setMargins(AndroidUtilities.dp(leftMargin), AndroidUtilities.dp(topMargin), AndroidUtilities.dp(rightMargin), AndroidUtilities.dp(bottomMargin));
return layoutParams;
}
public static FrameLayout.LayoutParams createFrame(int width, int height, int gravity) {
return new FrameLayout.LayoutParams(getSize(width), getSize(height), gravity);
}
public static FrameLayout.LayoutParams createFrame(int width, float height) {
return new FrameLayout.LayoutParams(getSize(width), getSize(height));
}
public static RelativeLayout.LayoutParams createRelative(float width, float height, int leftMargin, int topMargin, int rightMargin, int bottomMargin, int alignParent, int alignRelative, int anchorRelative) {
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(getSize(width), getSize(height));
if (alignParent >= 0) {
layoutParams.addRule(alignParent);
}
if (alignRelative >= 0 && anchorRelative >= 0) {
layoutParams.addRule(alignRelative, anchorRelative);
}
layoutParams.leftMargin = AndroidUtilities.dp(leftMargin);
layoutParams.topMargin = AndroidUtilities.dp(topMargin);
layoutParams.rightMargin = AndroidUtilities.dp(rightMargin);
layoutParams.bottomMargin = AndroidUtilities.dp(bottomMargin);
return layoutParams;
}
public static RelativeLayout.LayoutParams createRelative(int width, int height, int leftMargin, int topMargin, int rightMargin, int bottomMargin) {
return createRelative(width, height, leftMargin, topMargin, rightMargin, bottomMargin, -1, -1, -1);
}
public static RelativeLayout.LayoutParams createRelative(int width, int height, int leftMargin, int topMargin, int rightMargin, int bottomMargin, int alignParent) {
return createRelative(width, height, leftMargin, topMargin, rightMargin, bottomMargin, alignParent, -1, -1);
}
public static RelativeLayout.LayoutParams createRelative(float width, float height, int leftMargin, int topMargin, int rightMargin, int bottomMargin, int alignRelative, int anchorRelative) {
return createRelative(width, height, leftMargin, topMargin, rightMargin, bottomMargin, -1, alignRelative, anchorRelative);
}
public static RelativeLayout.LayoutParams createRelative(int width, int height, int alignParent, int alignRelative, int anchorRelative) {
return createRelative(width, height, 0, 0, 0, 0, alignParent, alignRelative, anchorRelative);
}
public static RelativeLayout.LayoutParams createRelative(int width, int height) {
return createRelative(width, height, 0, 0, 0, 0, -1, -1, -1);
}
public static RelativeLayout.LayoutParams createRelative(int width, int height, int alignParent) {
return createRelative(width, height, 0, 0, 0, 0, alignParent, -1, -1);
}
public static RelativeLayout.LayoutParams createRelative(int width, int height, int alignRelative, int anchorRelative) {
return createRelative(width, height, 0, 0, 0, 0, -1, alignRelative, anchorRelative);
}
public static LinearLayout.LayoutParams createLinear(int width, int height, float weight, int gravity, int leftMargin, int topMargin, int rightMargin, int bottomMargin) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(getSize(width), getSize(height), weight);
layoutParams.setMargins(AndroidUtilities.dp(leftMargin), AndroidUtilities.dp(topMargin), AndroidUtilities.dp(rightMargin), AndroidUtilities.dp(bottomMargin));
layoutParams.gravity = gravity;
return layoutParams;
}
public static LinearLayout.LayoutParams createLinear(int width, int height, float weight, int leftMargin, int topMargin, int rightMargin, int bottomMargin) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(getSize(width), getSize(height), weight);
layoutParams.setMargins(AndroidUtilities.dp(leftMargin), AndroidUtilities.dp(topMargin), AndroidUtilities.dp(rightMargin), AndroidUtilities.dp(bottomMargin));
return layoutParams;
}
public static LinearLayout.LayoutParams createLinear(int width, int height, int gravity, int leftMargin, int topMargin, int rightMargin, int bottomMargin) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(getSize(width), getSize(height));
layoutParams.setMargins(AndroidUtilities.dp(leftMargin), AndroidUtilities.dp(topMargin), AndroidUtilities.dp(rightMargin), AndroidUtilities.dp(bottomMargin));
layoutParams.gravity = gravity;
return layoutParams;
}
public static LinearLayout.LayoutParams createLinear(int width, int height, float leftMargin, float topMargin, float rightMargin, float bottomMargin) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(getSize(width), getSize(height));
layoutParams.setMargins(AndroidUtilities.dp(leftMargin), AndroidUtilities.dp(topMargin), AndroidUtilities.dp(rightMargin), AndroidUtilities.dp(bottomMargin));
return layoutParams;
}
public static LinearLayout.LayoutParams createLinear(int width, int height, float weight, int gravity) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(getSize(width), getSize(height), weight);
layoutParams.gravity = gravity;
return layoutParams;
}
public static LinearLayout.LayoutParams createLinear(int width, int height, int gravity) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(getSize(width), getSize(height));
layoutParams.gravity = gravity;
return layoutParams;
}
public static LinearLayout.LayoutParams createLinear(int width, int height, float weight) {
return new LinearLayout.LayoutParams(getSize(width), getSize(height), weight);
}
public static LinearLayout.LayoutParams createLinear(int width, int height) {
return new LinearLayout.LayoutParams(getSize(width), getSize(height));
}
}
你可以这样使用它:
frameLayout.addView(
emptyLayout,
LayoutHelper.createFrame(
LayoutHelper.MATCH_PARENT,
LayoutHelper.WRAP_CONTENT,
Gravity.CENTER
)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.