Android开发如何在String资源中添加空格

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 (一个英文字母宽度)

所有Unicode符号表

<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 (一个英文字母宽度)

以上就是本文的全部内容 🎉,希望这篇文章对你有用,欢迎支持哦~感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子林Android

感谢老板,老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值