Android14新特性之语法性别API

news2025/1/11 18:41:40

Android14新特性之语法性别API

语法性别 API 为使用语法性别改变句子以根据受话人而变化的语言进行对话的用户提供了更加个性化、自然的语音体验。
例如法语中的语法:
Chère cliente[女性],cher client[男性] — 亲爱的客户 [英文]
语法性别 API 在 Android14 中引入,帮助我们实现这一点。

让我们来看看它在实际应用中的表现

我们需要添加备用的资源文件,并在语言环境名称后附加语法性别
这些资源文件应仅包含支持语法性别屈折的字符串
将其他字符串放在默认的资源文件中

代码时间

初始化 GrammticalInflectionManager

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val grammaticalInflectionManager = 
                            getSystemService(GRAMMATICAL_INFLECTION_SERVICE)
                                             as GrammaticalInflectionManager

为您的应用设置语法性别

在这里,我们可以询问用户是否要使用带有特定性别区域设置的应用。
设置的语法性别在应用重新启动时是持久的;如果启用了备份和还原,它们将被备份。
应用的语法性别更改将导致配置更改(活动重新创建)
例如:使用带有可能选项的Dialog

  • 调用 setRequestedApplicationGrammaticalGender(int grammaticalGender) 选择的选项
  • 可能的值:
grammaticalInflectionManager.
 setRequestedApplicationGrammaticalGender(
                      Configuration.GRAMMATICAL_GENDER_FEMININE)

Main Composable

@RequiresApi(34)
@Composable
fun MainComposable(modifier: Modifier = Modifier) {
    val context = LocalContext.current

    var showGenderDialog by rememberSaveable {
        mutableStateOf(true)
    }

    val grammaticalInflectionManager =
        context.applicationContext?.getSystemService(ComponentActivity.GRAMMATICAL_INFLECTION_SERVICE) as GrammaticalInflectionManager

    if (showGenderDialog) {
        SelectGrammaticalGenderDialogComposable { selectedValue ->
            // set the grammatical gender based on the selected value
            grammaticalInflectionManager.setRequestedApplicationGrammaticalGender(selectedValue)
            showGenderDialog = !showGenderDialog
        }
    }

    Column(
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally,
    ) {

        Image(
            painter = painterResource(id = R.drawable.android_14_logo),
            contentDescription = "Android 14 logo",
            modifier = Modifier.size(300.dp),
        )
        Text(
            text = "Grammatical Inflection API 🇫🇷",
            style = TextStyle(fontSize = 20.sp, fontWeight = FontWeight.Bold),
            modifier = modifier,
        )
     
        Spacer(modifier = Modifier.height(16.dp))

        Column(
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally,
        ) {
            OutlinedButton(onClick = {
                // show the current grammatical gender 
                Toast.makeText(
                    context,
                    "${grammaticalInflectionManager.applicationGrammaticalGender}",
                    Toast.LENGTH_SHORT
                ).show()
            }) {
                Text(text = "Check app's Grammatical gender")
            }
            Spacer(modifier = Modifier.width(8.dp))
            OutlinedButton(onClick = {
                showGenderDialog = true
            }) {
                Text(text = "Change grammatical gender")
            }
        }

        Text(text = stringResource(id = R.string.baker_job_title))

        Text(text = stringResource(id = R.string.dear_cleint))
    }
}

Composable for Dialog

@RequiresApi(34)
@Composable
fun SelectGrammaticalGenderDialogComposable(alertAction: (Int) -> Unit) {
    GrammaticalInflectionAPITheme {
        AlertDialog(
            onDismissRequest = { /*TODO*/ },
            confirmButton = { /*TODO*/ },
            text = {
                Column(verticalArrangement = Arrangement.Center) {
                    Text(
                        text = "Masculine",
                        style = TextStyle(fontWeight = FontWeight.ExtraBold, fontSize = 24.sp),
                        modifier = Modifier.clickable {
                            alertAction(Configuration.GRAMMATICAL_GENDER_MASCULINE)
                        },
                    )
                    Spacer(Modifier.height(4.dp))
                    Text(
                        text = "Feminine",
                        style = TextStyle(fontWeight = FontWeight.ExtraBold, fontSize = 24.sp),
                        modifier = Modifier.clickable {
                            alertAction(Configuration.GRAMMATICAL_GENDER_FEMININE)
                        },
                    )
                    Spacer(Modifier.height(4.dp))
                    Text(
                        text = "Neutral",
                        style = TextStyle(fontWeight = FontWeight.ExtraBold, fontSize = 24.sp),
                        modifier = Modifier.clickable {
                            alertAction(Configuration.GRAMMATICAL_GENDER_NEUTRAL)
                        },
                    )
                    Spacer(Modifier.height(4.dp))
                }
            },
            title = {
                Text(text = "Select the Grammatical gender for your app", style = TextStyle(fontSize = 14.sp))
            },
        )
    }
}

资源文件夹结构

Demo效果

示例代码

https://github.com/navczydev/Android14Samples
https://developer.android.com/reference/android/app/GrammaticalInflectionManager

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/876131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文献综述|NLP领域后门攻击、检测与防御

前言:在信息安全中后门攻击(Backdoor Attack)是指绕过安全控制而获取对程序或系统访问权的方法。而随着深度学习以及各种神经网络模型的广泛应用,神经网络中存在的后门问题也引起了研究人员的广泛关注。神经网络后门攻击就是使网络…

《2023年度数据泄露调查报告》发布,一起捕捉关键信息

Verizon于6月份发布了《2023年度数据泄露调查报告》。天空卫士基于数据安全的视角,对本报告进行简单解读和分析。 报告观察 在报告中,Verizon分析了16,312起事件,其中5,199起事件被认定为数据泄露事件。 本次泄露事件统计覆盖了11个行业&a…

数据结构顺序表和链表(超详细)

线性表: 线性表 ( linear list ) 是 n 个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串 ... 线性表在逻辑上是线性结构,也就…

YAML资源清单

目录 YAML资源清单 (一)YAML 语言 (1)基本语法 (2)支持的数据结构 (二)通过资源清单管理容器资源 YAML 语法格式: 创建Service资源清单 (三&#xff…

[Docker精进篇] Docker部署和实践 (二)

前言: Docker部署是通过使用Docker容器技术,将应用程序及其所有相关依赖项打包为一个可移植、自包含的镜像,然后在任何支持Docker的环境中快速部署和运行应用程序的过程。 文章目录 Docker部署1️⃣为什么需要?2️⃣有什么作用&am…

【高频面试题】常见技术场景

文章目录 单点登录这块怎么实现的权限认证是如何实现的上传数据的安全性怎么控制?你们项目中日志怎么采集的查看日志的命令生产问题怎么排查怎么快速定位系统的瓶颈 单点登录这块怎么实现的 单点登录的英文名叫做:Single Sign On(简称SSO&am…

OpenHarmony Meetup 广州站 OpenHarmony正当时—技术开源

招募令 OpenHarmony Meetup 广州站 火热招募中,等待激情四射的开发者,线下参与OpenHarmonyMeetup线下交流 展示前沿技术、探讨未来可能、让你了解更多专属OpenHarmony的魅力 线下参与,先到先得,仅限20个名额! 报名截止时间8月23日…

JS逆向系列之某多多 anti_content

文章目录 声明目标网址anti_content参数分析参考js 环境python 调用测试往期逆向文章推荐声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! 目标网址 aHR0cHM6Ly9tb2JpbGUueWFuZ2tlZHVvL…

bigemap如何添加mapbox地图?

第一步 打开浏览器,找到你要访问的地图的URL地址,并且确认可以正常在浏览器中访问;浏览器中不能访问,同样也不能在软件中访问。 以下为常用地图源地址: 天地图: http://map.tianditu.gov.cn 包含&…

Spring整合MyBatis、声明式事务

Spring整合MyBatis 步骤&#xff1a; 导入相关jar包 junitmybatismysqlspring相关aop织入mybatis-spring pom.xml配置文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xm…

Docker 镜像

1. 什么是镜像&#xff1f; 镜像 是一种轻量级、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等)&#xff0c;这个打包好的运行环境就…

如何使用Redis实现内容推送功能

导读 在日常使用中&#xff0c;我们经常能看见内容推送功能。 常见的场景有&#xff0c;比如你在bilibili关注了某个up主&#xff0c;当up主发布视频后&#xff0c;就会推送到你的收件箱或者是动态中&#xff0c;让粉丝能够及时得知所关注的人发布了内容。 又比如朋友圈&…

离了大谱,这所院校太卷了!524人进复试,刷247人!

一、学校及专业介绍 桂林电子科技大学&#xff08;Guilin University Of Electronic Technology&#xff09;&#xff0c;简称“桂电”、广西一流学科建设高校、是广西唯一拥有国防特色重点专业的高校&#xff0c;是总装备部通信装备预研项目定向发布的30所高校和北斗ICD授权的…

力扣 322. 零钱兑换

题目来源&#xff1a;https://leetcode.cn/problems/coin-change/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a;题目中说每种硬币的数量是无限的&#xff0c;可以看出是典型的完全背包问题。动规五部曲分析如下&#xff1a; 确定dp数组以及下标的含义…

从初学者到专家:Java方法的完整指南

目录 一.方法的概念及使用 1.1什么是方法 1.2方法的定义 1.3方法的调用 1.4实参和形参的关系 1.5没有返回值的方法 1.6方法的意义 二.方法重载 2.1方法重载的实现 2.2方法重载的意义 2.3方法签名 一.方法的概念及使用 1.1什么是方法 方法就是一个代码片段. 类似于 …

21款美规奔驰GLS450更换中规高配主机,汉化操作更简单

很多平行进口的奔驰GLS都有这么一个问题&#xff0c;原车的地图在国内定位不了&#xff0c;语音交互功能也识别不了中文&#xff0c;原厂记录仪也减少了&#xff0c;使用起来也是很不方便的。 可以实现以下功能&#xff1a; ①中国地图 ②语音小助手&#xff08;你好&#xf…

内网ip与外网ip

一、关于IP地址 我们平时直接接触最多的是内网IP。而且还可以自己手动修改ip地址。而外网ip&#xff0c;我们很少直接接触&#xff0c;都是间接接触、因为外网ip一般都是运营商管理&#xff0c;而且是全球唯一的&#xff0c;一般我们自己是无法修改的。 内网IP和外网IP是指在…

线程间三种常见的通信手段

线程间通信是指多个线程之间通过某种机制进行协调和交互&#xff0c;例如&#xff1a;线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中有以下三种实现线程等待的手段 &#xff1a; Object 类提供的 wait()&#xff0c;notify() 和 notifyAll() 方法&#xff1b;C…

Python实现SSA智能麻雀搜索算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法&#xff0c;在2020年提出&a…

新能源电动汽车充电桩控制主板结构组成

你是否好奇过&#xff0c;充电桩主板到底是由哪些部分组成的?又分别是做什么的?今天我们就来一探究竟。 充电桩主板是充电桩的核心部件&#xff0c;它由中央处理器、内存、辅助存储器、输入/输出接口等组成。 中央处理器是充电桩主板的核心&#xff0c;它负责将充电桩的读写指…