如何检测ActionBar标题上的点击?

对于特定的客户需求,我需要允许我的应用程序的用户(不会在市场上发布)点击ActionBar标题来执行一些操作。

我一直在寻找Android源,但我无法find一个ID的ActionBar的TextView标题。

有没有适当的方法来处理这种点击?

Solutions Collecting From Web of "如何检测ActionBar标题上的点击?"

标题是不可点击的AFAIK。 图标/徽标是可点击的 – 您将通过onOptionsItemSelected() android.R.id.home获取该图标。 可以想象,这个标题也是这样的路线,尽pipe他们没有提到,我也不会依赖它。

这听起来像你想要一个Spinner让用户select要执行的动作。 如果是这样,请使用setListNavigationCallbacks() 。 如果您想删除标题,请使用setDisplayOptions(0, DISPLAY_SHOW_TITLE)

如果您想在操作栏左侧使用除Spinner其他内容,请使用setDisplayOptions(DISPLAY_SHOW_CUSTOM, DISPLAY_SHOW_CUSTOM)setCustomView() 。 请注意,不build议使用此方法( “避免在操作栏中使用自定义导航模式” ),因为这可能对手机无法正常工作,特别是在纵向模式下。

另一种可能性是删除标题并使用徽标代替图标,并在徽标中将“标题”作为图像的一部分。 整个标志应该是可点击的,通过onOptionsItemSelected()

//的onCreate

 ActionBar actionBar = getActionBar(); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowTitleEnabled(false); // View actionBarView = getLayoutInflater().inflate(R.layout.action_bar_custom_view, null); actionBar.setCustomView(actionBarView); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); //your logic for click listner setListenerForActionBarCustomView(actionBarView); private void setListenerForActionBarCustomView(View actionBarView) { ActionBarCustomViewOnClickListener actionBarCustomViewOnClickListener = new ActionBarCustomViewOnClickListener(); actionBarView.findViewById(R.id.text_view_title).setOnClickListener(actionBarCustomViewOnClickListener); } private class ActionBarCustomViewOnClickListener implements OnClickListener { public void onClick(View v) { switch(v.getId()) { case R.id.text_view_title: //finish(); break; } } 

您可以通过在布局中声明<android.support.v7.widget.Toolbar>来设置支持库中的自定义工具栏(有关完整的工具栏布局示例,请参阅Chris Banes的答案 )。

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- We use a Toolbar so that our drawer can be displayed in front of the action bar --> <android.support.v7.widget.Toolbar android:id="@+id/my_awesome_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/main_toolbar" android:minHeight="?attr/actionBarSize" /> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 

在您的活动中添加点击监听器之后,就像其他大多数视图一样。

 Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); toolbar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MyActivity.this, "Test", Toast.LENGTH_LONG).show(); } }); 

如果您想在标题上捕捉触摸事件:

 toolbar.setOnTouchListener(new View.OnTouchListener() { Rect hitrect = new Rect(); public boolean onTouch(View v, MotionEvent event) { if (MotionEvent.ACTION_DOWN == event.getAction()) { boolean hit = false; for (int i = toolbar.getChildCount() - 1; i != -1; i--) { View view = toolbar.getChildAt(i); if (view instanceof TextView) { view.getHitRect(hitrect); if (hitrect.contains((int)event.getX(), (int)event.getY())) { hit = true; break; } } } if (hit) { //Hit action } } return false; } });