Cómo obtener el evento onClickListener () en la barra de acciones personalizada

Estoy desarrollando una aplicación en la que tengo que obtener un evento onClick() al hacer clic en la vista personalizada de la barra de acciones. Hasta ahora soy capaz de lograr el siguiente diseño.

Barra de Acción personalizada

Aquí está mi código para lograr esto:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); getActionBar().setCustomView(R.layout.custom_image_button); getActionBar().setDisplayOptions( ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Toast.makeText(getApplicationContext(), "Clicked on ActionBar", Toast.LENGTH_SHORT).show(); default: return super.onOptionsItemSelected(item); } } 

Aquí está mi diseño de custom_image_button:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/custom_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <FrameLayout android:id="@+id/frame_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" > <TextView android:id="@+id/points" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginRight="10dp" android:layout_marginTop="5dp" android:background="@drawable/points_yellow" android:gravity="center" android:paddingLeft="20dp" android:textColor="#887141" android:textIsSelectable="false" android:textSize="22sp" android:textStyle="bold" > </TextView> <ImageView android:id="@+id/badge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|right" android:layout_marginRight="5dp" android:layout_marginTop="0dp" android:src="@drawable/badge_notification" > </ImageView> </FrameLayout> </RelativeLayout> 

Yo estaba tratando de tener un oyente de clic en el diseño personalizado. Para eso he probado el siguiente código:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); getActionBar().setCustomView(R.layout.custom_image_button); getActionBar().setDisplayOptions( ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM); final LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.custom_image_button, null); frameLayout = (FrameLayout) v.findViewById(R.id.frame_layout); frameLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Toast.makeText(getApplicationContext(), "Clicked on 1", Toast.LENGTH_SHORT).show(); return false; } }); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Toast.makeText(getApplicationContext(), "Clicked on ActionBar", Toast.LENGTH_SHORT).show(); default: return super.onOptionsItemSelected(item); } } 

}

Pero, no puedo obtener el evento onClick() en la imagen personalizada. Lo que estoy haciendo mal aquí, por favor guía.

Cualquier tipo de ayuda será apreciada.

Después en Inflater su justo como vista en archivo de disposición

Así que tienes que añadir android:onClick="clickEvent" en ActionBar archivo de diseño personalizado

Introduzca aquí la descripción de la imagen

Aquí está la demostración:

Mi actividad principal

 package com.example.testdemo; import android.annotation.SuppressLint; import android.app.ActionBar; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.Toast; public class MainActivity extends Activity { private View viewList; private Dialog dialogMarketList; String a[] = { "a", "aa" }; private View header; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getActionBar(); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayUseLogoEnabled(false); actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setDisplayShowCustomEnabled(true); View cView = getLayoutInflater().inflate(R.layout.header, null); actionBar.setCustomView(cView); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void clickEvent(View v) { if (v.getId() == R.id.button1) { Toast.makeText(MainActivity.this, "you click on button1", Toast.LENGTH_SHORT).show(); } if (v.getId() == R.id.button2) { Toast.makeText(MainActivity.this, "you click on button2", Toast.LENGTH_SHORT).show(); } if (v.getId() == R.id.textView1) { Toast.makeText(MainActivity.this, "you click on textView1", Toast.LENGTH_SHORT).show(); } } } 

Mi layout header.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="horizontal" android:weightSum="3" > <Button android:id="@+id/button1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="clickEvent" android:text="Button 1" /> <TextView android:id="@+id/textView1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="clickEvent" android:gravity="center" android:textColor="#FFFFFF" android:text="My action bar" android:textAppearance="?android:attr/textAppearanceLarge" /> <Button android:id="@+id/button2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="clickEvent" android:text="Button 2" /> </LinearLayout> 
  View cView = getLayoutInflater().inflate(R.layout.header, null); cView.findViewById(R.id.btn_id).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Do stuff here. } }); actionBar.setCustomView(cView); 
  • Necesita hacer doble clic en EditText para que el oyente de clics responda
  • Agregar un oyente a un botón dentro de un alerta de alerta personalizado bloquea mi aplicación
  • Android - Gridview con Custom BaseAdapter, crear onclicklistener
  • ¿Cómo desactivan otros botones cuando presiono el botón?
  • ¿Cómo evitar múltiples botones al mismo tiempo en android?
  • Haga clic en el elemento de lista de un ListView no responde
  • Botón de forma personalizada de Android
  • ¿Por qué OnClickListener en un ViewHolder no funciona?
  • Cómo poner un oyente onclick dentro de un servicio
  • DialogInterface vs Ver OnClickListeners
  • Desactivación de onClickListener para Google Maps
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.