Android中TextView设置div中的字体大小小能设置吗

textview固定长度,怎么样设置字体大小,让显示的字符串正好占满整个textview?
要求在不同的设备中都可以。
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
我提供一个扩展TestView类,思路是:定义一个最大的文字大小,一个最小的文字大小(可改变),它只是通过它们之间的大小递减运行,直到它找到的最大适合的一个。
import android.content.Cimport android.graphics.Pimport android.util.AttributeSimport android.widget.TextVpublic class FontFitTextView extends TextView {
public FontFitTextView(Context context) {
super(context);
initialise();
public FontFitTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initialise();
private void initialise() {
testPaint = new Paint();
testPaint.set(this.getPaint());
//max size defaults to the intially specified text size unless it is too small
maxTextSize = this.getTextSize();
if (maxTextSize & 11) {
maxTextSize = 20;
minTextSize = 10;
/* Re size the font so the specified text fits in the text box
* assuming the text box is the specified width.
private void refitText(String text, int textWidth) {
if (textWidth & 0) {
int availableWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight();
float trySize = maxTextS
testPaint.setTextSize(trySize);
while ((trySize & minTextSize) && (testPaint.measureText(text) & availableWidth)) {
trySize -= 1;
if (trySize &= minTextSize) {
trySize = minTextS
testPaint.setTextSize(trySize);
this.setTextSize(trySize);
protected void onTextChanged(final CharSequence text, final int start, final int before, final int after) {
refitText(text.toString(), this.getWidth());
protected void onSizeChanged (int w, int h, int oldw, int oldh) {
if (w != oldw) {
refitText(this.getText().toString(), w);
//Getters and Setters
public float getMinTextSize() {
return minTextS
public void setMinTextSize(int minTextSize) {
this.minTextSize = minTextS
public float getMaxTextSize() {
return maxTextS
public void setMaxTextSize(int minTextSize) {
this.maxTextSize = minTextS
//Attributes
private Paint testP
private float minTextS
private float maxTextS}
找了一个代码,需要监听textview。
class LineTextWatcher implements TextWatcher {static final String TAG = "IpBike";TextView mTV;Paint mPpublic LineTextWatcher(TextView text) {
mPaint = new Paint();}public void beforeTextChanged(CharSequence s, int start, int count,
int after) {}public void onTextChanged(CharSequence s, int start, int before, int count) {}public void afterTextChanged(Editable s) {
// do the work here.
// we are looking for the text not fitting.
ViewParent vp = mTV.getParent();
if ((vp != null) && (vp instanceof LinearLayout)) {
LinearLayout parent = (LinearLayout)
if (parent.getVisibility() == View.VISIBLE) {
mPaint.setTextSize(mTV.getTextSize());
final float size = mPaint.measureText(s.toString());
if ((int) size & mTV.getWidth()) {
float ts = mTV.getTextSize();
Log.w(TAG, "Text ellipsized TextSize was: " + ts);
for (int i = 0; i & parent.getChildCount(); i++) {
View child = parent.getChildAt(i);
if ((child != null) && (child instanceof TextView)) {
TextView tv = (TextView)
// first off we want to keep the verticle
// height.
tv.setHeight(tv.getHeight()); // freeze the
// height.
tv.PLEX_UNIT_PX,
tv.getTextSize() - 1);
Log.v(TAG, "afterTextChanged Child not textView");
Log.v(TAG, "afterTextChanged parent not LinearLayout");
改变文字的大小
Spannable WordtoSpan = new SpannableString("大字小字");
WordtoSpan.setSpan(new AbsoluteSizeSpan(20), 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
WordtoSpan.setSpan(new AbsoluteSizeSpan(14), 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
remoteViews.setCharSequence(R.id.text11, "setText", WordtoSpan);
ComponentName com = new ComponentName("com.jftt.widget", "com.jftt.widget.MyWidgetProvider");
appWidgetManager.updateAppWidget(com, remoteViews);
来自http://txlong-/blog/1142781
获取屏幕的宽高,根据屏幕的宽高做一个算法计算字体大小不知是否可以实现你要的效果,方法是
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
System.out
.println("屏幕分辨率为:" + dm.widthPixels + " * " + dm.heightPixels);
这个问题看来只能用代码自己控制,计算字符串在给定字体下的显示宽度,进而找到最合适的字体大小。如果是用通常的TrueType字体,因为每个字符的显示宽度都是不同的,所以即便是相同长度的字符串的显示宽度也是不同的,因此必须根据每个字符串进行计算,可以使用字符的平均宽度进行预估,然后用两分法进行逼近,这个方法比较浪费计算资源。因此建议你可以使用字符显示宽度固定的字体,这样计算起来就非常容易了。这样的字体不多,我使用过,但是具体字体名字忘记了,使用这样的字体的显示效果也是不错的。
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (25696) 次15:27 提问
android中textview控件中的文字的位置是如何调整的
android中textview控件中的文字的位置是如何调整的
像缩进 靠左 居中 这些概念有吗
按赞数排序
有,而且还有更多属性
位置可以用android:gravity控制,比如:
android:gravity=“center”
缩进可以用android:padding控制,比如:
android:padding="14dp"
padding 属性 加内边距
其他相关推荐2012年10月 移动平台大版内专家分月排行榜第二2012年7月 移动平台大版内专家分月排行榜第二2012年6月 移动平台大版内专家分月排行榜第二2012年5月 移动平台大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。查看:26914|回复:5
助理工程师
可以设置Textview每行的最大字数吗?比如一行最多15个汉字,到15个就自动换行?有什么办法可以实现这种效果吗?
助理工程师
maxLength和固定15个字的宽度或代码控制加\n
助理工程师
android:singleLine=&false&.
android:maxEms
楼主解决了吗
提示: 作者被禁止或删除 内容自动屏蔽
这个只针对中文,对英文不起作用。

我要回帖

更多关于 div中设置字体大小 的文章

 

随机推荐