标签: accessibility

如何拦截所有键盘事件并防止在WinForms应用程序中失去焦点?

我的一个朋友是盲人,我有一个想法是开发一个程序,让他在盲人打字方法和听力反馈的帮助下使用PC.如果我的应用程序可以在启动后立即强制完全控制整个键盘输入,那么体验会更加丰富(使用更多按键来执行特定功能)和完美无缺(如防止偶尔的焦点丢失)(我会把它放在一边)在他的启动).我是WinForms C#.Net开发人员,所以我想在使用这种特定框架和语言的应用程序中实现它(不过不介意包装WinAPI调用).

PS:我不介意系统保持对Ctrl + Ald + Del组合的控制,但我想控制所有其他键和组合,包括Windows徽标和标准应用程序启动器按钮.

.net c# keyboard accessibility winforms

12
推荐指数
2
解决办法
6998
查看次数

UITableView子类中的KVC导致崩溃并启用了辅助功能

我有一个自定义UITableView子类,我在其中重写+accessInstanceVariablesDirectly以返回NO以确保无法使用KVC设置没有setter的属性.

从视图层次结构中删除此表视图时,应用程序崩溃 - 有时 - 现在是奇怪的部分:仅当启用了辅助功能时!(即,可访问性检查器可见,或者您在物理设备上启用了辅助功能)

如果我不覆盖+accessInstanceVariablesDirectly,一切正常.我想可能UITableView依赖于直接访问一些实例变量 - 但是如果我可以通过使用它来破坏超类,那么这个方法有什么意义呢?有没有办法指定每个属性的这种行为,比如+automaticallyNotifiesObserversForKey:?但是,只有在启用"辅助功能"时才会出现此问题,我感到困惑.

我尝试用各种仪器分析项目,但没有成功.

你可以在这里找到一个复制问题的最小项目.我非常感谢有关为什么会发生这种情况或如何实现我想要的东西的任何指示.

accessibility objective-c key-value-coding uitableview ios

12
推荐指数
1
解决办法
244
查看次数

在Swift/Objective-C中监听window resize事件

是否可以迭代OSX中任何应用程序的所有打开窗口并在Swift中监听它们的resize事件?我想创建自定义窗口管理器,根据用户行为移动和调整事件大小 - 因此,如果用户调整窗口大小,其他窗口将自动重新排列.

我是Haskell,而不是Swift开发人员,因此我非常重视任何代码片段/示例,展示如何实现此效果.(事实上​​我将它用作一种Haskell - > Cocoa绑定.)

编辑: 我也非常有兴趣在Objective-C中找到解决方案,但Swift对我来说更重要.

macos cocoa accessibility objective-c swift

12
推荐指数
1
解决办法
4140
查看次数

使用AccessibilityService从(Facebook)RecyclerView中读取文本

如何查看非聚焦的RecyclerView子项(项目)的文本?

我的辅助功能服务应该从屏幕上读出包含关键字的文本.这在大多数情况下效果很好,除非我处理RecyclerViews,特别是那些在Facebook应用程序中的.

Facebook提要和评论屏幕都基于RecyclerView,似乎都不能让我从他们的辅助功能事件中访问我需要的文本.

我尝试过的:

public void onAccessibilityEvent(AccessibilityEvent event) {

    //I've tried looping through event.getText() and it does not contain the text entries

    //I've also tried the following (with various null checks)
    AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
    AccessibilityNodeInfoCompat source = record.getSource();
    List<AccessibilityNodeInfoCompat> nodes = source.findAccessibilityNodeInfosByText("...");
    //(and loop through the entries)

    //I've also tried limiting to the class name "android.support.v7.widget.RecyclerView"
    //and looking at parcelableData

    //In the facebook app, the following is always null too
    source.findFocus(AccessibilityNodeInfoCompat.FOCUS_ACCESSIBILITY);

}
Run Code Online (Sandbox Code Playgroud)

似乎没有地方包含我需要的数据.作为从帖子打开评论屏幕/叠加层的示例,我可以看到所有文本内容,除了评论本身(在回收者视图中)

我可以看到的事件详细信息的日志:

以下是我在帖子中看到的评论叠加在一个帖子上的评论

Event: EventType: TYPE_WINDOW_CONTENT_CHANGED; PackageName: …
Run Code Online (Sandbox Code Playgroud)

android facebook accessibility android-recyclerview android-accessibility

12
推荐指数
1
解决办法
730
查看次数

使屏幕阅读器可以访问步骤进度指示器

我经常需要使用步骤指示来显示用户所在的步骤,或者包裹在运输途中的进度等。

像这样: 在此处输入图片说明

这是由一个无序列表的 HTML 列表组成的。

        <ul class="progress-tracker progress-tracker--text progress-tracker--center">
          <li class="progress-step is-complete">
            <span class="progress-marker"></span>
            <span class="progress-text">
              <h4 class="progress-title">Step 1</h4>
              Summary text explaining this step to the user
            </span>
          </li>

          <li class="progress-step is-complete">
            <span class="progress-marker"></span>
            <span class="progress-text">
              <h4 class="progress-title">Step 2</h4>
              Summary text explaining this step to the user
            </span>
          </li>

          <li class="progress-step is-active">
            <span class="progress-marker"></span>
            <span class="progress-text">
              <h4 class="progress-title">Step 3</h4>
              Summary text explaining this step to the user
            </span>
          </li>

          <li class="progress-step">
            <span class="progress-marker"></span>
            <span class="progress-text">
              <h4 class="progress-title">Step 4</h4>
              Shorter summary …
Run Code Online (Sandbox Code Playgroud)

html accessibility

12
推荐指数
1
解决办法
4560
查看次数

React Native:iOS 中的accessibilityLiveRegion 等效项

我正在开发一个反应本机应用程序,我使用一些内联错误消息来归档 TextInput。如果验证失败,我将显示带有错误消息的文本组件。它工作正常。但我在 iOS 上遇到 VoiceOver 问题。错误消息是动态的,焦点不会切换到错误消息。在android中,我添加了accessibilityLiveRegion="assertive"将焦点切换回错误文本然后阅读的功能。下面是代码。

<Text style={ messageCellStyle } accessibilityLiveRegion="assertive">
            { StringUtils.process(message, props) }
 </Text>
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助使其在 iOS VoiceOver 中运行吗?我想在用户界面中显示错误消息时阅读它。

accessibility reactjs react-native

12
推荐指数
1
解决办法
1002
查看次数

像药丸/徽章这样的 HTML 元素是否需要额外的 Aria 角色?

我正在尝试为我的网页添加可访问性,但我不确定如何处理此徽章元素。它类似于您在在线购物车图标上看到的数字圆圈。(参见下面的示例图片)

我无法决定应该给它分配什么样的咏叹调角色。或者我是否需要特别为其指定一个咏叹调角色?很确定它不是“role=button”,因为这里没有点击事件。

在此输入图像描述

html accessibility wcag wai-aria wcag2.0

12
推荐指数
1
解决办法
3847
查看次数

Android - 防止TalkBack大声宣布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)

android accessibility textview talkback

11
推荐指数
3
解决办法
2万
查看次数

使用Chrome TTS的SSML

我试图通过指示强调等来更清楚地说明TTS句子.我正在使用Chrome TTS API,这表明除了原始文本之外它还接受SSML格式的文档.

经过多次尝试,并在网上阅读了一些评论,看起来实际上并不支持,或者这可能取决于个人的实施声音.

有人知道吗:

  • SSML在Chrome下被弃用了吗?
  • 如果没有,是否有任何迹象表明他们是否希望通过本地语音支持它,或者他们希望其他人能够实施?
  • 目前是否存在支持此功能的Chrome语音?

谢谢!

api accessibility google-chrome text-to-speech google-chrome-extension

11
推荐指数
1
解决办法
1434
查看次数

语义HTML5结构与CSS布局需求

我有一个类似下面的网页:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Title</title>
    </head>
    <body>
        <header>
            <span>Logo</span>
            <nav>Navigation</nav>
        </header>
        <main>
            <h1>Page heading</h1>
            <div>
                Page content
            </div>
        </main>
        <footer>
            Content information
        </footer>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

页面结构类似于当前HTML5草案中的一个示例:http://www.w3.org/html/wg/drafts/html/master/grouping-content.html#the-main-element,我认为它是语义正确.

现在我想使用CSS设置此文档的样式.我想成为顶部的页眉和底部的页脚,当然,这很容易实现.在标题内部,我想将徽标放在右侧,并在中心导航,这也没关系(例如,使用灵活的盒子布局模型,这是现代浏览器支持的一种或另一种方式,或者使用花车).

当我想将主要的内容标题(h1元素)放在标题的左侧时,我的问题就开始了.我可以使用position:absolute,但是这样的布局不是很灵活,并且只要标题或标题的大小发生变化就会中断.建议的CSS网格布局http://www.w3.org/TR/css3-grid-layout/可能能够完全符合我的要求,但据我所知,它仅在IE 10中得到支持(不知何故) .

一个简单而有效的解决方案是简单地重构我的页面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            <h1 id="heading">Page heading</h1>
            <header>
                <span>Logo</span>
                <nav>Navigation</nav>
            </header>
        </div>
        <main aria-labelledby="heading">
            <div>
                Page content
            </div>
        </main>
        <footer>
            Content information
        </footer>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

然而,这个解决方案虽然易于布局,但它的完整语义只能通过aria-*属性表达,并且似乎违背了HTML5语义的精神(特别是主要元素).

虽然我的示例页面可能很简单,但您可以轻松想象一个更复杂的页面,其中更多元素的视觉位置与HTML5标记的流顺序的顺序不同(并且嵌套以便灵活的框布局顺序属性赢得还不够.你会如何解决这个问题?用非语义元素(例如div)重写HTML5标记,使其更多地与视觉布局相对应,然后尽可能用新结构通过语义元素(例如页脚或主要元素)交换非语义元素?

css html5 accessibility semantic-markup wai-aria

11
推荐指数
1
解决办法
1498
查看次数