¿Cómo puedo detectar un clic en el título de ActionBar?

Para requisitos específicos del cliente, necesito permitir que el usuario de mi aplicación (no se publique en Market) haga clic en el título de ActionBar para ejecutar algunas acciones.

He estado buscando en la fuente de Android, pero no soy capaz de encontrar una identificación para el título de ActionBar TextView.

¿Hay una forma adecuada de manejar estos clics?

El título es AFAIK que no se puede hacer clic. El icono / logotipo es clicable – lo obtendrá a través de android.R.id.home en onOptionsItemSelected() . Concebible, el título también las rutas de esta manera, aunque no lo mencionan y yo no confiar en ella.

Parece que quieres un Spinner para que el usuario elija las acciones a ejecutar. Si es así, use setListNavigationCallbacks() . Si desea eliminar el título como ahora superfluo, use setDisplayOptions(0, DISPLAY_SHOW_TITLE) .

Si desea algo distinto de un Spinner en el lado izquierdo de la barra de acción, use setDisplayOptions(DISPLAY_SHOW_CUSTOM, DISPLAY_SHOW_CUSTOM) y setCustomView() . Tenga en cuenta que este enfoque no se recomienda ( "Evitar utilizar los modos de navegación personalizados en la barra de acción" ), ya que puede no funcionar bien con los teléfonos, sobre todo en el modo retrato.

Otra posibilidad sería quitar el título y usar un logo en lugar del icono, y en el logo tener su "título" como parte de la imagen. El logotipo completo debe ser clicable, recogido a través de 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; } } 

Puede configurar una barra de herramientas personalizada de la Biblioteca de soporte declarando <android.support.v7.widget.Toolbar> en su diseño (consulte la respuesta de Chris Banes para ver el ejemplo completo de la barra de herramientas).

 <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> 

Después de que usted pueda agregar en el oyente del tecleo en su actividad apenas como a la mayoría de las otras vistas.

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

Si desea capturar eventos táctiles en el título:

 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; } }); 
  • ¿Cómo hacer textView envolver su contenido multilínea exactamente?
  • Quitar el prefijo de URL de String (http: /, www, etc.)
  • Cómo alinear TextView alrededor de un ImageView?
  • Cómo hacer que TextView se desplace en Android
  • Establecer el borde y el color de fondo de textView
  • Capitalizar la primera letra de TextView en un archivo xml de diseño de Android
  • Alternativa a ReplacementSpan en Android
  • ¿Cómo hacer que el texto brille?
  • TextView setScaleX () / setScaleY () y setTextIsSelectable (true) selección
  • Tamaño de fuente a grande para caber en caché para Emoji en Kitkat solamente
  • Para dibujar un subrayado debajo de TextView en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.