Android: إظهار عدد العناصر الجديدة الاعتماد على علامات التبويب

StackOverflow https://stackoverflow.com/questions/4343418

  •  30-09-2019
  •  | 
  •  

سؤال

لديّ تطبيق Android حيث تكون الشاشة الرئيسية طريقة عرض لتبويب. يذهب أحد علامة التبويب إلى نشاط "صندوق الوارد". أرغب في إظهار رقم يشير إلى عدد الرسائل الجديدة. يبدو أن هذه ميزة قياسية على تطبيقات iPhone. هل هناك أي نوع من دعم النظام لهذا؟ إذا لم يكن الأمر كذلك ، فما هي أسهل طريقة لتنفيذ هذا التأثير على Android TabViews؟

هل كانت مفيدة؟

المحلول

من ما يمكنني قراءته في Android Sourcecode (tabhost.java) ، لا توجد طريقة للقيام بذلك باستخدام أجهزة واجهة مستخدم قياسية بطريقة مماثلة مثل iPhone.

ما يمكنك فعله هو:

  1. كلما تم تغيير عدد البريد الوارد ، احذف جميع علامات التبويب باستخدام http://developer.android.com/reference/android/widget/tabhost.html#clearalltabs()
  2. ثم ، قم بإنشاء علامات التبويب مرة أخرى باستخدام 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 في لحظة فتح علامة التبويب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top