Android 小部件中文本视图的大小

Android 小部件中文本视图的大小,android,widget,textview,Android,Widget,Textview,我想将尽可能多的文本压缩到小部件的一个TextView中,因此我想将该特定TextView的文本内容连字。我发现,检索TextView大小的最简单方法是根据显示的大小对整个小部件进行充气。然后我会增加TextView的文本内容,并观察lines属性的变化,以便知道在哪里放置连字符“-” 这种离屏测量是可行的,但似乎我设置了一些尺寸错误,因为离屏方法检测到的新线比实际小部件上绘制的线早,即实际小部件似乎比我在屏幕外复制的宽 我做错了什么?还是有其他方法可以实现我想要的 下面是一些代码: 1屏幕外文

我想将尽可能多的文本压缩到小部件的一个TextView中,因此我想将该特定TextView的文本内容连字。我发现,检索TextView大小的最简单方法是根据显示的大小对整个小部件进行充气。然后我会增加TextView的文本内容,并观察lines属性的变化,以便知道在哪里放置连字符“-”

这种离屏测量是可行的,但似乎我设置了一些尺寸错误,因为离屏方法检测到的新线比实际小部件上绘制的线早,即实际小部件似乎比我在屏幕外复制的宽

我做错了什么?还是有其他方法可以实现我想要的

下面是一些代码:

1屏幕外文本测量

String adaptText(String text) {
  Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE))
    .getDefaultDisplay();

  // I'm aware these methods are deprecated, but the results are identical
  // when I'm using the new method: display.getSize(point)
  int displayWidth = display.getWidth();
  int displayHeight = display.getHeight();

  LinearLayout root = new LinearLayout(this);
  LinearLayout sampleLayout = (LinearLayout) LinearLayout.inflate(this,
      R.layout.kal_medium, root);   
  sampleLayout.measure(displayWidth, displayHeight);        
  sampleLayout.layout(0, 0, displayWidth, displayHeight);

  TextView saintsView = (TextView) sampleLayout.findViewById(R.id.saints);
  StringBuilder textBuilder = new StringBuilder(); // result holder

  int numLines = 1; // there's always one line at least
  int len = text.length();

  for (int i = 0; i < len; i++) {
    saintsView.setText(textBuilder);
    if (saintsView.getLineCount() > numLines) {      
      System.out.println("=========BROKEN AT:" + textBuilder);

      // here goes the code that inserts the hyphen

      numLines++;
    }
    textBuilder.append(text.charAt(i));
  }
  return textBuilder.toString();
}
2小部件布局文件:kal_medium.xml,不是全部


好的,所以我把这个问题放在一边,当我再次访问时,我找到了解决方案:

我在问题中提出的实际想法是可行的,只是插入连字符的算法有一个缺陷。只要确保插入连字符后,您确切地知道您的行将包含哪些内容

  <ImageView android:id="@+id/img_bg"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:src="@drawable/bg_post"/>

...

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@id/date"
    android:layout_marginLeft="15dp"
    android:layout_marginRight="12dp"
    android:layout_marginTop="2dp"
    android:padding="0dp">

    ...            

   <TextView android:id="@+id/saints"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:singleLine="false"
        android:ellipsize="none"
        android:textSize="19dp"
        android:textStyle="bold"
        android:gravity="center_vertical|left"
        android:paddingTop="0dp"
        android:layout_marginTop="-1dp"
        android:paddingBottom="20dp"/>
</LinearLayout>