I am developing an androi开发者_开发问答d app which has tabbar in it one tab is notification . I have to display the number of notifications that are pending to that user i want to display the number of pending request is to be displayed on the icon.
me having an activity of notification which shows number of notifications pending i need to put that count in tabbar.Icon of that tab is one square & i want to put digit to that square but i am not able to do that is there any notifiaction api which gives me that count also put in that any viewgroup.
thnx for any help...............
Another possibility, wich works for sure (I tried it):
use TabSpec.setIndicator(View)
. You can set whatever View
you like for the Tab-Header. This should allow you to style the header however you want.
Try this example code:
public class TabTest extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, MyActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost
.newTabSpec("artists").setIndicator(getLayoutInflater().inflate(R.layout.tablayout, null))
.setContent(intent);
tabHost.addTab(spec);
}
}
and create a layout called tablayout
. Put whathever you like in this layout (I took a clock for a quick demo). Also you have to create the MyActivity
containing something that should be displayed when your tab is shown.
Screenshot:
This is an example of How to add a badge in tab
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>
This is badge.xml (red circle for notifications background),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>
Then in the code you can simply do
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));
As you can see my Relative Layout has a background @drawable/tab_indicator
the tab indicator.xml is the framework's standard drawable of the tab,which i got from the sdk,i suggest you should also get it from the folder of the api in sdk as you also need to copy some images from the drawable folders,you can find it
your_sdk_drive:\sdk\platforms\android-8
How about overriding the dispatchDraw
method of the TabWidget? You can there use the drawing-api to draw the number onto the (already painted) tab-header.
精彩评论