我想尽可能多地将文本压缩到窗口小部件的一个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>
答案 0 :(得分:0)
好的,所以我放弃了这个问题,当我再次访问时,我找到了解决方案:
我在问题工作中提出的实际想法,只是插入连字符的算法中的一个错误。插入连字符后,请确保准确知道线条的确切含义。