1. 问题描述
在Android开发中有这样的需求:为一段文本添加空格,来实现对齐或者特定的UI效果。
看似简单,但如果直接在strings.xml资源里敲空格实现,会发现运行后并没有空格效果。
注:本文所述的问题前提是,在string.xml中的字符串添加空格。
如果是直接在布局中写字符串添加空格,也可以生效的,也就是不会碰到本文的问题
1.1 代码示例
来看下面简单的代码示例:
字符串资源:注意,这里的字符串是 四个空格+测试111⬇️
<resources>
<string name="blank_text"> 测试111</string>
</resources>
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:background="@color/green_500">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_1"
android:text="@string/blank_text"
android:background="@color/white"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_2"
android:text="测试222"
/>
</LinearLayout>
1.2 运行效果
可见,并没有预想中的 “四个空格+测试111”效果,奇怪🤔。
即使是在代码中引用这个字符串资源,也是一样,如下面代码:
class BlankTestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityBlankTestBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.tv1.text = resources.getString(R.string.blank_text)
}
}
效果如上图一样,没有空格效果。
2. 解决方案
那么,如何实现引用的string资源里带空格效果呢?🤔
答案是:使用 Unicode 字符!
2.1 在string资源中使用 Unicode 字符
中文空格:\u3000
(一个中文宽度)
英文空格:\u0020
(一个英文字母宽度)
<resources>
<string name="blank_text">\u3000\u3000\u3000\u3000测试111</string>
</resources>
看效果:
哈哈😄,空格效果出来了!
2.2 Unicode 也可以直接在字符串中使用
另外, Unicode 字符表示空格,不仅可以在 string xml 资源中使用,也可以直接在代码字符串中使用。
- 在 xml 布局中直接使用字符串
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_1" android:text="\u3000\u3000\u3000\u3000测试111" android:background="@color/white" />
- 在代码中直接使用字符串
class BlankTestActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivityBlankTestBinding.inflate(layoutInflater) setContentView(binding.root) binding.tv1.text = "\u3000\u3000\u3000\u3000测试111" } }
3. 总结
使用 Unicode 字符表示空格,可以在Android string xml 资源中使用,解决直接输入空格不显示的问题。
空格的 Unicode 字符为:
- 中文空格:
\u3000
(一个中文宽度) - 英文空格:
\u0020
(一个英文字母宽度)
以上就是本文的全部内容 🎉,希望这篇文章对你有用,欢迎支持哦~感谢!