android android-layout android-actionbar badge

Distintivo de notificación en el elemento de acción Android



android-layout android-actionbar (2)

Puede mostrar MenuItem personalizado en ActionBar creando un custom layout para MenuItem . Para establecer un diseño personalizado, debe usar la app:actionLayout atributos del elemento de menú app:actionLayout .

Siga los pasos a continuación para crear un ítem de acción Badge en el Cart . Ver la image adjunta para el resultado.

  1. Cree un diseño personalizado con ImageView (para el icono del carrito) y TextView (para el valor del recuento)

layout / custom_action_item_layout.xml:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout style="?attr/actionButtonStyle" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clipToPadding="false" android:focusable="true"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/ic_action_cart"/> <TextView android:id="@+id/cart_badge" android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="right|end|top" android:layout_marginEnd="-5dp" android:layout_marginRight="-5dp" android:layout_marginTop="3dp" android:background="@drawable/badge_background" android:gravity="center" android:padding="3dp" android:textColor="@android:color/white" android:text="0" android:textSize="10sp"/> </FrameLayout>

  1. Crea un fondo de badge circular badge usando Shape .

drawable / badge_background.xml:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@android:color/holo_red_dark"/> <stroke android:color="@android:color/white" android:width="1dp"/> </shape>

  1. Agregar custom layout a item menú.

menu / main_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_cart" android:icon="@drawable/ic_action_cart" android:title="Cart" app:actionLayout="@layout/custom_action_item_layout" app:showAsAction="always"/> </menu>

  1. En su actividad principal , agregue los siguientes códigos:

MainActivity.java:

public class MainActivity extends AppCompatActivity { ................ ...................... TextView textCartItemCount; int mCartItemCount = 10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ..................... ............................ } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.trash, menu); final MenuItem menuItem = menu.findItem(R.id.action_cart); View actionView = MenuItemCompat.getActionView(menuItem); textCartItemCount = (TextView) actionView.findViewById(R.id.cart_badge); setupBadge(); actionView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onOptionsItemSelected(menuItem); } }); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_cart: { // Do something return true; } } return super.onOptionsItemSelected(item); } private void setupBadge() { if (textCartItemCount != null) { if (mCartItemCount == 0) { if (textCartItemCount.getVisibility() != View.GONE) { textCartItemCount.setVisibility(View.GONE); } } else { textCartItemCount.setText(String.valueOf(Math.min(mCartItemCount, 99))); if (textCartItemCount.getVisibility() != View.VISIBLE) { textCartItemCount.setVisibility(View.VISIBLE); } } } } .................. .............................. }

SALIDA:

Quiero agregar una insignia de notificación en la imagen del carrito colocada en la barra de acción y manipularla programáticamente. ¿Alguna ayuda?


El truco más simple es dar estilo.

<TextView android:id="@+id/fabCounter" style="@style/Widget.Design.FloatingActionButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:layout_marginEnd="10dp" android:padding="5dp" android:text="10" android:textColor="@android:color/black" android:textSize="14sp" />