Android 在视图中缩放文本以适应?

Android 在视图中缩放文本以适应?,android,resize,textview,Android,Resize,Textview,我不相信这是真的,但我想再核实一下。我想设置TextView的文本大小,使其适合给定宽度的单行。例如: <LinearLayout layout_width="100dip" layout_height="50dip"> <TextView layout_width="fill_parent" layout_height="wrap_content" textSize="fill" text="fit me please!" /&

我不相信这是真的,但我想再核实一下。我想设置TextView的文本大小,使其适合给定宽度的单行。例如:

<LinearLayout
  layout_width="100dip"
  layout_height="50dip">

  <TextView
    layout_width="fill_parent"
    layout_height="wrap_content"
    textSize="fill" 
    text="fit me please!" />

</LinearLayout>


谢谢

您始终可以将xml布局定义与java相结合,并动态定义文本的大小。您可能需要一些计算和参考,从dip单位到当前使用屏幕的像素密度信息,但一旦完成,几乎可以保证解决所有情况下的问题。

您可以使用
TextUtils.EllipsizeCallback
。当文本被省略时,此回调由textview完成。在这里,您可以将文本大小设置为小于当前大小

编辑:否则您可以通过这种方式使用
TextUtils.ellipsize

while (mText != TextUtils.ellipsize(mText, textPaint, other params)) { 
    textpaint.setTextSize(textpaint.getTextSize() - 1);
}

此自定义函数应使用

public static void shrinkTextToFit(浮动可用宽度,TextView TextView,
浮动开始文本大小,浮动最小文本大小){
CharSequence text=textView.getText();
浮动文本大小=开始文本大小;
textView.setTextSize(startingTextSize);
而(text!=(TextUtils.ellipsize)(text,textView.getPaint(),
可用宽度,TextUtils.TruncateAt.END))){
textSize-=1;
if(textSize
这里有一个很好的自动调整文本的打包解决方案:

嗨,是的,我已经写了一些东西来做这件事(有点难看),希望新版本的SDK可以添加一个新的标志来做同样的事情。小心。。这是正确的想法,但是getTextSize()返回PX,setTextSize()接受DIP。你不想把一个喂给另一个。在自变量中跟踪大小。我将textsize设置为paint对象,而不是textview。当我找到合适的尺寸时,才将其设置为textview。所以我认为使用这个想法没有问题。@userSevens7s哦,继续!我第一次没读对,就被我提到的愚蠢的格查难住了。干杯。@userSeven7s,我正在使用这种方法,我在这个设备中得到了
java.lang.StackOverflower
:GT-I9192,D5803,API 4.2.2,4.4.4,我正在使用这种方法,我在这个设备中得到
java.lang.StackOverflower
:GT-I9192,D5803,API 4.2,4.4
public static void shrinkTextToFit(float availableWidth, TextView textView,
                                   float startingTextSize, float minimumTextSize) {

    CharSequence text = textView.getText();
    float textSize = startingTextSize;
    textView.setTextSize(startingTextSize);
    while (text != (TextUtils.ellipsize(text, textView.getPaint(),
                                        availableWidth, TextUtils.TruncateAt.END))) {
        textSize -= 1;
        if (textSize < minimumTextSize) {
            break;
        } else {
            textView.setTextSize(textSize);
        }
    }
}