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

3 Solutions collect form web for “¿Cómo puedo detectar un clic en el título de ActionBar?”

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; } }); 
  • Vista de texto de Android sobre imagen con fondo transparente
  • android append '...' al final textview
  • Comportamiento impar: Tipo de clase del objeto devuelto por el método getText () de cambios TextView después de crear AccessibilityNodeInfo de TextView
  • Cómo dibujar correctamente texto en una clase extendida para TextView?
  • Restablecer TextView vaya a la parte superior
  • ¿Cómo solucionar este error en Android? Java.net.MalformedURLException: Protocolo no encontrado:
  • Problema al usar una fuente personalizada - "no se puede hacer el tipo de letra nativo"
  • ¿Cómo puedo alinear mi ImageView con mi TextView en LinearLayout?
  • ¿Cómo puedo interactuar con el diseño de Lockscreen para mostrar texto en él, como esta aplicación:
  • Expanda TextView con wrap_content hasta que la vista de vecino llegue al final del padre
  • Envolvente de texto de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.