【问题标题】:Android set height and width of Custom view programmaticallyAndroid以编程方式设置自定义视图的高度和宽度
【发布时间】:2011-06-29 20:33:33
【问题描述】:

我创建了一个名为 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 设置高度和宽度。该怎么做?

【问题讨论】:

    标签: android view height width params


    【解决方案1】:

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

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

    【讨论】:

    • 您应该确保您使用的 LayoutParam 类来自正确的父 Layout 类。例如,如果您的 GraphView 包含在 LinearLayout 中,则需要使用 LinearLayout.LayoutParams 类。
    • 这也有效并确保您使用正确的 LayoutParams 类:只需执行 myGraphView.getLayoutParams().height = 100;
    • 如果你做了this.getLayoutParams().height = 100,请务必关注this.setLayoutParams(this.getLayoutParams()),否则它不会做任何事情(有用)。
    • 我觉得奇怪的是这个答案得到了更多的分数。虽然它更容易,但它的模块化程度要低得多;如果您想在不同的地方使用您的视图,您还需要在那里硬编码这些宽度/高度值。小心使用它。
    • 感谢@yincrash 指出这一点。我需要使用父视图的类(在我的情况下为 RelativeLayout)而不是我的自定义视图的父类(在我的情况下为 SurfaceView)似乎很奇怪
    【解决方案2】:

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

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

    或者在 Kotlin 中:

    graphView.layoutParams = LayoutParams(width, height)
    

    但是,如果您需要更灵活的方法,您可以覆盖 onMeasure() 以根据可用空间和布局限制(wrap_contentmatch_parent 或固定大小)更精确地测量视图。您可以在android docs 中找到有关onMeasure() 的更多详细信息。

    【讨论】:

    • 了解您在那里导入的 LayoutParam 会很有帮助。
    • LayoutParams 应该来自放置graphView 的布局。例如,如果在 XML 布局文件中 graphView 放在 RelativeLayout 中,那么您应该使用 new RelativeLayout.LayoutParams(width, height)
    • 如果 Kotlin 中 ScrollView 中的 graphView 怎么办?
    【解决方案3】:

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

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

    【讨论】:

    • 您不需要再次设置layoutparam。它会自动反映。这就是面向对象方法的优势。
    • @Dipendra 需要调用setLayoutParams(),因为它会调用其他方法,例如resolveLayoutParams()requestLayout()
    • 在 onCreate getLayoutParams() 中给出异常是空值。所以 params.height 导致异常
    • 您应该参考您必须为其设置高度的视图。检查您是否指向同一个视图
    • 在视图启动时获取layoutParams 将是一个 NPE,请说明您在什么时候运行它?
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:
      spin12.setLayoutParams(new LinearLayout.LayoutParams(200, 120));
      

      spin12 是您的微调器,200120widthheight 是您的 spinner

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

          【解决方案7】:

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

          someView.updateLayoutParams {
              height = 200
          }
          

          【讨论】:

            猜你喜欢
            • 2012-01-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-12
            • 1970-01-01
            • 2011-03-09
            • 1970-01-01
            • 2011-04-01
            相关资源
            最近更新 更多