FrameLayout高度与父级不匹配

时间:2017-01-11 07:41:58

标签: android android-framelayout

我在AlertDialog中将以下布局作为自定义视图。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:gravity="center"
    android:padding="16dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:orientation="vertical">

        <GridLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:columnCount="3">

            <TextView
                android:id="@+id/code1"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:gravity="center"
                android:text="\u2022"
                android:textSize="@dimen/match_code_digit_size"
                tools:ignore="HardcodedText" />

            <TextView
                android:id="@+id/code2"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:layout_marginBottom="20dp"
                android:gravity="center"
                android:text="\u2022"
                android:textSize="@dimen/match_code_digit_size"
                tools:ignore="HardcodedText" />

            <TextView
                android:id="@+id/code3"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:gravity="center"
                android:text="\u2022"
                android:textSize="@dimen/match_code_digit_size"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k1"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:text="1"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k2"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:text="2"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k3"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:text="3"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k4"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:text="4"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k5"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:text="5"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k6"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:text="6"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k7"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:text="7"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k8"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:text="8"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k9"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:text="9"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

            <Button
                android:id="@+id/k0"
                android:layout_width="@dimen/match_code_button_size"
                android:layout_height="@dimen/match_code_button_size"
                android:layout_column="1"
                android:text="0"
                android:textSize="@dimen/match_code_button_text"
                tools:ignore="HardcodedText" />

        </GridLayout>

        <TextView
            android:id="@+id/error"
            style="@style/ErrorText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="@string/match_error"
            android:visibility="invisible" />

    </LinearLayout>

    <FrameLayout
        android:id="@+id/progress"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#80ffffff"
        android:visibility="visible">

        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" />

    </FrameLayout>

</FrameLayout>

对于大量的布局感到抱歉,把它放在这里&#39;原样&#39;。

注意ID 进度的底部FrameLayout。尽管它有 android:layout_height =&#34; match_parent&#34; ,但它在设备上看起来像&#34; wrap_content&#34; - 高度仅匹配内部ProgressBar。 虽然在Android Studio设计器中显示得很完美,但却占据了整个视图。

出了什么问题?

以下是AS设计器中布局的外观

AS designer

并在设备上(尝试了模拟器和真实设备,效果相同)

Device

4 个答案:

答案 0 :(得分:2)

尝试将根FrameLayout更改为RelativeLayout

答案 1 :(得分:0)

你有两个FrameLayouts。 @id 进度一个和一个LinearLayout

首先快速浏览developer.android.com

  

FrameLayout旨在阻挡屏幕上要显示的区域   单个项目。通常,FrameLayout应该用于保存单个   子视图,因为它可能很难组织子视图   在没有孩子的情况下可以扩展到不同屏幕尺寸的方式   相互重叠。

那么对于你的父母FrameLayout你有几个孩子?(2)

  

但是,您可以将多个子项添加到FrameLayout和控件中   它们在FrameLayout中的位置,通过为每个分配重力   child,使用android:layout_gravity属性。

你们两个孩子都有重力吗?不,不是@id进展

  

子视图以堆栈形式绘制,包含最近添加的子视图   在上面。 FrameLayout的大小是其最大子项的大小   (加填充),可见或不可见(如果FrameLayout的父级允许)。

首先你添加线性布局然后你添加FrameLayout所以.. child FrameLayout应该在顶部,它是。这是你的问题吗?

即使你的布局很长也可以缩短到这个

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:gravity="center"
    android:padding="16dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_gravity="center"
        android:background="#121"
        android:orientation="vertical">
    </LinearLayout>

    <FrameLayout
        android:id="@+id/progress"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="#567"
        android:visibility="visible">

        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" />

    </FrameLayout>

</FrameLayout>

输出(我在框架布局中添加了您缺少重力的线性布局图片):

enter image description here

答案 2 :(得分:0)

我遇到了同样的问题,并设法修复它。似乎没有人注意到,但问题的根源是GridLayout。正如您在蓝图中看到的那样,FrameLayout没有问题,因为它确实与父级匹配。 GridLayout的项目具有固定的大小,这是错误的。您需要为GridLayout中的每个项目设置权重,以便项目可以拉伸以适应任何屏幕分辨率。但GridLayout中的权重需要API 21.所以我建议你使用嵌套LinearLayout's,将项目权重设置为1。

答案 3 :(得分:0)

我在项目中遇到的问题是,我有两个具有相同ID的框架布局。 解决方案是为框架布局分配唯一的ID。

希望这对将来的读者有所帮助。