【问题标题】:How to get height in pixels of LinearLayout with layout_weight如何使用 layout_weight 获取 LinearLayout 的像素高度
【发布时间】:2014-04-28 20:34:16
【问题描述】:

这是我的第一篇文章。我正在学习用 Java 编写 Android 应用程序的代码。 我正在使用带有预定义 layout_weight(我想在将来随时更改)和设置为 MATCH_PARENT 的 LinearLayout“变量名为:ll”。我想以像素为单位获取此 LinearLayout 的高度。我使用 java (ll.addView(variableForAnObject);) 填充它。 我正在尝试使用 ll.getLayoutParams().height;但我得到-1。因为我相信这是 MATCH_PARENT 的常数。将高度设置为 0dp 会使 ll 不可见并将高度设为 0。

请告诉我是否有办法获得它的高度。我想我可以通过使用 DisplayMetrics 获取屏幕高度并进行几乎不可能的计算(至少对我而言)来做到这一点,但这太复杂了。

【问题讨论】:

  • ll.getLayoutParams().height 返回MATCH_PARENTWRAP_CONTENT 之一。前者是-1 后者是-2

标签: java android android-layout layoutparams android-layout-weight


【解决方案1】:

尝试ll.getHeight() 应该可以工作

如果没有,那是因为android还没有计算出它的边界,那么:

//inside of onCreate method should work
ll.post(new Runnable() {
    @Override
    public void run() {
        //maybe also works height = ll.getLayoutParams().height;

        height  = ll.getHeight();

    }
});

【讨论】:

  • //maybe also works height = ll.getLayoutParams().height; 不,它没有
  • 非常感谢!仍然存在的一个问题是我在第一次运行时得到 0。我使用自定义方法填充布局并执行更多操作,并在 OnCreate 中调用此方法。但是在第一次运行时,我得到 0,然后如果我再次使用相同的方法重新填充这个布局,那么高度就会得到一个值。我使用 ll.removeAllViews();在填充布局之前。
  • @javi 我尝试直接放入 onCreate 以及我的方法中(在 onCreate 中),但总是得到一个 0。我会搜索这个问题。
  • 你能写下布局文件吗?我会在我的电脑上测试
【解决方案2】:

它是-1,因为它的尺寸还没有设置,每当你设置布局时,它需要一些时间来计算实际值,包括高度、宽度等。

在布局完成后使用OnLayoutListener 进行监听。

layout.onLayoutChange (View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
    //Extract values here
    height = view.getHeight();
    width = view.getWidth()
}

有关 OnLayoutListener 的更多信息,请参阅 this

【讨论】:

    【解决方案3】:

    在你的类中定义你的 LinearLayout 并使用 getHeight() 和 getWidth()。示例:

    LinearLayout yourLayout = (LinearLayout) findViewById (R.id.yourLL);
    double height = yourLayout.getHeight();
    double width = yourLayout.getWidth();
    

    希望对您有所帮助! :)

    【讨论】:

      【解决方案4】:

      在您的布局 xml 文件中提供 id 字段:

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:orientation="vertical" 
          android:id="@+id/<ID>>
      

      使用这个id在java类中获取引用并查找高度和宽度:

      LinearLayout linearLayout= (LinearLayout) findViewById (R.id.<ID>);
      double height = linearLayout.getHeight();
      double width = linearLayout.getWidth();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-30
        • 2012-05-22
        • 1970-01-01
        • 2021-09-07
        • 2018-01-04
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        相关资源
        最近更新 更多