如何使用layout_weight获取LinearLayout的高度(以像素为单位)

时间:2014-04-28 12:17:25

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

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

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

4 个答案:

答案 0 :(得分:9)

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

    }
});

答案 1 :(得分:3)

它是-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

答案 2 :(得分:0)

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

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

希望它有所帮助! :)

答案 3 :(得分:0)

在布局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();