相关疑难解决方法(0)

自动缩放TextView文本以适应界限

我正在寻找一种最佳方法来调整包装文本的大小TextView,使其适合其getHeight和getWidth界限.我不是简单地寻找一种包装文本的方法 - 我想确保它既包装又小到足以完全适合屏幕.

我在StackOverflow上看到了一些需要自动调整大小的情况,但它们或者是非常特殊的黑客解决方案案例,没有解决方案,或者涉及TextView递归重新绘制,直到它足够小(这是内存密集并迫使用户观看文本逐步收缩每次递归).

但是我确信那里有人找到了一个很好的解决方案,不涉及我正在做的事情:编写几个重度例程来解析和测量文本,调整文本大小,然后重复直到找到一个合适的小尺寸.

TextView用于包装文本的例程是什么?难道不能以某种方式用来预测文本是否足够小?

tl; dr:是否有一种最佳实践方法可以自动调整大小TextView以适应,包裹,在其getHeight和getWidth范围内?

android scale word-wrap textview

811
推荐指数
18
解决办法
38万
查看次数

测量Canvas(Android)上绘制的文本宽度

是否有一种方法可以根据用于绘制它的Paint使用drawText()方法返回要在Android画布上绘制的文本的宽度(以像素为单位)?

android text draw android-canvas

125
推荐指数
4
解决办法
7万
查看次数

测量在Canvas(Android)上绘制的文本高度

有没有直接测量文字高度的方法?我现在这样做的方法是使用Paint measureText()来获取宽度,然后通过试验和错误找到一个值来获得近似高度.我也一直在搞乱FontMetrics,但所有这些似乎都是近似的方法.

我正在尝试扩展不同分辨率的东西.我可以做到,但我最终得到了令人难以置信的冗长代码,并通过大量计算来确定相对大小.我讨厌它!一定有更好的方法.

graphics android view android-canvas

119
推荐指数
4
解决办法
9万
查看次数

如何可靠地确定多线串的宽度?

我试图计算多行文本段落的宽度.据我所知,唯一可以在Android中执行此操作的类是StaticLayout(或DynamicLayout)类.当使用这个类时,我没有得到我的文本片段的适当长度,而是测量的尺寸有时更小,有时更大,取决于文本大小.

所以我基本上在寻找一种可靠地测量多行文本字符串宽度的方法.

下图显示了测量宽度与各种文本大小的实际文本长度的差异.分散文本和措施

在自定义视图中运行以下代码创建屏幕截图:

@Override
protected void onDraw( Canvas canvas ) {
  for( int i = 0; i < 15; i++ ) {
    int startSize = 10;
    int curSize = i + startSize;
    paint.setTextSize( curSize );
    String text = i + startSize + " - " + TEXT_SNIPPET;
    layout = new StaticLayout( text,
                               paint,
                               Integer.MAX_VALUE,
                               Alignment.ALIGN_NORMAL,
                               1.0f,
                               0.0f,
                               true );

    float top = STEP_DISTANCE * i;
    float measuredWidth = layout.getLineMax( 0 );
    canvas.drawRect( 0, top, measuredWidth, top + curSize, bgPaint …
Run Code Online (Sandbox Code Playgroud)

android

14
推荐指数
1
解决办法
4202
查看次数

Android中的Gettextbounds

我们曾经找到适合给定文本的矩形,例如,如果在gettextbounds api中给出"TESTING",它将给出一个适合给定字符串"TESTING"的矩形,但是任何plz都可以澄清在哪个基础上计算矩形长度,我是否可以这样检查字体大小是否可以考虑?

1)我试过CharSequence text = getText(); canvas.drawText(text,0,text.length(),mTextX,mTextY,getPaint());

    Paint pt = new Paint ( );
    pt.setTextSize(10);

    TextPaint tp = getPaint();
    String string = "haa";
    Rect currentBounds = new Rect ( );
    //this.setTextSize(/* TypedValue.COMPLEX_UNIT_PX */ 10, /* fontPixelSize*Home.fltFontRatio */ 32);

    tp.getTextBounds((String) text, 0, text.length(), currentBounds );

    Log.e ( " ", "Desired Text " +text);
    Log.e ( " ", "first Ondraw Left " +currentBounds.left);
    Log.e ( " ", "Ondraw Top" +currentBounds.top);
    Log.e ( " ", "Ondraw right " +currentBounds.right);
    Log.e ( " ", …
Run Code Online (Sandbox Code Playgroud)

android

13
推荐指数
1
解决办法
1万
查看次数

Android编程:如何在矩形中绘制多行文字?

我看过很多关于类似问题的帖子,但没有一个对我有用.在Canvas,我有一个大小的矩形,比方说,200px到200px,我想在这个矩形中写文字.文本不需要填充整个矩形,但重要的是当到达矩形的末尾时应该自动换行.我怎样才能在Android中执行此操作?

android android-layout android-canvas

9
推荐指数
1
解决办法
8672
查看次数

最后一个单词显示在textview中

我将在Android应用程序的几个页面上显示完整的文本文档.每个页面都包含一个TextView控件,负责显示文本.它还包含一个下一个按钮,该按钮负责更新textview并按照文本从最后显示的部分结束的位置开始.
问题是如何在TextView的可显示区域中找到最后显示的单词?
注意:在这个应用程序中,textView 应该滚动或使用ellipsize.还必须注意,文本化可以增加或减少.要更好地了解情况:要显示的示例文本:

这是全文.在第一页它刚刚结束在这里的,必须从这里被遵循.

这是其显示的示例说明.问题是如何找到第1页中显示的最后一个单词"here"? 这是其显示的示例说明. 问题是如何找到第1页中显示的最后一个单词

android textview

8
推荐指数
1
解决办法
1695
查看次数

如何使用Paint.getTextBounds()快速获取TextView的宽度和高度?

Paint类中有一个方法:Paint.getTextBounds()返回Rect某些文本占用的内容.但根据这个答案,它会返回与TextView的宽度/高度不同的东西.

Q1:有没有办法Rect通过Paint.getTextBounds()返回TextView的宽度和高度?

注意,我确实需要精确地知道宽度/高度.我很高兴知道rect可能的错误大约2-3%的上限,但它必须不大(并且应该适用于任何不依赖于屏幕分辨率和像素密度的手机)然后TextView界限

Q2:有没有其他QUICK方法用指定的textSize确定某些文本的宽度和高度?

我知道,宽度可以由Paint.measureText()确定,但这不会返回高度.高度可以通过创建new StaticLayoutwith text然后调用StaticLayout.getHeight()来确定,但这太慢了.我需要更快的东西.


所有这一切的背景是AutoFitTextView通过向上或向下缩放文本大小自动将文本放入其边界内,并且它应该快速完成,因为很多这样AutoFitTextView的动态会很快动态变化.

java performance android textview text-size

7
推荐指数
1
解决办法
5277
查看次数

在某些指定的Rectangle中绘制文本拟合

使用画布,我想绘制一些适合某些指定矩形的短标签文本(1-2个字符).由于某些其他原因,我使用的缩放使得该重新纠缠的尺寸很小,即约1.

我面临的问题是计算最佳(尽可能大,以便文本仍然适合)文本大小,以便Paint.setTextSize在绘制文本之前使用(我使用Canva.drawText()).为此我可以使用该Paint.Fontmetrics对象将一些常规字体尺寸作为浮点数或getTextBounds(String text, int start, int end, Rect bounds)将文本的边界框作为整数矩形.由于我使用的缩放,后者的整数边界框是不精确的,以便为我的目的计算最佳文本大小.

我需要的是一些方法来获得更高精度的文本边界框(例如getStringBounds(String str, Graphics context)in java.awt.FontMetrics),但我找不到合适的方法.

android drawing text canvas

4
推荐指数
1
解决办法
9821
查看次数

在Android TextView中真正顶对齐文本

我试图在Android中显示TextView,使视图中的文本顶部对齐:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create container layout
    FrameLayout layout = new FrameLayout(this);

    // Create text label
    TextView label = new TextView(this);
    label.setTextSize(TypedValue.COMPLEX_UNIT_PX, 25);     // 25 pixels tall
    label.setGravity(Gravity.TOP + Gravity.CENTER);        // Align text top-center
    label.setPadding(0, 0, 0, 0);                          // No padding
    Rect bounds = new Rect();
    label.getPaint().getTextBounds("gdyl!", 0, 5, bounds); // Measure height
    label.setText("good day, world! "+bounds.top+" to "+bounds.bottom);
    label.setTextColor      (0xFF000000);                  // Black text
    label.setBackgroundColor(0xFF00FFFF);                  // Blue background

    // Position text label
    FrameLayout.LayoutParams …
Run Code Online (Sandbox Code Playgroud)

java android vertical-alignment textview

3
推荐指数
1
解决办法
3928
查看次数

getTextBounds返回错误的值

我试图得到一个文本字符串的宽度,我得到的值为8,这不会产生,因为这意味着每个字母都是1个像素.我有以下代码

Rect bounds = new Rect();
Paint paint = new Paint();
paint.setTextSize(12);
paint.getTextBounds("ABCDEFGHI", 0, 1, bounds);
width=bounds.right;      // this value is 8
Run Code Online (Sandbox Code Playgroud)

bounds的值为0,0,8,9

android

2
推荐指数
1
解决办法
1798
查看次数