Android之新版本的属性在styles.xml中命名空间写法

news/2023/12/9 15:30:38 标签: 移动开发

在做多语言适配的时候总会遇到一个很头疼的问题:某些内容中文只有短短两三个字,可翻译成英文之后就是一连串的字符,如果TextView的宽度是wrap_content的话就会骤然变宽,把其它的控件挤到一边,整个界面显得特别凌乱。过去解决这种问题通常有两种方案:

  1. 固定TextView的宽高。保持了界面的美观和统一,但是字符过长时会显示不全;
  2. 为每种语言都写一个布局。这样可以适配不同语言的布局,但是由于布局过多,增加了后期的维护成本。

这两种方法都有局限,实际运用时问题也比较多。这时候你一定会想,假如TextView里面的文字能够根据TextView的宽高聪明地放缩就好了。那么恭喜你,TextView的新特性Autosizeing可以满足你!

(详情参考这篇文章:文字太多?控件太小?试试 TextView 的新特性 Autosizeing 吧!)

不过这么好用的属性是在Android 8.0之后推出,在版本低于8.0的手机上面的使用会有一点不一样。首先你的Support包必须是26以上的,而且要使用AppCompatTextView。布局中的写法如下:

           <android.support.v7.widget.AppCompatTextView
            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="12sp"
            app:autoSizeStepGranularity="2sp"
            app:autoSizeMaxTextSize="16sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

用法很简单,但是每次都要去设置这几个属性的话未免有点烦了,最好的做法当然是将其封装成一个style,每次需要的时候去引用就可以了。

一开始我是这样写的:

    <style name="AutoTextStyle">
        ……
        <item name="android:autoSizeTextType" tools:targetApi="o">uniform</item>
        <item name="android:autoSizeMaxTextSize" tools:targetApi="o">16sp</item>
        <item name="android:autoSizeMinTextSize" tools:targetApi="o">12sp</item>
        <item name="android:autoSizeStepGranularity" tools:targetApi="o">2sp</item>
    </style>

这样显然无法在Android8.0以下的手机上奏效。于是我将命名空间换成了app:,没有提示语法错误,但是编译时却报出了如下的错误:

Error:(1296, 21) No resource found that matches the given name: attr 'app:autoSizeMaxTextSize'.

其他的属性也是这样,说明在app:这个命名空间下没有这样属性。那么命名空间应该怎么写呢?

根据博客styles.xml文件中@符号及命名空间android:的使用,在v7包中的属性并不是有android系统定义的,而是存在于当前工程之中。我们可以全局搜索一下values.xml,就是appbuildintermediatesappbuildintermediatesresdebugvalues下面的:

打开values.xml文件

打开之后,搜索我们用到的TextView新属性,果然找到了:

搜索需要用到的属性

可以看到它的前面是没有命名空间的,另外三个属性也是这样,大家可以自行查找一下。

回到我们的styles.xml文件,去掉前面的app:命名空间:

    <style name="AutoTextStyle">
        ……
        <item name="autoSizeTextType" >uniform</item>
        <item name="autoSizeMaxTextSize" >16sp</item>
        <item name="autoSizeMinTextSize" >12sp</item>
        <item name="autoSizeStepGranularity" >2sp</item>
    </style>

再次编译,成功通过了。


http://www.niftyadmin.cn/n/1384039.html

相关文章

197 php COW机制详解和引用变量

写时复制&#xff08;Copy-on-Write&#xff0c;也缩写为COW&#xff09;&#xff0c;顾名思义&#xff0c;就是在写入时才真正复制一份内存进行修改。 COW最早应用在*nix系统中对线程与内存使用的优化&#xff0c;后面广泛的被使用在各种编程语言中&#xff0c;如C的STL等。 在…

试试用eoLinker对接口进行管理,超实用

eoLinker是目前业内领先、国内最大的在线API接口管理平台&#xff0c;提供自动生成API文档、API自动化测试、Mock测试、团队协作等功能&#xff0c;旨在解决由于前后端分离导致的开发效率低下问题。 关于eoLinker的10点特性 1、免费且开源&#xff0c;eoLinker拥有强大的免费产…

清空数据库里所有表的内容

2019独角兽企业重金招聘Python工程师标准>>> 由于必须保存数据库表&#xff0c;所以这里的思路是先查询出所有的数据库表&#xff0c;然后使存过过程删除所有查询的表即可。 1.找到所有的数据库表 SELECT concat(DROP TABLE IF EXISTS , table_name, ;) FROM inform…

JVM运行时的内存区域

为什么80%的码农都做不了架构师&#xff1f;>>> Jvm虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;Jvm所管理的内存将会包含以下几个运行时数据区域&#xff0c…

计算机虚拟化技术操作虚拟化,英特尔虚拟化技术(VT-x)是什么

英特尔的硬件辅助虚拟化技术(Vanderpool Technology&#xff0c;简称VT技术)是一种设计更简单、实施更高效和可靠的方法&#xff0c;是世界上首个X86平台的硬件辅助虚拟化解决方案。它对如何在不同的情形下分配给Guest OS (虚拟机上的操作系统) 想要的Ring 特权级别做了很好的改…

MySQL忘记root密码的找回方法

&#xff08;1&#xff09;登录到数据库所在服务器&#xff0c;手工kill掉MySQL进程&#xff1a; kill cat /mysql-data-directory/hostname.pid 其中&#xff0c;/mysql-data-directory/hostname.pid指的是MySQL数据目录下的.pid文件&#xff0c;它记录了MySQL服务的进程号…

198 MySQL建立索引的注意事项和SQL查询的安全方案

一、MySQL建立索引的注意事项 1、复合索引遵循前缀原则&#xff1b; 2、like查询&#xff0c;%不能在前&#xff0c;可以使用全文索引&#xff1b; 3、column is null 可以使用索引&#xff1b; 4、如果MySQL估计使用索引比全表扫描更慢&#xff0c;会放弃使用索引&#xf…

linux读取按行读写文本文件

1.#include <stdio.h>2.#include <unistd.h>3.#include <fcntl.h>4.#include <string.h>5.#include <malloc.h>6.#include <stdlib.h> 7.8.9.typedef struct item_t {10. char *key;11. char *value;12.}ITEM;13.14./*15. *去除字符…

计算机组成中CM,计算机组成原理实验指导书(TDN-CM)教学版..doc

计算机组成原理实验指导书(TDN-CM)教学版.计算机组成原理实验指导书TDN-CM系统构成1.控制信号发生单元(JT UNIT(TDN-CM)即W/R UNIT(TDN-CM))用来转换产生各单元电路所需的时序信号T1~T4&#xff0c;以及外总线所需的读/写控制信号W/R。2.时序电路单元(STATE UNIT)其电路由四部分…

如何解决CentOS 7.*无法使用tab补全功能

Centos7在使用最小化安装的时候&#xff0c;没有安装自动补全的包&#xff0c;需要自己手动安装。 [roothost02 ~]# yum -y install bash-completion 或者你可以安装一些初始化的包组 [roothost02 ~]# yum -y groupinstall Base Compatibility libraries Debugging Tools Dial-…

FileReaderFileWriter

FileReader public static void main(String[] args) {//创建文件对象指定要读取的文件路径File filenew File("d:\\readme1.txt");try {//创建文件字符输入流对象FileReader frnew FileReader(file);/***********方法一(逐个字符读取文件中的信息)*****************…

Array.prototype.forEach()Array.prototype.map()

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map转载于:https://www.cnblogs.com/darr/p/4864407.html

199 1,1,2,3,5,8,13,21,34...还可以这么写

// 1,1,2,3,5,8,13,21,34..... 求第40位的值是多少&#xff1f; $arr [1, 1];for($i2;$i<40;$i) {$arr[$i] $arr[$i-1] $arr[$i-2]; }var_dump($arr);

mysql的读写分离

一般来说都是通过 主从复制&#xff08;Master-Slave&#xff09;的方式来同步数据&#xff0c;再通过读写分离&#xff08;MySQL-Proxy&#xff09;来提升数据库的并发负载能力 这样的方案来进行部署与实施的。前提主从复制—->http://nginxs.blog.51cto.com/4676810/11976…

计算机二级准考证打印通道,2019年9月计算机二级准考证打印快速入口

2019年9月份为全国计算机等级考试时间&#xff0c;各省从9月11日起陆续开始打印准考证&#xff0c;考生与9月8日起登入打印入口进行打印&#xff0c;考点报名者在考点领取即可&#xff0c;下面我们快来看看北京、上海、陕西、吉林等各省市的打印时间和打印入口在哪&#xff1f;…

Greenplum 在Linux环境安装

环境说明 配置好yum源 上传greenplum软件(greenplum-db-5.4.1-rhel6-x86_64)至需要安装greenplum的服务器 参考网址&#xff1a;https://gpdb.docs.pivotal.io/540/main/index.htmlmaster 服务器&#xff1a;l-test5 standby 服务器&#xff1a;l-test6 segment 服务器:&#…
最新文章