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


128

我创建了一个名为的自定义视图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。怎么做?

Answers:


140

最简单的方法是像这样以编程方式设置大小:

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

如果您知道视图的确切大小,那就很好。但是,如果您想要一种更灵活的方法,则可以onMeasure()根据可用空间和布局限制(wrap_contentmatch_parent,或固定大小)。

您可以onMeasure()通过查看android docsLabelViewSDK目录中的示例找到有关如何覆盖的示例。


16
了解您要在其中导入哪些LayoutParams会有所帮助。
user3690202 '16

1
LayoutParams应该从其中的布局graphView被放置。例如,如果在XML布局文件graphView中放置RelativeLayout,则应使用new RelativeLayout.LayoutParams(width, height)
Vic

208

您可以这样设置高度和宽度:

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

76
您应该确保使用的LayoutParam类来自正确的父Layout类。例如,如果您的GraphView包含在LinearLayout中,则需要使用LinearLayout.LayoutParams类。
yincrash

41
这也可以正常工作,并确保您使用正确的LayoutParams类:只需执行即可myGraphView.getLayoutParams().height = 100;
苏莱2012年

21
如果这样做this.getLayoutParams().height = 100,请确保紧随其后this.setLayoutParams(this.getLayoutParams()),否则它什么也不会做(有用)。
Achal Dave

4
我认为这个答案获得更多积分很奇怪。虽然更容易,但模块化程度却大大降低了;如果您想在其他地方使用视图,则也需要在此处对这些宽度/高度值进行硬编码。使用时要小心。
gardarh 2013年

1
感谢@yincrash指出这一点。但是,我需要使用父视图的类(在我的情况下为RelativeLayout)而不是自定义视图的父类(在我的情况下为SurfaceView)
ericn 2013年

75

您可以像这样在相对布局中设置视图的高度和宽度

ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 130;
view.setLayoutParams(params);

2
您无需再次设置layoutparam。它会自动反映出来。这是面向对象方法的优点。
Dipendra

8
@Dipendra的调用setLayoutParams()是必需的,因为它调用其他方法,例如resolveLayoutParams()andrequestLayout()
William

给异常,如onCreate getLayoutParams()中的为null值。因此params.height导致异常
Sibasish

您应该参考必须为其设置高度的视图。检查您是否指向同一视图
Rakshi

1
获取layoutParams在视图的启动将是一个NPE,请在什么点运行此解释一下吗?
约翰·萨丁尼亚

6

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

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

4
spin12.setLayoutParams(new LinearLayout.LayoutParams(200, 120));

spin12是你的微调和200120widthheight你的spinner


3

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.