【问题标题】:custom view doesn't shrink in layout自定义视图不会缩小布局
【发布时间】:2012-10-31 23:01:55
【问题描述】:

我有一个自定义视图,我正尝试在垂直方向使用文本视图/按钮组合(卡在水平 LinearLayout 中)位于屏幕下方。目前我的布局如下所示:

    <com.company.widgets.MyCustomView
        android:id="@+id/custom"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_alignParentTop="true"
        android:layout_weight="0.0" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:layout_marginTop="10dp"
        android:layout_alignParentBottom="true"
        android:layout_weight="1.0"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|left"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="5dp"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#000000"
            android:text="foobar" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|right"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="15dp"
            android:text="foobar" />
    </LinearLayout>

在我的自定义视图中,我重写了 onMeasure() 和 onSizeChanged()。我努力确保我的视图大小不超过它传递的 measureSpec(对于 onMeasure)或宽度/高度值(对于 onSizeChanged)。但是,当我的活动布局时,传递给这两个方法的值表示“屏幕的整个垂直高度”。

因此,我的自定义视图最终使自己尽可能高,而按钮/文本视图使自己“尽可能高”(wrap_content)。当这两个高度超过屏幕高度时,自定义视图的底部被绘制在按钮/文本视图的后面

我的问题:我应该如何修改布局,以便我的自定义视图的 onMeasure() 和/或 onSizeChanged() 方法传递一个较短的高度值?我希望他们收到一个代表“屏幕高度 - 文本视图/按钮的高度”的值。

注意:如果我更改布局以使文本视图/按钮位于自定义视图的上方,则我传递的高度值是正确的(即小于屏幕高度)。

【问题讨论】:

  • 我不明白你想要完成什么,也许包括一个截图。此外,您应该考虑更改构成视图的对象,而不是覆盖 onMeasure 和 onSizeChanged。听起来您应该研究一下 RelativeLayout 而不是使用 LinearLayout。
  • 我的自定义视图实际上是一个日历小部件,允许用户点击天数。因为它是一个自定义视图并且我自己进行测量和绘画,所以我确实需要覆盖 onMeasure() 和 onSizeChanged()。我希望完成的是让 textview/button 组合占据其所需的高度(wrap_content),并让自定义视图调整自身大小以消耗 textview/ 使用的所有屏幕高度 not按钮组合。

标签: android android-layout android-linearlayout android-view


【解决方案1】:

解决了。使外部元素成为 LinearLayout 而不是 Relative 并反转权重。自定义视图的权重应为“1”,包含 TextView 和 Button 的 LinearLayout 的权重应为零。这会导致传递给我的自定义视图的 onMeasure() 的高度值仅是 textview/button 未占用的屏幕部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多