gpt4 book ai didi

android - 如何让 textView 准确地包裹它的多行内容?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:48 26 4
gpt4 key购买 nike

如何让 textview 准确地包裹这样的文本?

android:width 属性不是解决方案,因为文本是动态的。

期望的行为

|Adcs  |
|adscfd|

当前行为:

|Adcs      |
|adscfd |

这是代码(TextViews 的样式只定义了 textColor、textSize、textStyle 之类的东西)。

<TextView
android:id="@+id/text_title_holder"
style="@style/TextBold.Black.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:maxWidth="100dp"
android:maxLines="2"
android:text="Adcs adscfd"
android:gravity="left"
android:visibility="visible" />

话题wrap_content width on mutiline TextView没有好的答案。

最佳答案

我遇到过这个问题,但没有在网上找到解决方案。我通过创建新组件 TightTextView 来实现这一技巧,如果您指定了组件的 maxWidth 并且 Layout(文本)的宽度小于 View 的测量宽度,它会重新测量给定的文本。

package com.client.android.app.views;

import android.content.Context;
import android.text.Layout;
import android.util.AttributeSet;
import android.widget.TextView;

/**
* Tightly wraps the text when setting the maxWidth.
* @author sky
*/
public class TightTextView extends TextView {
private boolean hasMaxWidth;

public TightTextView(Context context) {
this(context, null, 0);
}

public TightTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public TightTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);

if (hasMaxWidth) {
int specModeW = MeasureSpec.getMode(widthMeasureSpec);
if (specModeW != MeasureSpec.EXACTLY) {
Layout layout = getLayout();
int linesCount = layout.getLineCount();
if (linesCount > 1) {
float textRealMaxWidth = 0;
for (int n = 0; n < linesCount; ++n) {
textRealMaxWidth = Math.max(textRealMaxWidth, layout.getLineWidth(n));
}
int w = Math.round(textRealMaxWidth);
if (w < getMeasuredWidth()) {
super.onMeasure(MeasureSpec.makeMeasureSpec(w, MeasureSpec.AT_MOST),
heightMeasureSpec);
}
}
}
}
}


@Override
public void setMaxWidth(int maxpixels) {
super.setMaxWidth(maxpixels);
hasMaxWidth = true;
}

@Override
public void setMaxEms(int maxems) {
super.setMaxEms(maxems);
hasMaxWidth = true;
}
}

!!!只是将它移植到较旧的 android API,因为 getMaxWidth() 仅在 API 级别 16 之后可用。

关于android - 如何让 textView 准确地包裹它的多行内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10913384/

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