Android: إظهار عدد العناصر الجديدة الاعتماد على علامات التبويب
سؤال
لديّ تطبيق Android حيث تكون الشاشة الرئيسية طريقة عرض لتبويب. يذهب أحد علامة التبويب إلى نشاط "صندوق الوارد". أرغب في إظهار رقم يشير إلى عدد الرسائل الجديدة. يبدو أن هذه ميزة قياسية على تطبيقات iPhone. هل هناك أي نوع من دعم النظام لهذا؟ إذا لم يكن الأمر كذلك ، فما هي أسهل طريقة لتنفيذ هذا التأثير على Android TabViews؟
المحلول
من ما يمكنني قراءته في Android Sourcecode (tabhost.java) ، لا توجد طريقة للقيام بذلك باستخدام أجهزة واجهة مستخدم قياسية بطريقة مماثلة مثل iPhone.
ما يمكنك فعله هو:
- كلما تم تغيير عدد البريد الوارد ، احذف جميع علامات التبويب باستخدام http://developer.android.com/reference/android/widget/tabhost.html#clearalltabs()
- ثم ، قم بإنشاء علامات التبويب مرة أخرى باستخدام http://developer.android.com/reference/android/widget/tabhost.html#addtab(android.widget.tabhost.tabspec) ولكن تأكد من تهيئة tabSpec باستخدام [http://developer.android.com/reference/android/widget/tabhost.tabspec.html#setIndicator(java.lang.charevense ، android.graphics.drawable.drawable)]] [ 1]. يمكنك تمرير السحب الخاص بك هناك واستخدامه لرسم الشارة بنفسك.
إنه ليس بديلاً لشارة نمط iPhone ، لأن شارة iPhone رائعة تمامًا في زوايا العلامة. وحتى الآن لا توجد طريقة لتغييره.
من ناحية أخرى ، فإن هذا هو كل جافا يمكن لشخص ما تمديد فئة TabHost وإضافة دعم لشارات نمط iPhone.
[1]: http://developer.android.com/Reference/android/widget/tabhost.tabspec.html#setindicator(java.lang.charevense, ، Android.Graphics.drawable.drawable)
نصائح أخرى
هذا مثال على كيفية إضافة شارة في علامة التبويب
chat_tab.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dip"
android:layout_height="64dip"
android:layout_weight="1"
android:layout_marginLeft="-3dip"
android:layout_marginRight="-3dip"
android:orientation="vertical"
android:background="@drawable/tab_indicator" >
<ImageView
android:id="@+id/chat_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/chat_icon"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/new_notifications"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/chat_icon"
android:layout_toRightOf="@+id/chat_icon"
android:layout_marginLeft="-8dp"
android:layout_marginTop="0dp"
android:paddingTop="2dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingBottom="2dp"
android:textSize="8sp"
android:textStyle="bold"
android:textColor="@android:color/primary_text_dark"
android:background="@drawable/badge"
android:visibility="gone"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/chat"
style="@android:attr/tabWidgetStyle"
android:textColor="@android:color/tab_indicator_text"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
هذا هو شارة. xml (الدائرة الحمراء لإشعارات الخلفية) ، معرف TextView: خلفية New_Notifications
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<stroke android:width="2dp" android:color="#FFFFFF" />
<corners android:radius="10dp"/>
<padding android:left="2dp" />
<solid android:color="#ff2233"/>
</shape>
ثم في الكود يمكنك ببساطة القيام به
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View chatTab = inflater.inflate(R.layout.chat_tab, null);
tvNewNotifications = (TextView) chatTab.findViewById(R.id.new_notifications);
intent = new Intent().setClass(MainTab.this, Chat.class);
tabSpec = tabHost
.newTabSpec("chat")
.setIndicator(chatTab)
.setContent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
كما ترون أن التصميم النسبي الخاص بي يحتوي على خلفية @drawable/tab_indicator
ال Tab indicator.xml هو رسم الإطار المعياري القابل للعلامة ، التي حصلت عليها من SDK ، أقترح عليك أيضًا الحصول عليها من مجلد واجهة برمجة التطبيقات في SDK حيث تحتاج أيضًا إلى نسخ بعض الصور من المجلدات القابلة للسحب ، يمكنك العثور عليهاYour_sdk_drive: sdk platforms Android-8
يمكنك تنزيل ملف ViewBadger.jar من هنا ويمكنه استخدام هذا المثال للرجوع إليهhttps://github.com/jgilfelt/android-viewbadger
هنا رمز عينة
TabWidget Tabs = (tabWidget) findViewById (Android.r.id.tabs) ؛ BadgeView Badge = New BadgeView (Context ، Tabs ، 3) ؛ شارة. settextsize (12) ؛ badge.setBadGeposition (padgeview.position_top_right) ؛ Badge.settext ("0")) ؛ شارة. toggle () ؛
أفترض أن لديك قائمة بأشياءك. يمكنك إنشاء خاصية "قراءة" للكائن ، ثم حساب عدد الكائنات مع read = false
في لحظة فتح علامة التبويب.