2010-12-03 43 views
5

我有一個android應用程序,其中主屏幕是一個選項卡視圖。其中一個標籤轉到「收件箱」活動。我想顯示一個數字,指出新消息的數量。這似乎是iPhone應用程序的標準功能。有沒有這種系統支持?如果不是,那麼爲android tabviews實現這種效果最簡單的方法是什麼?Android:顯示新標籤數量選項卡

+0

與iPhone標籤小部件上的BADGE圖標類似,對不對? – 2010-12-03 08:33:12

+0

是的,完全像iPhone上的BADGE圖標標籤部件=) – tstyle 2010-12-06 07:38:47

+0

您可以嘗試下面鏈接中介紹的方法。 http://npcom.posterous.com/iphone-like-tabview-badges-in-android – 2011-11-29 07:25:06

回答

4

從我可以在Android源代碼(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.CharSequence,android.graphics.drawable.Drawable)] [1]。您可以在那裏傳遞自己的繪圖並使用它自己繪製徽章。

雖然它不是iPhone風格徽章的替代品,因爲iPhone徽章在標籤的topRight角落相當不錯。到目前爲止,沒有辦法改變它。

另一方面,這是所有的Java人都可以擴展TabHost類並添加對iPhone風格徽章的支持。

[1]:http://developer.android.com/reference/android/widget/TabHost.TabSpec.html#setIndicator(java.lang.CharSequence,android.graphics.drawable.Drawable)

-2

我假設你有一個你的對象列表。您可以爲該對象創建一個「讀取」屬性,然後在打開選項卡的時刻對read = false的對象數進行計數。

0

這是一例如何在標籤

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標籤indicator.xml是標籤的框架標準繪製,這我從SDK獲得,我建議你也應該從SDK中的api文件夾中獲取它,因爲你還需要從可繪製文件夾複製一些圖像,你可以找到它 your_sdk_drive:\ sdk \ platforms \ android-8

0

您可以下載viewbadger。jar文件從這裏,可以使用本示例參考 https://github.com/jgilfelt/android-viewbadger

下面是一個示例代碼

TabWidget選項卡=(TabWidget)findViewById(android.R.id.tabs); BadgeView badge = new BadgeView(context,tabs,3); badge.setTextSize(12); badge.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); badge.setText(「0」)); badge.toggle();

相關問題