- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 TalkBack 测试我的应用程序的辅助功能兼容性。但是,如果启用了 TalkBack,某些 OutlinedTextFields 将被跳过并且即使通过单击也无法选择。我使用最新版本的 Kotlin/Gradle/Compose 创建了一个示例应用程序,以确保它与我的项目设置无关。
将“占位符”文本更改为某些值允许 TalkBack 选择,而其他值使其不可选择(例如“MM/DD/YYYY”使 TalkBack 跳过该字段,但“Hello World”允许 TalkBack 选择该字段)。
代码如下:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
PlaygroundTheme {
// A surface container using the 'background' color from the theme
Column(
modifier = Modifier.fillMaxSize(),
) {
Greeting("Android")
OutlinedTextField(
value = remember{mutableStateOf("")}.value,
onValueChange = {
},
label = {
Text(text = "Date of Birth")
},
placeholder = {
Text(text = "MM/DD/YYYY") //TalkBack won't select the field with this placeholder
// Text(text = "Hello World") //TalkBack WILL select the field with this placeholder
}
)
}
}
}
}
}
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
}
这是我正在使用的依赖项:
buildscript {
ext {
compose_version = '1.3.0-alpha01'
}
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.2.1' apply false
id 'com.android.library' version '7.2.1' apply false
id 'org.jetbrains.kotlin.android' version '1.7.0' apply false
}
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
compileSdk 32
defaultConfig {
applicationId "com.example.playground"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion '1.2.0'
}
packagingOptions {
resources {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
}
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.8.0'
implementation "androidx.compose.ui:ui:$compose_version"
implementation 'androidx.compose.material3:material3:1.0.0-alpha14'
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.0'
implementation 'androidx.activity:activity-compose:1.5.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
}
TalkBack 是否禁止某些字符串或字符?
最佳答案
我有同样的问题...我进行了一些测试(使用 androidx.compose.ui:ui:1.3.0-beta03):
当我们放置一个placeholder
和一个label
时,TextField
和OutlinedTextField
之间的行为是不同的。 Google 的问题跟踪器上有一些类似的问题 here , here或 here .
除了仅使用带有 OutlinedTextField
的 label
之外,我没有找到其他解决方案,因为可访问性对我们来说不是可选的。我在 Google's tracker 上发了一个新问题使用我制作的以下示例,以及结果:
Column(
modifier = Modifier
.fillMaxSize()
.padding(all = 16.dp)
.verticalScroll(state = rememberScrollState()),
) {
// OutlinedTextField empty.❌
Text(text = "OutlinedTextField empty")
Spacer(modifier = Modifier.height(height = 4.dp))
OutlinedTextField(
value = "",
onValueChange = { },
modifier = Modifier.fillMaxWidth(),
)
Spacer(modifier = Modifier.height(height = 12.dp))
// OutlinedTextField with placeholder.✅
Text(text = "OutlinedTextField with placeholder")
Spacer(modifier = Modifier.height(height = 4.dp))
OutlinedTextField(
value = "",
placeholder = { Text(text = "Placeholder") },
onValueChange = { },
modifier = Modifier.fillMaxWidth(),
)
Spacer(modifier = Modifier.height(height = 12.dp))
// OutlinedTextField with placeholder and label.❌
Text(text = "OutlinedTextField with placeholder and label")
OutlinedTextField(
value = "",
placeholder = { Text(text = "Placeholder") },
label = { Text(text = "Label") },
onValueChange = { },
modifier = Modifier.fillMaxWidth(),
)
Spacer(modifier = Modifier.height(height = 12.dp))
// OutlinedTextField with label.✅
Text(text = "OutlinedTextField with label")
OutlinedTextField(
value = "",
label = { Text(text = "Label") },
onValueChange = { },
modifier = Modifier.fillMaxWidth(),
)
Spacer(modifier = Modifier.height(height = 12.dp))
// TextField empty.❌
Text(text = "TextField empty")
Spacer(modifier = Modifier.height(height = 4.dp))
TextField(
value = "",
onValueChange = { },
modifier = Modifier.fillMaxWidth(),
)
Spacer(modifier = Modifier.height(height = 12.dp))
// TextField with placeholder.✅
Text(text = "TextField with Placeholder")
Spacer(modifier = Modifier.height(height = 4.dp))
TextField(
value = "",
placeholder = { Text(text = "Placeholder") },
onValueChange = { },
modifier = Modifier.fillMaxWidth(),
)
Spacer(modifier = Modifier.height(height = 12.dp))
// TextField with placeholder and label.✅
Text(text = "TextField with Placeholder and label")
Spacer(modifier = Modifier.height(height = 4.dp))
TextField(
value = "",
placeholder = { Text(text = "Placeholder") },
label = { Text(text = "Label") },
onValueChange = { },
modifier = Modifier.fillMaxWidth(),
)
Spacer(modifier = Modifier.height(height = 12.dp))
// TextField with label.✅
Text(text = "TextField with label")
Spacer(modifier = Modifier.height(height = 4.dp))
TextField(
value = "",
label = { Text(text = "Label") },
onValueChange = { },
modifier = Modifier.fillMaxWidth(),
)
Spacer(modifier = Modifier.height(height = 12.dp))
}
关于android - 如果我有特定文本作为占位符,为什么 Android TalkBack 不选择此 Jetpack Compose OutlinedTextField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72903512/
有没有一种简单的方法可以在 compose 中删除开关的内部填充? 我尝试在其修饰符中提供 0.dp,但它并没有摆脱内部填充 Switch( modifier = Modifier
我正在使用底部导航栏,每个菜单都会将用户导航到特定的可组合屏幕。我使用导航库来管理它们之间的导航。 我为所有可组合项使用一个通用的 ViewModel。我在其中一个可组合项中使用惰性列,当我通过单击底
我在撰写屏幕中有一个 TextField 和一个 ModalDrawer。我想在用户打开抽屉时关闭软键盘,但我一直无法弄清楚如何。在 ModalDrawer afaik 中没有触发 onOpened
我一直在搜索文档,但找不到确认。有谁知道navigation和 compose来自 Android Jetpack 的组件彼此兼容吗? 我知道Jetpack Compose尚未准备好生产,仅处于开发人
我正在尝试将我的应用程序更新为新的撰写版本,但它给了我一个我不知道如何修复的错误。当我运行时,错误仍然存在于我的运行中。我的旧项目正常工作,但我想要的是更改版本,如果有人可以帮助我,我将不胜感激
我有这样的用户界面: val scrollState = rememberScrollState() Column( modifier = Modifier
有没有办法在 Compose 中的列表(列/行)更改上获得动画效果,看起来类似于带有 setItemAnimator 的 recyclerview 动画? 最佳答案 目前没有办法用 LazyColum
我想隐藏状态栏,我已经使用伴奏库做到了这一点: val systemUiController = rememberSystemUiController() systemUiController.isS
我想隐藏状态栏,我已经使用伴奏库做到了这一点: val systemUiController = rememberSystemUiController() systemUiController.isS
使用 Android View,我可以像这样将焦点移动到 View: fun View.requestAccessibilityFocus() { requestFocus() sen
我正在尝试在我的 Android 应用程序中使用 Jetpack Compose 播放视频。要使用 ExoPlayer 进行流式传输,但我真的不明白如何实现全屏按钮,有什么建议吗? @Composab
通常可以使用修饰符将不同的形状分配给可组合项,但在此可组合项中没有这样做。 我希望图像中标记的部分是一个圆圈 你可以在下面看到我写的代码 @Composable fun StandardCheckbo
Jetpack compose 提供了很多 Material 组件,如 TextField 等。 然而,要构建类似文件编辑器的东西,可以使用什么样的组件来支持多行文本任意长的文本操作,如选择文本、剪切
我们可以使用 Scaffold 在 JetpackCompose 中使用抽屉导航如下 Scaffold( drawerContent = { Text(text ="Drawer") } )
对不起,我几乎不会说英语。 机器翻译: 如何为 Jetpack Compose 设置阴影颜色? 我可以设置阴影,但它们很难看。 Jetpack Compose 代码: Surface( mod
我正在开发一个小型 jetpack-compose 演示聊天应用程序。所以我需要在底部有一个带有 TextField 和一个要发送的按钮的栏,就像在 WhatsApp 中一样......我认为最好使用
我正在 Jetpack Compose Desktop 中创建一个应用程序,它将接受用户输入,在用户重新打开应用程序后,输入值应该在那里。我的意思是,在用户重新打开应用程序后,用户给定的数据应该在那里
描述 在 SnackbarHostState 上调用 showSnackbar 并传递 duration 参数不会关闭 Snackbar。协程似乎无限期暂停。 重现步骤: val snackbarHo
谁能建议如何在 Jetpack Compose Navigation 的不同部分共享 ViewModel? 根据文档,viewModels 通常应该在使用事件范围的不同组合函数中共享,但如果在导航内部
我想在相机预览上方创建一个半透明图层,如下所示: 我在我的应用程序中完成了相机预览,我想要的只是在预览上有一个半透明的图层,带有剪裁的卡片形状,如图所示(带有圆角)。 所以:全屏相机预览,上面有一个全
我是一名优秀的程序员,十分优秀!