Android match_parent无法按预期布局工作

时间:2016-07-27 20:24:32

标签: android android-linearlayout android-custom-view android-scrollview

我有自定义视图TriggerView。当我在视图中覆盖onDraw时,我绘制的图形有时会溢出视图的可视边界之外。所以我想将视图嵌入到ScrollView中,以便图形可以滚动。

这是我的代码,没有任何ScrollViews

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.roberts.croberts.mantis.ShotTriggerFragment"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:clipChildren="false">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        ...
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageContainer"
        android:orientation="horizontal"
        android:layout_weight="1">

        <com.roberts.croberts.mantis.TriggerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/triggerView" />

    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">
        ...

    </LinearLayout>
</LinearLayout>

在此屏幕截图中查看triggerView如何填充所有剩余的屏幕空间:

Screenshot

然后我尝试将其嵌入ScrollView:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageContainer"
        android:orientation="horizontal">

        <com.roberts.croberts.mantis.TriggerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/triggerView" />

    </LinearLayout>
</ScrollView>

然后TriggerView的高度缩小到0.我已经尝试了match_parentwrap_content的每个变体我都能想到,并且无法让它工作:

Screenshot

编辑 - 我刚发现的另一个有趣的事情就是我删除了容器ScrollViewLinearLayout并且只有TriggerView

<com.roberts.croberts.mantis.TriggerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/triggerView"
        android:layout_weight="1"/>

然后设计选项卡显示父类是ScrollView?:

TriggerView (ScrollView)

2 个答案:

答案 0 :(得分:0)

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageContainer"
        android:orientation="horizontal">

        <com.roberts.croberts.mantis.TriggerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/triggerView" />

    </LinearLayout>
</ScrollView>

这里有一些问题: 高度定义为match_parent的ScrollView没有任何意义 - 它总是应该设置为wrap_content。 LinearLayout高度设置为match_parent也是错误的,因为此元素应定义包含ScrollView的高度 - 将其更改为wrap_content。 最后结束 - 您的自定义视图 - 它还应将高度设置为wrap_content(或某个固定值)。如果它仍然无法正常工作,请查看此视图​​中的问题 - 很难说 - 夸大布局或onMeasure()方法

答案 1 :(得分:0)

您正在尝试使用自定义视图。请发布视图类。自定义必须覆盖onDraw和onMeasure方法,并在那里做一些不同的事情。