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.
- Cómo desmarcar un elemento en gridview en segundo clic en android?
- ¿Cómo cambiar la imagen del botón de encendido a apagado y viceversa al hacer clic?
- SetOnItemClickListener VS setOnItemSelectedListener en ListView.
- Botón de imagen de Android Haga clic en no funciona en algunos teléfonos (Moto g2, Galaxy s2)
- No se puede iniciar la actividad, setOnClickListener
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.
- OnCheckedChangeListener o OnClickListener con la sentencia if para CheckBox? ¿Cual es mejor?
- Diferente método para establecer OnClickListener de un botón en Android
- Ajuste del valor de la variable global en el botón
- Onclick evento en textview (que tiene TextIsSelectable = "true") es ony llamado en segundo clic
- Cómo implementar OnClickListener en Android
- Capturar LinearLayout eventos onClick con ImageButton dentro de él
- EditText campo es necesario antes de pasar a otra actividad
- Firebase UI RecyclerView onClick
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
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);
- ¿Cuál es el tamaño óptimo para una aplicación para Android?
- LocationServices.SettingsApi Restablecer SETTINGS_CHANGE_UNAVAILABLE flag