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/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
в момент открытия вкладки.