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