我有一个使用Substance LookAndFeel和Windows作为目标平台的Java应用程序,我想在不更改系统设置的情况下增加应用程序的DPI 设置.
我想这样做是因为我不想强迫用户重新启动Windows,因为很多Windows应用程序似乎都有很高的DPI设置问题(> 120)
PS:我知道Substance LaF允许在运行时缩放字体大小,但这样只调整控件的高度,而不是宽度.我希望我的GUI完全缩放,如果我设置系统的DPI设置会发生.
在Android 4.0+中,有一个选项设置 - >辅助功能 - >转动所有声音.如果我检查该选项,Android设备上运行的任何应用程序都不会产生任何声音.我的应用程序必须发出警报声,所以如果有人检查了该选项,该应用程序不会发出任何声音.因此,每次用户启动应用程序时,我都必须自动取消选中该选项.通过代码,我该怎么做?
如果有人可以共享一段代码,将会很有帮助.我尝试过AudioManager,但只有在启用了移动音频的情况下才有效.
amanger.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
amanger.setStreamMute(AudioManager.STREAM_MUSIC, false);
amanger.setStreamVolume(AudioManager.STREAM_MUSIC,
(int)(amanger.getStreamMaxVolume(AudioManager.STREAM_MUSIC)*(75.0/100.0)), 0);
Run Code Online (Sandbox Code Playgroud) 我想在视觉<h1>上对常规网站访问者隐藏页面上的元素;但是,我意识到该元素对于使用屏幕阅读器的用户很重要。所以我需要以屏幕阅读器仍然可以访问它的方式在视觉上隐藏元素。
似乎有很多技术可以使用。例如,使用文本缩进将文本移出屏幕。在其他情况下,一些使用样式,将高度和宽度设置为 1px,然后隐藏溢出。
虽然从可访问性的角度来看这些应该有效,但我担心这些技术可能会被搜索引擎视为“伪装”,从而导致网站受到惩罚。
解决这个问题的最佳方法是什么?这甚至可能吗?
当我通过 W3C 检查器构建一个网站时,它要求我考虑仅使用 h1 作为顶级标题,并指出我在某个部分内有 h1 的部分。它还提到,屏幕阅读器会将它们全部视为顶级元素,但是,根据 HTML5 规范,部分会有效地“重置”标题,以便您可以在其中启动另一个从 1 到 6 的层次结构。
如果我们试图专注于 W3C 验证和可访问性,我是否应该只在部分中使用 h2-h6?或者这个警告不正确?
我有一个简单的 UIView 层次结构。有一个包含视图 B 和 C 的父视图 A。如果我将所有视图设置为可访问性元素,则只有视图 A 可访问。视图 B 和 C 不可点击。我需要所有视图(A、B 和 C)都是可访问性元素。
我知道您可以通过将所有视图(A、B 和 C)置于同一级别来实现这一点,但我的应用程序中的视图层次结构不允许任何更改。
你有什么解决办法吗?
我正在尝试操作 macOS 的窗口。我找到了以下网址:
这些链接允许通过 macOS 的辅助功能 API 访问应用程序的各种窗口;更具体地说,他们使用该AXUIElementRef元素来重新定位窗口。
在为 macOS 创建应用程序时,我成功使用了以下代码...
@implementation CustomWindow
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation
{
self = [super initWithContentRect:contentRect styleMask:windowStyle backing:bufferingType defer:deferCreation];
if(self)
{
[self setLevel:kCGDesktopWindowLevel - 1];
[self setCollectionBehavior:
(NSWindowCollectionBehaviorCanJoinAllSpaces |
NSWindowCollectionBehaviorStationary |
NSWindowCollectionBehaviorIgnoresCycle)];
}
return …Run Code Online (Sandbox Code Playgroud) 在 macOS 10.15 Catalina 中,安全系统首选项中有一个名为Input Monitoring的新部分。
它说:
即使在使用其他应用程序时,也允许以下应用程序监控来自键盘的输入。
我想知道这背后是哪个 API 将应用程序引入本节。
我知道AXIsProcessTrustedWithOptions(),它向输入监控上方的辅助功能部分添加了一个应用程序。然后我可以用来观看来自其他应用程序的按键。但是输入监控有什么用呢?NSEvent.addGlobalMonitorForEvents(matching: .keyDown, handler: self.keyDown(event:))
看起来手动将应用程序添加到输入监控不允许您使用NSEvent.addGlobalMonitorForEvents(...).
像 Steam 这样的应用程序在更新到 Catalina 后已被放入该部分,所以必须有一些东西告诉系统将它们放在那里......
目标是在浏览器选项卡中显示正常文本,同时提供不可见的替代文本,帮助屏幕阅读器获得更好的发音。
例如,地理信息系统的首字母缩写词被 NVDA 屏幕阅读器发音为“GIs”(如士兵),而不是传统的“GI S”。
在下面的实验中,NVDA 没有看到任何替代方案。可以做到吗?
谢谢!
<!doctype html>
<html lang="en" dir="ltr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title aria-label="G I S aria" title="G I S title" alt="G I S alt">GIS</title>
</head>
<body>doc</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我创建了一个与键盘导航配合良好的复合小部件网格。我遇到的一个问题是,当当前焦点元素所在的网格中的某一行时,焦点将返回到该<body>元素。我希望能够将焦点拯救到最接近的有意义的交互元素(在上面或下面的行中)。
我的问题是:
\n当当前聚焦的元素从 DOM 中删除时,如何将焦点设置到最近的交互元素(仍在 dom 中)?
\n我尝试将焦点/模糊事件与 setTimeout 结合使用来获取正确的信号,但没有得到任何结果。
\n还尝试在当前聚焦的元素上使用 MutationObserver,这有效,但我遇到了问题,因为网格实际上是滚动的,因此由于行被虚拟滚动器回收,当前聚焦的元素可能会从 DOM 中删除,在这种情况下我不想救援焦点(这会导致网格不断向上滚动到新的“救援”焦点,并且您永远无法到达底部)
\nconst grid = document.querySelector(\'.grid\');\n\n// Remove all buttons/links from the natural tab order\ngrid\n .querySelectorAll(\'a:not([tabindex="0"]), button:not([tabindex="0"])\')\n .forEach(el => el.setAttribute(\'tabindex\', \'-1\'));\n\ngrid.addEventListener(\'keydown\', (e) => {\n // Prevent scrolling\n if (e.key === \'ArrowUp\' || e.key === \'ArrowDown\') {\n e.preventDefault();\n }\n if (e.key === \'ArrowUp\') moveFocus(grid, \'up\');\n if (e.key === \'ArrowDown\') moveFocus(grid, \'down\');\n if (e.key === \'ArrowLeft\') moveFocus(grid, \'left\');\n if (e.key …Run Code Online (Sandbox Code Playgroud)我已启用可访问性服务权限,现在我想从地址栏中获取 url。
我试过下面的事情:
Accessibility_service_config.xml
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackAllMask"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_service_description"
android:notificationTimeout="0"
android:canRequestFilterKeyEvents="true"
android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity" />
Run Code Online (Sandbox Code Playgroud)
访问服务.java
public class AccessService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo source = event.getSource();
if (source == null)
return;
final String packageName = String.valueOf(source.getPackageName());
String BROWSER_LIST = "com.android.chrome";
List<String> browserList
= Arrays.asList(BROWSER_LIST.split(",\\s*"));
if (event.getEventType()
== AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
if (!browserList.contains(packageName)) {
return;
}
}
if (browserList.contains(packageName)) {
try {
if (AccessibilityEvent
.eventTypeToString(event.getEventType())
.contains("WINDOW")) {
AccessibilityNodeInfo nodeInfo = event.getSource();
getUrlsFromViews(nodeInfo);
}
} catch (StackOverflowError …Run Code Online (Sandbox Code Playgroud) android accessibility accessibilityservice android-accessibility