Java 如何使用布局权重获取线性布局的高度(以像素为单位)

Java 如何使用布局权重获取线性布局的高度(以像素为单位),java,android,android-layout,layoutparams,android-layout-weight,Java,Android,Android Layout,Layoutparams,Android Layout Weight,这是我的第一篇文章。我正在学习为android应用程序编写java代码。 我正在使用一个名为:ll的LinearLayout“变量”,该变量具有预定义的布局重量(我希望在将来随时更改),高度和宽度设置为与父级匹配。我想得到这个线性布局的高度,以像素为单位。我使用java(ll.addView(variableForAnObject);)来填充它。 我试图使用ll.getLayoutParams().height获取其高度;但是我得到了-1。因为我相信这是匹配父母的常数。将高度设置为0dp将使ll

这是我的第一篇文章。我正在学习为android应用程序编写java代码。 我正在使用一个名为:ll的LinearLayout“变量”,该变量具有预定义的布局重量(我希望在将来随时更改),高度和宽度设置为与父级匹配。我想得到这个线性布局的高度,以像素为单位。我使用java(ll.addView(variableForAnObject);)来填充它。 我试图使用ll.getLayoutParams().height获取其高度;但是我得到了-1。因为我相信这是匹配父母的常数。将高度设置为0dp将使ll不可见,并将高度设置为0


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

在类中定义线性布局并使用getHeight()和getWidth()。例如:

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

希望有帮助!:)

尝试使用
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();

    }
});

在布局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>>

它是-1,因为它的尺寸尚未设置,无论何时设置布局,都需要一些时间来计算实际值,包括高度、宽度等

使用
onlayOutliner
在布局完成后收听

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的更多信息,请参见

//可能还包括works height=ll.getLayoutParams().height不,不需要。非常感谢!仍然存在的一个问题是,我在第一次跑步时得了0分。我使用自定义方法填充布局并执行更多操作,并在OnCreate中调用此方法。但是在第一次运行时,我得到0,然后如果我再次使用相同的方法重新填充此布局,那么高度就会得到一个值。我使用ll.removeallview();在填充布局之前。@javi我尝试直接放入onCreate以及我的方法(在onCreate内部)中,但总是得到一个0。我会查这件事的。你能写一下布局文件吗?我将在我的计算机上测试
ll.getLayoutParams()。height
返回
MATCH\u PARENT
WRAP\u CONTENT
中的一个。前者为-1,后者为-2
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()
}