gpt4 book ai didi

当系统范围的字体放大时,Android TextView 不包装内容

转载 作者:行者123 更新时间:2023-11-30 00:11:45 27 4
gpt4 key购买 nike

在我的应用程序中,我试图调整此布局,以便当用户在 Android 系统设置 -> 显示 -> 字体大小(或某些设备的辅助功能设置)中缩放系统范围的字体大小时,它是可读的。做一些挖掘我发现这调整了设备配置字体比例( getResources().getConfiguration.fontScale )从 1.01.15 .

我在 LinearLayout 中遇到了一些奇怪的行为其中一个 TextView当设置为 wrap_content 时,s 的宽度被压扁了,也不反射(reflect)集合 minWidth .

正常情况下的样子 normal缩放字体时的样子 scaled

这是 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="@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="@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="@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>

为什么是最后LinearLayout包含 2 TextView没有正确包装内容?我尝试删除 minWidth以防万一导致任何问题并得到相同的结果。我不明白为什么所有其他布局都正确地包装了它们的内容,但最后一个却没有。

是否可以为缩放的系统宽字体添加资源文件夹?

编辑 似乎删除边距允许 TextView包装适当的宽度,但显然我需要边距。 no margins

谁能解释这种奇怪的行为?

编辑解决事实证明,我完全忘记了布局中“Paint Items”标签和时间图标之间的一个不可见元素。这导致我的水平空间用完了。

最佳答案

您似乎使用了 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 paint items”布局。

最后,我们得到了这样的结果(我将 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="@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="@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="@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” View 是您想要缩小的 View 。

关于当系统范围的字体放大时,Android TextView 不包装内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48040218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com