Android 防止版面溢出超过屏幕大小

Android 防止版面溢出超过屏幕大小,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我有一个3列2行的网格布局。第一个单元格中的文本长度不同。我将第一个单元格中的TextView设置为maxLines=1和ellipsize=end 我的问题是,每当文本达到一定长度时,相邻的第二个单元格就会溢出屏幕。我假设设置GridLayout\u width=match\u父项将使网格保持在屏幕大小内,单元格1中的TextView将收缩,使单元格2保持在屏幕内 我的目标是保持cell2可见,并使cell1居中并填充剩余区域 我尝试了这里建议的解决方案: 其中建议: 您需要使用填充布局\重力

我有一个3列2行的网格布局。第一个单元格中的文本长度不同。我将第一个单元格中的TextView设置为maxLines=1和ellipsize=end

我的问题是,每当文本达到一定长度时,相邻的第二个单元格就会溢出屏幕。我假设设置GridLayout\u width=match\u父项将使网格保持在屏幕大小内,单元格1中的TextView将收缩,使单元格2保持在屏幕内

我的目标是保持cell2可见,并使cell1居中并填充剩余区域

我尝试了这里建议的解决方案: 其中建议:

您需要使用填充布局\重力并设置任意布局\宽度 或长文本视图上的宽度,需要省略

android:layout\u gravity=“fill”android:layout\u width=“1dp”

我还试过玩
android:layou-weight
android:layou-gravity=“fill\u-horizontal”
。此时,只要cell2保持可见,文本居中是可选的(不是首选)。两个单元格的50%宽度都不起作用,因为cell2永远不会超过4个字符,通常为2-3个字符

以下显示布局的视觉表示:

-------------------------
|     cell1     |       |
----------------| cell2 |
| cell3 | cell4 |       |
-------------------------
cell1设置为columnspan=2。cell2设置为rowspan=2。所有单元格都是文本视图

这是片段中的我的XML:

<GridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="3"
        android:rowCount="2">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_columnSpan="2">

            <TextView
                android:id="@+id/main_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="16dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:visibility="gone"/>

            <TextView
                android:id="@+id/description"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="16dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:visibility="visible"
                android:maxLines="1"
                android:ellipsize="end"
                android:singleLine="true"/>

            <TextView
                android:id="@+id/data"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="16dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:visibility="gone"
                android:textColor="@android:color/holo_green_light"/>

        </LinearLayout>


        <TextView
            android:id="@+id/percent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textStyle="bold"
            android:layout_rowSpan="2"/>


        <TextView
            android:id="@+id/count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_marginLeft="16dp"
            android:textAppearance="?android:attr/textAppearanceMedium"/>


        <TextView
            android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textAppearance="?android:attr/textAppearanceMedium"/>


    </GridLayout>

有时为视图设置
android:layout\u width=“match\u parent”
android:layout\u weight=“1”
,占据整个屏幕宽度并从屏幕上移动另一个视图,就可以做到这一点。因此,请尝试对包含cell1、cell3、cell4的线性布局执行此操作

也可以使用LinearLayout而不是GridLayout(可以根据需要设置视图的重力值):


尝试各种组合,包括布局宽度、布局重力和重力,我偶然发现了一种适合我的组合

这是生成我搜索的布局的XML:

<GridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="3"
        android:rowCount="2">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="1dp"
            android:layout_height="wrap_content"
            android:layout_gravity="fill"
            android:layout_columnSpan="2"
            android:layout_weight="0">

            <TextView
                android:id="@+id/main_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="16dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:visibility="gone"/>

            <TextView
                android:id="@+id/description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="16dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:visibility="visible"
                android:maxLines="1"
                android:ellipsize="end"
                android:layout_weight="1"
                android:gravity="center"/>

            <TextView
                android:id="@+id/data"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="16dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:visibility="gone"
                android:maxLines="1"
                android:ellipsize="end"
                android:layout_weight="1"
                android:gravity="center"
                android:textColor="@android:color/holo_green_light"/>

        </LinearLayout>


        <TextView
            android:id="@+id/percent"
            android:layout_width="30dp"
            android:minEms="3"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textStyle="bold"
            android:layout_rowSpan="2"
            android:gravity="right"
            android:layout_marginLeft="16dp"/>


        <TextView
            android:id="@+id/count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_marginLeft="16dp"
            android:textAppearance="?android:attr/textAppearanceMedium"/>


        <TextView
            android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textAppearance="?android:attr/textAppearanceMedium"/>


    </GridLayout>


非常感谢您的时间和建议。我试过你推荐的,但没用。然而,我确实找到了一个解决办法,我把它作为我的答案贴了出来。我试着投你一票,但我似乎没有足够的声望来这么做。@Heribertolougo很高兴你解决了你的问题!顺便问一下,您使用GridLayout而不是LinearLayout有什么原因吗?我之所以使用GridLayout,是因为在进行了一些搜索之后,它似乎是实现具有行跨和列跨的行和列的唯一方法。此片段是listview中的列表项,不确定这是否重要。@HeribertoLugo好的,但为了以防万一,我编辑了我的答案,并概述了如何使用LinearLayout进行编辑。感谢您的帮助和新代码。我相信这会对一路上的人有所帮助。
<GridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="3"
        android:rowCount="2">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="1dp"
            android:layout_height="wrap_content"
            android:layout_gravity="fill"
            android:layout_columnSpan="2"
            android:layout_weight="0">

            <TextView
                android:id="@+id/main_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="16dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:visibility="gone"/>

            <TextView
                android:id="@+id/description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="16dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:visibility="visible"
                android:maxLines="1"
                android:ellipsize="end"
                android:layout_weight="1"
                android:gravity="center"/>

            <TextView
                android:id="@+id/data"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginLeft="16dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:visibility="gone"
                android:maxLines="1"
                android:ellipsize="end"
                android:layout_weight="1"
                android:gravity="center"
                android:textColor="@android:color/holo_green_light"/>

        </LinearLayout>


        <TextView
            android:id="@+id/percent"
            android:layout_width="30dp"
            android:minEms="3"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textStyle="bold"
            android:layout_rowSpan="2"
            android:gravity="right"
            android:layout_marginLeft="16dp"/>


        <TextView
            android:id="@+id/count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_marginLeft="16dp"
            android:textAppearance="?android:attr/textAppearanceMedium"/>


        <TextView
            android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textAppearance="?android:attr/textAppearanceMedium"/>


    </GridLayout>