为ActionBar的向上按钮设置contentDescription

时间:2013-05-21 10:50:40

标签: android android-actionbar actionbarsherlock accessibility

我试图自定义"导航"默认contentDescriptionActionBar的向上按钮相关联(我使用ActionBarSherlock)。

来自ActionBarView的来源:

public void setHomeButtonEnabled(boolean enable) {
    mHomeLayout.setEnabled(enable);
    mHomeLayout.setFocusable(enable);
    // Make sure the home button has an accurate content description for accessibility.
    if (!enable) {
        mHomeLayout.setContentDescription(null);
    } else if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
        mHomeLayout.setContentDescription(mContext.getResources().getText(
                R.string.abs__action_bar_up_description));
    } else {
        mHomeLayout.setContentDescription(mContext.getResources().getText(
                R.string.abs__action_bar_home_description));
    }
}

所以关键是如何获得对mHomeLayout的引用。 getWindow().getDecorView().findViewById(android.R.id.home)无效,因为它返回了ImageView。

我该怎么办?

谢谢;)

4 个答案:

答案 0 :(得分:7)

<强>布局

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/colorPrimary"
    android:elevation="4dp"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:layout_scrollFlags="scroll|enterAlways">

</android.support.v7.widget.Toolbar>

<强>码

public Toolbar toolbar;
...
setContentView(layout);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(layoutTitle);
setSupportActionBar(toolbar);
...
getSupportActionBar().setHomeActionContentDescription("Go Back To XYZ Screen");

答案 1 :(得分:4)

这是我如何在以前的项目中做你需要的:

((View) getWindow().getDecorView().findViewById(android.R.id.home).getParent().getParent()).setContentDescription("blablabla");

使用视图层次结构插件可以帮助我理解如何构建ActionBar布局。

答案 2 :(得分:1)

在xml中,使用“ navigationContentDescription”

<androidx.appcompat.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="?actionBarSize"
    android:layout_alignParentTop="true"
    app:navigationContentDescription="@string/back"/>

答案 3 :(得分:0)

如果有人需要为UIAutomator设置ActionBar的主页按钮的内容描述,请使用

((View) getWindow().getDecorView().findViewById(android.R.id.home).getParent()).setContentDescription("MANUALLYSET-home-up");

并使用

访问UIAutomatorTestCase中的视图
new UiObject(new UiSelector().description("MANUALLYSET-home-up").className("android.widget.FrameLayout"));

由于某种原因,额外的* .getParent()不起作用,而Android使用一些自动生成的内容描述值,这些内容可能在某些Android版本中有所不同(例如KITKAT上的“app_name,关闭导航抽屉”和在jELLYBEAN上“app_name,向上导航”。幸运的是,访问它的孩子也是有效的。

亲切的问候