如何为 Accessibilty/Talkback 的 SwitchPreference 提供 contentDescription?

How to give contentDescription to SwitchPreference for Accessibilty/Talkback?

我有一个包含多个 SwitchPreferences 的 Preference 屏幕。我需要为每个开关提供自定义 contentDescription 以实现可访问性。 没有 属性 作为 SwitchPreference 的 contentDescription。谁能帮助我如何为 Accessibilty/Talkback 的 switchPreferences 提供自定义描述?

首选项不是视图。您不能直接将 contentDescription 添加到首选项。您需要创建从 SwitchPreference 扩展的自定义首选项,并将辅助功能信息添加到 onBindViewHolder 中的切换视图。

public class SwitchPreferenceAccessibility extends SwitchPreference {

  @Override
  public void onBindViewHolder(PreferenceViewHolder holder) {
    super.onBindViewHolder(holder);
    
    View switchView = holder.findViewById(R.id.switchWidget);
    switchView.setContentDescription(getString(R.string.accessibility_information));
  }
}

或者你可以使用 declare-styleable 属性,这样会更方便。

public class SwitchPreferenceAccessibility extends SwitchPreference {

  public SwitchPreferenceAccessibility(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);

    mContentDescription = TypedArrayUtils.getText(a, R.styleable.SwitchPreferenceAccessibility_content_description, "");
  }

  @Override
  public void onBindViewHolder(PreferenceViewHolder holder) {
    super.onBindViewHolder(holder);
    
    View switchView = holder.findViewById(R.id.switchWidget);
    switchView.setContentDescription(mContentDescription);
  }
}
<SwitchPreferenceAccessibility
  app:key="key"
  app:title="title"
  app:content_description="@string/accessibility_information" />