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