gpt4 book ai didi

如果使用右边距,Android 一行的最后一个字可能会导致不正确的 TextView 尺寸

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:14 24 4
gpt4 key购买 nike

在 TextView 中使用粗体文本时我有一个奇怪的行为。

所以问题如下,我创建了一个自定义项目,它包含文本并且应该在稍后的列表中用作项目,所以该项目多次包含在 ScrollView 线性布局中,它具有垂直方向.

项目布局如下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/ButtonItem">
<TextView
android:id="@+id/m_oItem_TextView_TopLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="20dp"
android:layout_alignParentTop="true"
android:layout_marginTop="10dp"
android:textColor="@color/black"
android:textSize="@dimen/font_size_12" />
<TextView
android:id="@+id/m_oItem_TextView_TopMiddle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/m_oItem_TextView_TopLeft"
android:layout_toRightOf="@+id/m_oItem_TextView_TopLeft"
android:layout_toLeftOf="@+id/m_oItem_TextView_TopRight"
android:layout_marginRight="20dp"
android:textColor="@color/black"
android:textSize="@dimen/font_size_12"
android:gravity="right"/>
<TextView
android:id="@+id/m_oItem_TextView_TopRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="40dp"
android:layout_alignTop="@+id/m_oItem_TextView_TopLeft"
android:textColor="@color/black"
android:textSize="@dimen/font_size_12"/>
<TextView
android:id="@+id/m_oItem_TextView_Bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft"
android:layout_alignRight="@+id/m_oItem_TextView_TopRight"
android:layout_below="@+id/m_oItem_TextView_TopLeft"
android:layout_marginTop="5dp"
android:textColor="@color/black"
android:textSize="@dimen/font_size_14" />
<ImageView
android:id="@+id/m_oItem_PlaceHolder"
android:layout_width="wrap_content"
android:layout_height="10dp"
android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft"
android:layout_alignRight="@+id/m_oItem_TextView_TopRight"
android:layout_below="@+id/m_oItem_TextView_Bottom"
android:contentDescription="@string/image_description"/>
<ImageView
android:id="@+id/m_oPart_Arrow_Image"
android:scaleType="fitCenter"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp"
android:src="@drawable/arrow_right"
android:contentDescription="@string/image_description"/>
</RelativeLayout>

m_oItem_TextView_Bottom textview 是将包含文本的部分,对于它来说可能太长了,因此需要时增加 textview 的高度。当我对此进行测试时,一切正常, TextView 具有所需的高度。

但是一旦我设置了

android:textStyle="bold"

文本当然会变宽,因此可能需要更多行。现在的问题是,这不会被 android 以某种方式计算。

例如如果非粗体线几乎不需要两行,例如(下图中的最后一项)

last item with two lines

粗体文本需要三行,但 TextView 仍然只提供两行

last item with three lines

有没有人遇到过同样的问题或有解决方案或至少建议我如何解决这个问题。无论如何提前致谢

编辑:根据要求,ButtonItem 样式是这样的

<style name="ButtonItem">
<item name="android:background">@drawable/button_item</item>
</style>

@drawable/button_item 是:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/button_item_down" />
<item android:state_selected="true" android:drawable="@drawable/button_item_selected" />
<item android:drawable="@drawable/button_item_normal" />
</selector>

@drawable/button_item_down 是:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:bottom="1dp"
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
<stroke
android:width="@dimen/button_item_stroke_thickness"
android:color="@color/black"/>
</shape>
</item>
</layer-list>

@drawable/button_item_selected 是:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:bottom="1dp"
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
<stroke
android:width="@dimen/button_item_stroke_thickness"
android:color="@color/black"/>
</shape>
</item>
</layer-list>

@drawable/button_item_normal 是:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:bottom="1dp"
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape android:shape="rectangle" >
<solid android:color="@color/transparent" />
<stroke
android:width="@dimen/button_item_stroke_thickness"
android:color="@color/black" />
</shape>
</item>
</layer-list>

本质上,它们只是在那里创建项目下方的黑线,并在单击或选择项目时将背景设为白色。尽管从未使用过所选状态,因为无论如何都不会在代码中设置所选状态。

我也尝试过不使用样式作为背景,但不出所料,问题仍然存在。

再次编辑:好的,所以我能够进一步追踪问题,textview 的大小调整实际上是正确的。具体问题是如果跟随。如果一行的最后一个词(例如“这是一个测试”,而 test 是最后一个词)导致换行,那么最后一个词需要以某种方式足够长。我使用虚拟字符串对此进行了测试,问题中使用了相同的项目。

这里有一些照片 enter image description here

如您所见,导致问题的行还需要一个字符,然后单词就足够长了。

最后编辑:好的找到答案(见下文)

最佳答案

好吧,TextView 正在根据粗体文本重新调整大小,因此它的 RelativeLayout 需要扩展以适应扩展的 TextView。使用 LinearLayouts(一个垂直的,也许另一个水平的,以匹配您使用 RelativeLayout 创建的设计)您可能会更幸运,因为它们擅长在 child 更改时调整自己的大小。

引用:http://logc.at/2011/10/18/when-to-use-linearlayout-vs-relativelayout/

关于如果使用右边距,Android 一行的最后一个字可能会导致不正确的 TextView 尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384608/

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