计算视图的大小

时间:2010-07-01 13:56:42

标签: android

提出这个问题的最好方法是提供一个例子,所以这里是:

<ScrollView>
    <LinearLayout
        android:id="@+id/main"
        android:orientation="vertical"
    >
        <TextView
            android:id="@+id/some_text"
        />
        <LinearLayout
            android:id="@+id/stretch_me"
        />
        <Button
            android:id="@+id/i_can_toggle"
        />
        <TextView
            android:id="@+id/toggle_me"
            android:visibility="gone"
        />
        <Button
            android:id="@+id/finished"
        />
    </LinearLayout>
</ScrollView>

这似乎相当简单,但坚持......

1)我希望stretch_me布局占用屏幕上的所有剩余空间(我需要它的大小,以便我可以从代码中动态填充它)

2)我无法将main更改为RelativeLayout,因为我想使用i_can_toggle切换to gone和visible之间的toggle_me,但需要保持strech_me大小与之前相同

3)在将toggle_me更改为可见之前,必须没有滚动,并且已完成的按钮必须位于屏幕底部

现在我已经尝试了很多东西,最有希望的方法就是这个有一些编码的方法(我正在考虑从代码中设置stretch_me大小),但是我无法从onCreate()获得视图的大小。方法(screen_height - view_height =剩余空间)。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

将stretch_me设置为具有这些属性以占用空间

android:layout_height="fill_parent"
android:layout_weight="1"

答案 1 :(得分:0)

  

我想要stretch_me布局   占用所有剩余的空间   屏

将身高和体重参数设置为以下

android:layout_height="fill_parent"
android:layout_weight="1"
  

我需要它的大小

您可以使用onmeasure()来测量视图大小。 http://developer.android.com/reference/android/view/View.html#onMeasure(int,int)

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int widthSpec = MeasureSpec.getMode(widthMeasureSpec);
    int width = MeasureSpec.getSize(widthMeasureSpec);
    //Similarly for height
}