Jadikan lencana Anda a TextView
, sehingga Anda dapat menyetel nilai numerik ke apa pun yang Anda suka dengan menelepon setText()
. Setel latar belakang TextView
sebagai XML <shape>
drawable, yang dengannya Anda dapat membuat lingkaran padat atau gradien dengan batas. Drawable XML akan diskalakan agar sesuai dengan tampilan saat diubah ukurannya dengan lebih banyak atau lebih sedikit teks.
res / drawable / badge_circle.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="#F00" />
<stroke
android:width="2dip"
android:color="#FFF" />
<padding
android:left="5dip"
android:right="5dip"
android:top="5dip"
android:bottom="5dip" />
</shape>
Anda harus melihat bagaimana oval / lingkaran berskala dengan angka 3-4 digit yang besar. Jika efek ini tidak diinginkan, coba pendekatan persegi panjang bulat seperti di bawah ini. Dengan angka-angka kecil, persegi panjang masih akan terlihat seperti lingkaran karena jari-jarinya bertemu.
res / drawable / badge_circle.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="10dip"/>
<solid
android:color="#F00" />
<stroke
android:width="2dip"
android:color="#FFF" />
<padding
android:left="5dip"
android:right="5dip"
android:top="5dip"
android:bottom="5dip" />
</shape>
Dengan latar belakang skalabel yang dibuat, Anda cukup menambahkannya ke latar belakang a TextView
, seperti:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10"
android:textColor="#FFF"
android:textSize="16sp"
android:textStyle="bold"
android:background="@drawable/badge_circle"/>
Terakhir, TextView
lencana ini dapat ditempatkan dalam tata letak Anda di atas tombol / tab yang sesuai. Saya mungkin akan melakukan ini dengan mengelompokkan setiap tombol dengan lencananya dalam sebuah RelativeLayout
wadah, seperti:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/myButton"
android:layout_width="65dip"
android:layout_height="65dip"/>
<TextView
android:id="@+id/textOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/myButton"
android:layout_alignRight="@id/myButton"
android:text="10"
android:textColor="#FFF"
android:textSize="16sp"
android:textStyle="bold"
android:background="@drawable/badge_circle"/>
</RelativeLayout>
Mudah-mudahan informasi itu cukup untuk setidaknya mengarahkan Anda ke arah yang benar!
oval
versi dari contoh dan tambahkan<size>
elemen untuk memberikan proporsi untuk lebar / tinggiAndroid ViewBadger
Cara sederhana untuk "memberi lencana" pada tampilan Android tertentu saat waktu proses tanpa harus memenuhinya dalam tata letak.
Tambahkan
.jar
file di folder libs AndaKlik untuk mengunduh Contoh
lihat Contoh di github
Contoh sederhana:
View target = findViewById(R.id.target_view); BadgeView badge = new BadgeView(this, target); badge.setText("1"); badge.show();
sumber
Retas paling sederhana dengan memberi gaya
TextView
hanya.<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" />
sumber
Hanya untuk menambahkan. Jika seseorang ingin menerapkan gelembung lingkaran berisi menggunakan bentuk cincin, bukan oval, berikut adalah contoh kode untuk menambahkan hitungan gelembung ke tombol bilah tindakan. Tetapi ini dapat ditambahkan ke tombol apa pun.
(beri nama
bage_circle.xml
):<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:useLevel="false" android:thickness="9dp" android:innerRadius="0dp" > <solid android:color="#F00" /> <stroke android:width="1dip" android:color="#FFF" /> <padding android:top="2dp" android:bottom="2dp"/> </shape>
Anda mungkin harus menyesuaikan ketebalan sesuai kebutuhan Anda.
Hasilnya akan seperti ini:
Berikut tata letak tombol (beri nama
badge_layout.xml
):<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <com.joanzapata.iconify.widget.IconButton android:layout_width="44dp" android:layout_height="44dp" android:textSize="24sp" android:textColor="@color/white" android:background="@drawable/action_bar_icon_bg" android:id="@+id/badge_icon_button"/> <TextView android:id="@+id/badge_textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/badge_icon_button" android:layout_alignRight="@id/badge_icon_button" android:layout_alignEnd="@id/badge_icon_button" android:text="10" android:paddingEnd="8dp" android:paddingRight="8dp" android:paddingLeft="8dp" android:gravity="center" android:textColor="#FFF" android:textSize="11sp" android:background="@drawable/badge_circle"/> </RelativeLayout>
Dalam Menu buat item:
<item android:id="@+id/menu_messages" android:showAsAction="always" android:actionLayout="@layout/badge_layout"/>
Untuk
onCreateOptionsMenu
referensi ke item Menu:itemMessages = menu.findItem(R.id.menu_messages); badgeLayout = (RelativeLayout) itemMessages.getActionView(); itemMessagesBadgeTextView = (TextView) badgeLayout.findViewById(R.id.badge_textView); itemMessagesBadgeTextView.setVisibility(View.GONE); // initially hidden iconButtonMessages = (IconButton) badgeLayout.findViewById(R.id.badge_icon_button); iconButtonMessages.setText("{fa-envelope}"); iconButtonMessages.setTextColor(getResources().getColor(R.color.action_bar_icon_color_disabled)); iconButtonMessages.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (HJSession.getSession().getSessionId() != null) { Intent intent = new Intent(getThis(), HJActivityMessagesContexts.class); startActivityForResult(intent, HJRequestCodes.kHJRequestCodeActivityMessages.ordinal()); } else { showLoginActivity(); } } });
Setelah menerima pemberitahuan untuk pesan, setel hitungannya:
itemMessagesBadgeTextView.setText("" + count); itemMessagesBadgeTextView.setVisibility(View.VISIBLE); iconButtonMessages.setTextColor(getResources().getColor(R.color.white));
Kode ini menggunakan Iconify-fontawesome .
compile 'com.joanzapata.iconify:android-iconify-fontawesome:2.1.+'
sumber
untuk orang-orang yang mencari Xamarin Android Bisa Menggunakan Kode Ini
public class CountDrawable : Drawable { private float mTextSize; private Paint mBadgePaint; private Paint mTextPaint; private Rect mTxtRect = new Rect(); private String mCount = ""; private bool mWillDraw = false; public CountDrawable(Context context) { float mTextSize = context.Resources.GetDimension(Resource.Dimension.badge_count_textsize); mBadgePaint = new Paint(); // mBadgePaint.SetCol(ContextCompat.GetColor(context.ApplicationContext, Resource.Color.background_color)); mBadgePaint.Color = new Color(Color.Red); mBadgePaint.AntiAlias = true; mBadgePaint.SetStyle(Paint.Style.Fill); mTextPaint = new Paint(); mTextPaint.Color = new Color(Color.White); mTextPaint.SetTypeface(Typeface.DefaultBold); mTextPaint.TextSize = mTextSize; mTextPaint.AntiAlias = true; mTextPaint.TextAlign = Paint.Align.Center; } public override void Draw(Canvas canvas) { if(!mWillDraw) { return; } Rect bounds = GetBounds; float width = bounds.Right - bounds.Left; float height = bounds.Bottom - bounds.Top; float radius = ((Math.Max(width, height) / 2)) / 2; float centerX = (width - radius - 1) + 5; float centerY = radius - 5; if (mCount.Length <= 2) { // Draw badge circle. canvas.DrawCircle(centerX, centerY, (int)(radius + 5.5), mBadgePaint); } else { canvas.DrawCircle(centerX, centerY, (int)(radius + 6.5), mBadgePaint); } mTextPaint.GetTextBounds(mCount, 0, mCount.Length, mTxtRect); float textHeight = mTxtRect.Bottom - mTxtRect.Top; float textY = centerY + (textHeight / 2f); if (mCount.Length > 2) canvas.DrawText("99+", centerX, textY, mTextPaint); else canvas.DrawText(mCount, centerX, textY, mTextPaint); } public Rect GetBounds { get; set; } public void setCount(String count) { mCount = count; // Only draw a badge if there are notifications. // mWillDraw = !count.equalsIgnoreCase("0"); mWillDraw = !string.Equals(count, "0", StringComparison.OrdinalIgnoreCase); // invalidateSelf(); } public override void SetAlpha(int alpha) { } public override void SetColorFilter(ColorFilter colorFilter) { } public override int Opacity { get; } }
Dan di MainActivity
public override bool OnCreateOptionsMenu(IMenu menu) { // return base.OnCreateOptionsMenu(menu); MenuInflater.Inflate(Resource.Menu.actionmenu, menu); // var dd = menu.FindItem(Resource.Id.icon_group); IMenuItem item = menu.FindItem(Resource.Id.ic_group); LayerDrawable icon = item.Icon as LayerDrawable; // LayerDrawable icon = (LayerDrawable)item.Icon; CountDrawable badge; Drawable reuse = icon.FindDrawableByLayerId(Resource.Id.ic_group_count); if (reuse != null && reuse is CountDrawable) { badge = (CountDrawable)reuse; } else { badge = new CountDrawable(this); } badge.setCount("8"); badge.GetBounds=icon.Bounds; icon.Mutate(); icon.SetDrawableByLayerId(Resource.Id.ic_group_count, badge); return true; }
sumber