今天遇到一个问题,如下图
图中间的两个数字,如果数字过大时换行呢?还是假省略号呢?
加省略号会让用户看不到完整信息
而换行则会造成界面变形,影响美观
想了一个办法,就是动态设计字体大小,android基础好的童鞋应该都会写,不多说了,我上代码先
首先获取屏幕宽度,计算数字两边的padding
float padding = 50;//px
float maxWidth = (getResources().getDisplayMetrics().widthPixels - padding*2)/2;
然后再写一个方法,动态修改TextView的字体大小
private void reSizeTextView(TextView textView, String text, float maxWidth){
Paint paint = textView.getPaint();
float textWidth = paint.measureText(text);
int textSizeInDp = 30;
if(textWidth > maxWidth){
for(;textSizeInDp > 0; textSizeInDp--){
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSizeInDp);
paint = textView.getPaint();
textWidth = paint.measureText(text);
if(textWidth <= maxWidth){
break;
}
}
}
textView.invalidate();
}
TypeValue.COMPLEX_UNIT_DIP用于控制设置大小的单位
invalidate用于刷新界面,因为我发现尽管xml里面设置了gravity="center_vertical"最后文字也没居中。最后刷新一下就居中了。
是了,还有xml的代码:(id属性我就不写出来了)
<TextView
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_gravity="center"
android:gravity="center_vertical"
android:maxLines="1"
android:text="@string/zero_decimal"
android:textColor="#ffffff"
android:textSize="30sp" />
调用:
reSizeTextView(textViewl, numString, maxWidth);
tx_added_up_capital.setText(numString);
最后效果: