Android - 如何为工具栏返回按钮添加id?

4
为了自动化测试目的,我需要给工具栏的“返回/菜单”按钮视图添加ID。我试过使用getChildAtsetId来添加ID,但是当我检查视图层次结构时,ID仍未设置。在我的情况下,android.R.id.home菜单ID不起作用。只有当我使用Layout Inspector检查视图层次结构时,才能使用ID进行自动化UI测试。 你可以提供一种方法来实现这个吗?

我只是建议在drawable文件夹中创建xml文件,其中包含android:drawable="@drawable/your_icon"android:id="@+id/your_id",然后使用getSupportActionBar().setHomeAsUpIndicator(R.drawable.your_xml_file);。这样做可以解决问题吗? - Yupi
1
你可以具体展示一下你是如何设置ID的吗?对我来说它的效果和预期一致。 - Mike M.
3个回答

8

工具栏的返回/菜单按钮已经有了id android.R.id.home,你可以使用这个id。

要执行相关操作,请使用以下代码:

 @Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == android.R.id.home) {
        Toast.makeText(context, "Backarrow pressed", Toast.LENGTH_SHORT).show();
        return true;
    }

    return false;
}

@MarioKutlev,您可以创建一个自定义工具栏并将自定义图像设置为“返回/菜单”,然后您可以为该图像分配新的ID。 - AskNilesh

4

我可以通过搜索AppCompatImageButton并设置第一个找到的视图的id来为工具栏返回按钮添加id。重要的是,在设置操作栏之后执行此操作。

private void addIdToBackButton() {
     for (int i = 0; i < toolbar.getChildCount(); i++) {
        View child = toolbar.getChildAt(i);
        if (child instanceof AppCompatImageButton) {
            child.setId(R.id.toolbar_back_button);
            return;
        }
     }
 }

private void setUpActionBar() {
    setSupportActionBar(toolbar);

    ActionBar actionBar = getSupportActionBar();
    actionBar.setTitle("Title");
    actionBar.setDisplayHomeAsUpEnabled(true);
    toolbar.setNavigationOnClickListener(__ -> onBackPressed());

    addIdToBackButton();
}

1
在您的活动底部添加以下代码。
@Override
    public void onBackPressed() {
        super.onBackPressed();
    }

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_menuname, menu);
        return true;
    }
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Ward/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
            switch (item.getItemId()) {
           case android.R.id.home:
                    finish();
                    return true;
            }
       }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接