直接上布局代码
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_purple"
android:gravity="center_horizontal"
android:text="@string/text_dushu"
android:textColor="@android:color/white"
android:textSize="25sp"
android:textStyle="bold|italic" />
<com.la.mytextview.LastSpacingTextView
android:id="@+id/main_tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_purple"
android:gravity="center_horizontal"
android:textColor="@android:color/white"
android:textSize="25sp"
android:textStyle="bold|italic" />
<TextView
android:layout_width="200dp"
android:layout_height="wrap_content"
android:background="@android:color/holo_purple"
android:gravity="center_horizontal"
android:text="@string/text_dushu"
android:textColor="@android:color/white"
android:textSize="25sp"
android:textStyle="bold|italic" />
从上图中看出,如果在TextView直接设置android:textStyle="bold|italic"属性,发现右边的字会被切去一些。
至于如何解决,方法我我目前知道如下两种:
方法1:固定TextView的宽
大家可以看第一TextView和最后一个TextView中的区别,就是设置为android:layout_width="200dp",这样就把文字的显示区域变为200dp,文本“91易搜”就有足够的显示空间了。
这样做是挺好,但如果不知道文字多长呢?比如切换语言,”91易搜“的英文是“125 books for reading”(谷歌翻译),宽度200dp或许就无法容纳这些字体了。
因此方法1只是不是最合适的解决方法。
方法2:文本最后新增一个空格
思路:我们知道TextView的显示长度是根据文本的长度来显示的,因此我们可以在文本末再新增一个空格,这样让TextView的显示区域更大一些。
最后实现的代码如下:
package com.la.mytextview;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ScaleXSpan;
import android.util.AttributeSet;
import android.widget.TextView;
/**
*
* @author
*
*/
public class LastSpacingTextView extends TextView {
private CharSequence originalText = "";
private float SCALE_X = 1.0f; // x轴缩放比例
public LastSpacingTextView(Context context) {
this(context, null);
}
public LastSpacingTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public LastSpacingTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setText(CharSequence text, BufferType type) {
originalText = text;
applyLastLetterSpacing();
}
@Override
public CharSequence getText() {
return originalText;
}
private void applyLastLetterSpacing() {
// 如果是空就没必要处理了
if (this == null || this.originalText == null) {
return;
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < originalText.length(); i++) {
String c = "" + originalText.charAt(i);
builder.append(c);
}
builder.append("\u00A0");// 末端新增一个空格
SpannableString finalText = new SpannableString(builder.toString());
// 为了让空格看起来很明显,我们对空格进行一定的缩放
finalText.setSpan(new ScaleXSpan(SCALE_X),
builder.toString().length() - 1, builder.toString().length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
super.setText(finalText, BufferType.SPANNABLE);
}
}
本文具体代码实现参考《Android Study 之真正解决TextView字间距,那些扯淡的边儿去吧》,有需要的直接访问,多谢。
历史上的今天
暂无评论...
随机推荐
NDK中jni.h头文件完整内容
前言这里摘抄一下jni.h头文件中的所有内容,主要是方便自己查阅。涉及的文件android-ndk-r21d-windows-x86_64\android-ndk-r21d\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include...
Java Consumer的使用
前言今天有空整理一下Consumer<T> 接口的使用,一般用于回调中。这里简单记录一下。正文Consumer<T>接口是java 1.8才有的,定义如下://java.util.function.Consumer@FunctionalInterfacepu...
图片圆角+倒影+缩放
前言之前也介绍过图片圆角,倒影和缩放,由于放在不同页面,也没单独抽离出来,因此这里把代码独立出来。流水文,自己看而已正文缩放图片隐藏内容!付费阅读后才能查看!¥1 ¥3多个隐藏块只需支付一次付费阅读图片圆角对于圆角的,本站之前也专门有篇文章介绍多种方式。隐藏内容!付费阅读后才能...
AccessibilityService使用
前言AccessibilityService是Android提供的无障碍服务,用于增强用户界面以帮助残障人士,或者可能暂时无法与设备充分交互的人们。今天就简单的记录一下AccessibilityService的使用。正文直入正题注册AccessibilityServiceA...
WordPress博客搬家教程
这是建站的必备知识,我们需要怎么进行网络搬家,如果你不会,请仔细研读。这一篇文章写得最简单最明白的。第一步:备份网站根目录下所有文件并转移到新主机。这一步主要是把原来的空间中的网站程序、图片等资源下载备份,并上传到新的主机空间。如果原来空间支持在线压缩,并且新的空间支持解压缩,那么建议...
Android进程间通信方式Messenger的简单记录
前言简单记录一下Messenger的使用,方便自己查阅。正文什么是MessengerMessenger是基于消息Message的传递的一种轻量级IPC进程间通信方式,本质上是对Binder的封装。通过Messenger可以让我们可以简单地在进程间直接使用Handler进行Message传...