我的片段中有一个 GridLayout,有 3 列和 2 行。第一个单元格中的文本长度有所不同。我将第一个单元格内的 TextView 设置为 maxLines=1 和 ellipsize=end。
我的问题是,每当文本达到一定长度时,与其相邻的第二个单元格就会溢出屏幕。我假设设置 GridLayout layout_width=match_parent 将使网格保持在屏幕尺寸内,并且单元格 1 中的 TextView 会缩小 - 将单元格 2 保持在屏幕内。
我的目标是保持单元格 2 可见,并使单元格 1 居中并填充剩余区域。
我尝试了这里建议的解决方案:https://stackoverflow.com/a/34099239/6368401 推荐:
您需要使用填充layout_gravity并设置任意layout_width 或需要椭圆化的长 TextView 的宽度。
android:layout_gravity="fill" android:layout_width="1dp"
我也尝试过玩
android:layout_weight
和 android:layout_gravity="fill_horizontal"
。此时,只要 cell2 保持可见,文本居中是可选的(不是首选)。两个单元格的宽度均为 50% 是行不通的,因为单元格 2 永远不会超过 4 个字符,通常为 2-3 个字符。
以下显示了布局的直观表示:
-------------------------
| cell1 | |
----------------| cell2 |
| cell3 | cell4 | |
-------------------------
cell1 设置为 columnspan=2。 cell2 设置为 rowspan=2。所有单元格都是 TextView。
这是我在片段中的 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>
尝试各种组合,包括布局宽度、布局重力和重力,我偶然发现了一个对我有用的组合。
这是生成我正在搜索的布局的 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>
有时,为占据整个屏幕宽度的视图设置
android:layout_width="match_parent"
和 android:layout_weight="1"
并将另一个视图从屏幕上移开,可以解决这个问题。因此,请尝试对包含 cell1、cell3、cell4 的 LinearLayout 执行此操作。
您还可以使用 LinearLayout 代替 GridLayout (您可以设置最适合您的视图的重力值):
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<!-- Cell 1. -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Cell 3. -->
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<!-- Cell 4. -->
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
<!-- Cell 2. -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
我这样解决了TextView尺寸过大的问题:
为 TextView 设置 android:layout_gravity="fill_horizontal"
将此代码添加到您的 Activity 或片段中:
@覆盖 受保护无效 onStart() { super.onStart();
int w = tv.getWidth();
tv.setMaxWidth( w );
}