Android - 如何将ID添加到工具栏后退按钮?

问题描述:

为了进行自动测试,我需要将ID添加到工具栏的BACK/MENU按钮视图。Android - 如何将ID添加到工具栏后退按钮?

我试图使用getChildAtsetId添加ID,但是当我检查视图层次结构时,ID仍未设置。 android.R.id.home菜单ID在我的情况下不起作用。我需要为视图设置的ID,当我使用布局检查器检查视图层次结构时。只有这样,id才能用于自动UI测试。

你能提出一种方法来做到这一点?

+0

我只是建议将有助于建立在XML文件中把'机器人内部绘制文件夹的XML文件:可绘制= “@绘制/ your_icon”'和'机器人:ID = “@ + ID/YOUR_ID”'然后使用'getSupportActionBar()。setHomeAsUpIndicator(R.drawable.your_xml_file);'会这样做吗? – Yupi

+1

你能告诉我们你是如何设置ID的吗?它按照我的预期工作。 –

我可以通过搜索将id添加到工具栏后退按钮并设置第一个找到的视图的ID。设置actionBar后执行此操作非常重要。

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(); 
} 

工具栏的BACK/MENU按钮早已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; 
} 
+0

我更新了我的问题。可能还不清楚。 –

+0

@MarioKutlev比创建自定义工具栏和设置自定义图像作为返回/菜单比您可以分配一个新的ID到该图像 –

在使用执行行动,在你的活动

的底部添加以下代码
@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; 
      } 
     }