窗口小部件中TextView的大小

时间:2014-04-24 09:11:12

标签: android widget textview

我想尽可能多地将文本压缩到窗口小部件的一个TextView中,因此我想要对该特定TextView的文本内容进行连字。我发现,检索TextView大小的最简单方法是使用显示的大小来扩充整个小部件。然后我会增加TextView的文本内容并观察当行数属性发生变化时,以便我知道在哪里放置连字符(' - ')。

这种离屏测量工作正常,但似乎我设置了一些尺寸错误,因为屏幕外方法比实际小部件上绘制的更早地检测到新线,即实际的小部件似乎比我在屏幕外重现的东西。

我做错了什么?还是有另一种方法来实现我想要的目标吗?

以下是一些代码:

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>

1 个答案:

答案 0 :(得分:0)

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

我在问题工作中提出的实际想法,只是插入连字符的算法中的一个错误。插入连字符后,请确保准确知道线条的确切含义。