我正在开发一个使用TalkBack引导人们通过它的应用程序.但是,在这些情况下,我希望在应用程序的布局中存在一些微妙的差异,因此导航更容易,并且还有额外的语音输出(使用TextToSpeech)来帮助指导用户.
我的问题是,如果用户激活了TalkBack,我只想要那些更改和额外输出.
有没有办法知道它是不是?我没有找到任何直接访问TalkBack设置的具体内容,但我希望有某种形式的访问通用手机设置可以让我知道我需要什么.
提前问候并表示感谢.
我想在模拟器中测试我的应用程序的可访问性(特别是Talkback
),但似乎模拟器中缺少该选项.以下是可访问性设置中模拟器的屏幕截图:
有两个选项"ClockBack"
和"QueryBack"
我不能我的手机上使用相同的Android版本发现.以下是我手机辅助功能设置的屏幕截图:
我搜索了解"ClockBack"
并"QueryBack"
了解它们是否是Talkback
模拟器的替代品,但我找不到任何东西.
有谁知道"ClockBack"
和的功能是"QueryBack"
什么?还有更多关于如何Talkback
在模拟器中启用?
启用TalkBack时,有没有办法将辅助功能焦点手动设置为特定视图?例如,当我的Activity启动时,我希望TalkBack自动关注某个Button(视图周围的黄色框)并阅读其内容描述.
到目前为止我尝试过的:
myButton.setFocusable(true);
myButton.setFocusableInTouchMode(true);
myButton.requestFocus();
Run Code Online (Sandbox Code Playgroud)
requestFocus()似乎只是请求输入焦点而与可访问性焦点无关.我也尝试过:
myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
myButton.announceForAccessibility("accessibility test");
myButton.performAccessibilityAction(64, null); // Equivalent to ACTION_ACCESSIBILITY_FOCUS
AccessibilityManager manager = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
if (manager.isEnabled()) {
AccessibilityEvent e = AccessibilityEvent.obtain();
e.setSource(myButton);
e.setEventType(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
e.setClassName(getClass().getName());
e.setPackageName(getPackageName());
e.getText().add("another accessibility test");
manager.sendAccessibilityEvent(e);
}
Run Code Online (Sandbox Code Playgroud)
这似乎都不起作用.
想象一下,你有一个LinearLayout
里面RelativeLayout
包含3个TextViews
具有artist, song and album
:
<RelativeLayout
...
<LinearLayout
android:id="@id/text_view_container"
android:layout_width="warp_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@id/artist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Artist"/>
<TextView
android:id="@id/song"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Song"/>
<TextView
android:id="@id/album"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="album"/>
</LinearLayout>
<TextView
android:id="@id/unrelated_textview1/>
<TextView
android:id="@id/unrelated_textview2/>
...
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
当您激活TalkbackReader并单击其中的a TextView
时LinearLayout
,TalkbackReader将显示"艺术家","歌曲"或"专辑".
但是您可以TextViews
通过使用以下方法将前3个放入焦点组:
<LinearLayout
android:focusable="true
...
Run Code Online (Sandbox Code Playgroud)
现在,TalkbackReader将阅读"艺术家歌曲专辑".
2 unrelated TextViews
仍然是他们自己而不是阅读,这是我想要实现的行为.
(请参阅Google codelabs示例以供参考)
我现在正试图重新创建这种行为,ConstrainLayout
但没有看到如何.
<ConstraintLayout>
<TextView artist/>
<TextView song/>
<TextView album/>
<TextView unrelated_textview1/>
<TextView unrelated_textview2/>
</ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
将小部件放入"组"似乎不起作用:
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="wrap_content" …
Run Code Online (Sandbox Code Playgroud) 如何将 Jetpack Compose 上 TalkBack 上要读取的默认文本内容描述更改为我想要的任何文本?
android talkback android-jetpack-compose android-jetpack-compose-text
我找不到应该是一个非常简单的任务的答案.有人可以向我解释关闭android中单个元素的可访问性(对话)的最佳方法吗?
我有一个TextView,我以编程方式将contentDescription设置为nil,并且它保持对话说出标题,但是当浏览视图时它仍然停在该textview上......它只是保持沉默.
我的目标是让对话完全忽略TextView的存在.
请帮忙!
谢谢 :)
我正在开发一个可访问的Android应用程序,人们将使用Explore by Touch和TalkBack辅助功能服务来使用我的应用程序.
这是我的Android XML代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/forename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:layout_marginLeft="15dip"
android:textSize="20sp"
android:text="@string/forenameText"
android:contentDescription="@null"/>
<EditText
android:id="@+id/EditTextForename"
android:layout_width="285dp"
android:layout_height="65dp"
android:layout_marginTop="10dip"
android:layout_marginLeft="15dip"
android:hint="@string/forenameHint"
android:inputType="textPersonName"
android:lines="1"
android:singleLine="true"
android:textSize="20sp" >
</EditText>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
strings.xml中
<string name="forenameText">Forename</string>
<string name="forenameHint">Enter your forename here</string>
Run Code Online (Sandbox Code Playgroud)
TextView显示标题"Forename",EditText允许我在表单字段中输入一些细节.我遇到的问题是,当我通过触摸浏览将手指拖过屏幕时,TalkBack会选择TextView的标题并将其大声宣布为"Forename".我希望TextView只显示文本而不提供任何声音反馈.
我已经将contentDescription设置为@null,正如您从上面的代码中看到的那样,但当我的手指位于TextView上时,TalkBack仍会宣布"Forename".
我也尝试在我的Java类中设置contentDescription:
TextView forename=(TextView)findViewById(R.id.forename);
forename.setContentDescription("");
Run Code Online (Sandbox Code Playgroud)
但是,我仍然遇到同样的问题.有没有其他方法将contentDescription设置为null/empty并阻止TalkBack大声宣布它?
Java代码:
public class MainActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View forename = findViewById(R.id.forename);
forename.setAccessibilityDelegate(new AccessibilityDelegate() {
public boolean performAccessibilityAction (View host, int action, Bundle args){
return true; …
Run Code Online (Sandbox Code Playgroud) 我有一个有长按动作处理程序的视图.我使用内容描述来设置消息,当视图获得焦点时,Talkback会说话.
目前它在获得焦点后立即说出了我的内容描述,并在短暂停顿后说:
双击激活,双击并按住长按
我想将此消息更改为类似的内容
双击"动作1",双击并按住"动作2"
有办法吗?
我调查了onPopulateAccessibilityEvent()
,它得到了TYPE_VIEW_ACCESSIBILITY_FOCUSED
事件,但我无法更改所需的消息.
我错过了一些简单的事吗?
我的布局中有一个 ImageView,其内容描述=“关闭”。当 Talkback 打开时,它会显示“关闭按钮,不在列表中”。为什么 Talkback 还显示“不在列表中”?我该如何避免这种情况?PS布局中还有一个RecyclerView,也许它会产生某种影响。
我通过Android TalkBack检查了所有默认警报对话框.默认的Android Talkback行为是它在对话框中读取所有内容(不停止).有什么方法可以根据我的需要定制它.例如 :
AlertDialog alertDialog = new AlertDialog.Builder(AlertDialogActivity.this).create();
alertDialog.setTitle("Alert Dialog");
alertDialog.setMessage("This is my alert dialog");
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "You clicked on OK", Toast.LENGTH_SHORT).show();
}
});
alertDialog.show();
Run Code Online (Sandbox Code Playgroud)
当出现对话框时,它会自动读取"Alert Dialogue.这是我的提醒对话.确定." 但我想控制它,就像它应该只读"警报对话"或"这是我的警报对话"等.
点击"确定"时,它只读"OK",而不是"OK按钮".