2

嗨,我正在尝试使用 TextView,它具有以下约束:

  1. 它最多可以走 2 行,如果超过 2 行,它会在最后显示 '...'
  2. 从字体大小 30 开始,我们首先尝试通过将字体大小从 30 减小到 12 来将所有内容放在一行中。这意味着如果我们可以在第一行中放置所有字体大小为 20 的内容,我们坚持使用字体大小 20
  3. 如果我们不能用 12 号字体容纳所有内容,我们将保持 12 号,然后换行到下一行,所有内容都将保持 12 号

所以现在我有一个 EditText,它允许用户输入文本,并且用户输入的每个字符,TextView 将反映用户输入的内容,并根据上述规则更改字体大小。

 userEditView.addTextChangedListener(
       new TextWatcher() {
                 @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    float fontSize = 30;
    userTextView.setTextSize(fontSize);
    int userTextViewWidth = userTextView.getWidth();
    int userTextViewContainerWidth = parentRelatievLayOutView.getWidth();//parentRelativeLayout is a RelativeLayout in xml


    // logic here => i want to know when to wrap a line, i should wrap when the textView width is same or greater than the parent container, in such case, we reduce the font size, and then get the new textView width, see if it can be fit in one line or not


      while (userTextViewWidth >= userTextViewContainerWidth) {
        fontSize -= 1;
        if (fontSize <= 12) {
          fontSize = 12;
          break;
        }
        userTextView.setTextSize(fontSize);

        //userTextView.append("\uFEFF"); // does not work
        //userTextView.invalidate(); // does not work
        userTextViewWidth = userTextView.getWidth();// *** this line never gets updated
      }


  }
  @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    userTextView.setText(charSequence);
  }
  @Override public void afterTextChanged(Editable editable) {
  }
});

所以我的问题是userTextViewWidth = userTextView.getWidth()永远不会更新,即字体大小变小,宽度仍然相同......我想改变Android存在一个问题,其中TextView大小没有改变Android:TextView高度在收缩后没有改变字体大小,但我试过了,它提供的任何技术都不起作用。

4

2 回答 2

3

您需要做的是测量您的 textView。

代替

userTextViewWidth = userTextView.getWidth();

利用

// find out how wide it 'wants' to be    
userTextView.measure(MeasureSpec.UNSPECIFIED, userTextView.getHeight()); 
userTextViewWidth = userTextView.getMeasuredWidth();

更多信息位于http://developer.android.com/reference/android/view/View.html#Layout

于 2012-11-14T17:53:28.177 回答
0

设置android:layoutWidth="wrap_content",文本视图将根据其中的文本长度缩放宽度大小。AFAIK,无法根据 textsize 自动调整 textview 的大小。

于 2012-10-23T02:12:03.077 回答