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/andabspec.html# reference.tabspec.html#setindicator(java.lang.Charsistication, android.graphics.lawable.drawable)] [ 1]. Вы можете пройти свой собственный нанесение и использовать его, чтобы нарисовать значок самостоятельно.

Это не замена для значка стиля iPhone, хотя, поскольку значок iPhone довольно красиво в углах Topright лейбла. И пока нет способа изменить его.

С другой стороны, это все Java, кто-то может продлить класс Tabhost и добавить поддержку значков в стиле iPhone.

[1]: http://developer.android.com/reference/andoroid/widget/tabhost.tabspec.html#setindicator(java.lang.Charseque, 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>

Это badge.xml. (Красный круг для фона уведомлений), TextView ID: New_notifications Background

<?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 то Индикатор вкладки.xml. Стандартный стандарт рамки, нанесенный вкладки, которую я получил от SDK, я предлагаю также получить его из папки API в SDK, поскольку вам также нужно скопировать некоторые изображения из Drawbable папок, вы можете найти его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 = новый badgeview (контекст, вкладки, 3); badge.settextsize (12); badge.setbadgeposition (badgeview.position_top_right); badge.settext ("0")); badge.toggle ();

Я предполагаю, что у вас есть список ваших объектов. Вы можете создать свойство «читать» для объекта, а затем подсчитать количество объектов с read = false в момент открытия вкладки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top