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

dev*_*oid 118 height android view params width

我创建了一个名为的自定义视图Graphview.这是GraphView类的结构.

public class GraphView extends View {

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

   ..................
   .................
}
Run Code Online (Sandbox Code Playgroud)

我已经在一个tablerow中添加了视图addview().它工作正常.现在我想设置高度和宽度GraphView.怎么做?

Eri*_*vik 206

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

myGraphView.setLayoutParams(new LayoutParams(width, height));
Run Code Online (Sandbox Code Playgroud)

  • 您应该确保您使用的LayoutParam类来自正确的父Layout类.例如,如果GraphView包含在LinearLayout中,则需要使用LinearLayout.LayoutParams类. (74认同)
  • 这也有效并确保您使用正确的LayoutParams类:只需执行`myGraphView.getLayoutParams().height = 100;`. (39认同)
  • 如果你做`this.getLayoutParams().height = 100`,请确保通过`this.setLayoutParams(this.getLayoutParams())`跟随它,否则它将不会做任何事情(有用). (19认同)
  • 我认为这个答案获得更多积分是奇怪的.虽然它更容易,但模块化程度更低; 如果你想在不同的地方使用你的视图,你也需要在那里硬编码那些宽度/高度值.使用它时要小心. (4认同)

Dal*_*mas 127

简单的方法是以编程方式设置大小:

graphView.setLayoutParams(new LayoutParams(width, height));
Run Code Online (Sandbox Code Playgroud)

如果你知道视图的确切大小,这很好.但是,如果你想有一个更灵活的方式,你可以重写onMeasure()方法更精确地测量视图取决于可用空间和布局约束(wrap_content,match_parent或固定大小).

您可以onMeasure()通过查看SDK目录中的android文档LabelView示例来查找有关如何覆盖的示例.

  • 了解您在那里导入哪些LayoutParams会很有帮助. (14认同)
  • `LayoutParams` 应该来自放置 `graphView` 的布局。例如,如果在 XML 布局文件中 `graphView` 放置在 `RelativeLayout` 内,那么您应该使用 `newrelativelayout.layoutparams(width, height)` (2认同)

Rak*_*shi 71

您可以使用这样的相对布局设置视图的高度和宽度

ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 130;
view.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)

  • @Dipendra调用`setLayoutParams()`是必需的,因为它调用其他方法,如`resolveLayoutParams()`和`requestLayout()` (7认同)
  • 你不需要再设置layoutparam.它会自动反映出来.这是面向对象方法的优点. (2认同)

Adi*_*rzi 28

如果您使用 Kotlin,还可以使用以下代码将给定的 lambda 应用于当前布局参数:

someView.updateLayoutParams {
    height = 200
}
Run Code Online (Sandbox Code Playgroud)


gun*_*bur 17

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

someView.layoutParams.width = 100
someView.layoutParams.height = 200
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要在之后添加`someView.requestLayout()`来应用更改。 (3认同)