Lencana Pemberitahuan Pada Item Tindakan Android

Saya ingin menambahkan lencana notifikasi pada gambar keranjang yang ditempatkan di action bar dan memanipulasinya secara terprogram. Ada bantuan?

Larutan

Anda dapat menampilkan MenuItem kustom pada ActionBar dengan membuat tata letak kustom untuk MenuItem. Untuk mengatur tata letak kustom Anda harus menggunakan atribut item menu app:actionLayout.

Ikuti langkah-langkah di bawah ini untuk membuat Badge pada item tindakan Cart. Lihat gambar terlampir untuk hasilnya.

  1. Buat tata letak khusus dengan ImageView (untuk ikon keranjang) dan TextView (untuk nilai hitungan)

layout/custom_action_item_layout.xml:

<?xml version="1.0" encoding="utf-8"?>






  1. Buat latar belakang lencana melingkar yang dapat digambar menggunakan Shape.

drawable/badge_background.xml:

<?xml version="1.0" encoding="utf-8"?>





  1. Tambahkan tata letak khusus ke menu item.

menu/main_menu.xml





  1. Di MainActivity Anda, tambahkan kode-kode berikut:

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.main_menu, 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);
                }
            }
        }
    }

    ..................
    ..............................

}

OUTPUT:

Komentar (17)

Mungkin ini akan menjadi [solusi] yang lebih cepat dan mudah1. Sebagai contoh xml:

Atau secara terprogram:

imageBadgeView.setBadgeValue(27)
            .setBadgeOvalAfterFirst(true)
            .setBadgeTextSize(16)
            .setMaxBadgeValue(999)
            .setBadgeTextFont(typeface)
            .setBadgeBackground(getResources().getDrawable(R.drawable.rectangle_rounded))
            .setBadgePosition(BadgePosition.BOTTOM_RIGHT)
            .setBadgeTextStyle(Typeface.NORMAL)
            .setShowCounter(true)
            .setBadgePadding(4);

Saya harap ini membantu.

Komentar (3)

Peretasan paling sederhana dengan memberikan gaya.

Komentar (4)