大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述当系统范围的字体缩放时,Android TextView不会包装内容相关的知识,希望能为你提供帮助。
在我的应用程序中,我正在尝试调整此布局,以便在用户在android系统设置 - >
显示 - >
字体大小(或某些设备的辅助功能设置)中缩放系统范围的字体大小时可读。做一些挖掘我发现这会调整设备配置字体比例(getResources().getConfiguration.fontScale
)从1.0
到1.15
。
我在LinearLayout
得到一些奇怪的行为,其中一个TextView
s宽度被压碎,当它设置为wrap_content
,并且也没有反映一组minWidth
。
通常看起来像
文章图片
当字体缩放时,它看起来像
文章图片
这是有问题的
LinearLayout
(为截图中的上下文添加注释)<
LinearLayout
android:id="@+id/sectionPaintStatus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<
!-- () 6 Paint Items -->
<
LinearLayout
android:id="@+id/sectionPaintItemToggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="5dp">
<
android.support.design.widget.FloatingActionButton
android:id="@+id/fabExpandPaintItems"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:rotation="180"
android:src="https://www.songbingjia.com/android/@drawable/ic_collapse"
app:elevation="2dp"
app:fabSize="mini"/>
<
TextView
android:id="@+id/tvPaintItemCount"
style="@style/Label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="0 Paint Items"
android:textSize="16sp"/>
<
ImageView
android:id="@+id/imgPaintAreaWarning"
android:layout_width="20dp"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:scaleType="centerInside"
android:src="https://www.songbingjia.com/android/@drawable/ic_edit_warning2"
android:visibility="invisible"/>
<
/LinearLayout>
<
!-- Inner layout to consume middle width and right align the rest -->
<
LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="horizontal">
<
LinearLayout
android:id="@+id/layoutPaintItemCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="vertical"
android:visibility="invisible">
<
TextView
android:id="@+id/tvPaintItemCountStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:textSize="16sp"
android:textStyle="bold"/>
<
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Paint Items"
android:textSize="16sp"/>
<
/LinearLayout>
<
ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginStart="30dp"
android:scaleType="centerInside"
android:src="https://www.songbingjia.com/android/@drawable/ic_time"/>
<
LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="vertical">
<
TextView
android:id="@+id/tvPaintTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2.5h"
android:textSize="16sp"
android:textStyle="bold"/>
<
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Time"
android:textSize="16sp"/>
<
/LinearLayout>
<
LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
android:minWidth="70dp"
android:gravity="end"
android:orientation="vertical">
<
TextView
android:id="@+id/tvPaintTotal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="$123.22"
android:textSize="16sp"
android:textStyle="bold"/>
<
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Total"
android:textSize="16sp"/>
<
/LinearLayout>
<
/LinearLayout>
<
/LinearLayout>
【当系统范围的字体缩放时,Android TextView不会包装内容】为什么包含2个
LinearLayout
s的最后一个TextView
没有正确包装内容?我尝试删除导致任何问题的minWidth
incase并获得相同的结果。我不明白为什么所有其他布局都正确地包装它们的内容,但最后一个没有。是否可以为缩放的系统范围字体添加资源文件夹?
编辑它似乎删除边距允许
TextView
包装适当的宽度,但显然我需要边距。 文章图片
谁能解释这种奇怪的行为?
编辑解决事实证明我完全忘记了“绘制项目”标签和时间图标之间布局中的不可见元素。这导致我的水平空间不足。
答案您似乎已使用
layout_width="match_parent"
和gravity="end"
来对齐您的元素。我假设在小型设备(或大文本)上,当没有足够的空间时,你想要“0 Paint Items”进行椭圆化,并且要在全宽度显示“时间”和“总计”字段。
为此,我们进行了以下更改:
首先,让
sectionPaintItemToggle
有0dp
宽度和layout_weight="1"
- 这告诉Android“这应该填充尽可能多的空间”。<
LinearLayout
android:id="@+id/sectionPaintItemToggle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
... >
我删除了所有
gravity="end"
设置。我改变了“内部布局”(根据评论)要有
wrap_content
宽度。我删除了整个
layoutPaintItemCount
布局 - 我觉得你正在尝试一种不同的方式来做“N个绘画项目”布局。最后,我们有类似的东西(我换了一个ImageView用于FAB并且只使用了我已经拥有的资源 - 我想我也改变了一些边距):
<
?xml version="1.0" encoding="utf-8"?>
<
LinearLayout
android:id="@+id/sectionPaintStatus"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:gravity="center_vertical"
>
<
!-- () 6 Paint Items -->
<
LinearLayout
android:id="@+id/sectionPaintItemToggle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clipToPadding="false"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="5dp">
<
ImageView
android:id="@+id/fabExpandPaintItems"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_margin="5dp"
android:rotation="180"
android:src="https://www.songbingjia.com/android/@drawable/ic_edit_black_24dp"/>
<
TextView
android:id="@+id/tvPaintItemCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="0 Paint Items"
android:textSize="16sp"/>
<
ImageView
android:id="@+id/imgPaintAreaWarning"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:scaleType="centerInside"
android:src="https://www.songbingjia.com/android/@drawable/ic_edit_black_24dp"
android:visibility="invisible"/>
<
/LinearLayout>
<
!-- Inner layout to consume middle width and right align the rest -->
<
LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<
ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="centerInside"
android:src="https://www.songbingjia.com/android/@drawable/ic_edit_black_24dp"/>
<
LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<
TextView
android:id="@+id/tvPaintTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2.5h"
android:textSize="16sp"
android:textStyle="bold"/>
<
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Time"
android:textSize="16sp"/>
<
/LinearLayout>
<
LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="30dp"
android:layout_marginStart="30dp"
android:orientation="vertical">
<
TextView
android:id="@+id/tvPaintTotal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="$123.22"
android:textSize="16sp"
android:textStyle="bold"/>
<
TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Total"
android:textSize="16sp"/>
<
/LinearLayout>
<
/LinearLayout>
<
/LinearLayout>
关键部分是说服Android,“N Paint Items”视图是你想缩小的视图。
推荐阅读
- Android Textview无法显示特殊字符()
- android长textview封面imageview
- 如何在android中单击listview适配器时展开和折叠视图
- 使用android中的颜色选择器更改textview的文本颜色和背景颜色
- 计算百分比并在textview android studio中显示
- AWSAppSync GraphQL突变执行两次
- 为什么webview头键在android中以小写形式转换()
- Xamarin Android - Task.Run vs Task.Factory.StartNew和Thread.CurrentPrincipal
- 在VS 2017 xamarin android项目中没有击中断点