5

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

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

4

4 回答 4

10

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

    }
});
于 2014-04-28T12:25:01.280 回答
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 的更多信息,请参阅此内容

于 2014-04-28T12:28:15.630 回答
0

id在布局 xml 文件中给出该字段:

<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();
于 2014-04-28T12:26:10.893 回答
0

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

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

希望能帮助到你!:)

于 2014-04-28T12:21:25.950 回答