Frage

ich eine Android-Anwendung, in dem Home-Bildschirm eine Tab-Ansicht ist. Einer der Reiter geht auf eine „Inbox“ Aktivität. Ich möchte eine Zahl zeigen, dass die Anzahl neuer Nachrichten anzeigt. Dies scheint ein Standard-Feature auf dem iPhone-Apps zu sein. Gibt es irgendeine Art von Systemunterstützung für das? Wenn nicht, was ist der einfachste Weg, um diesen Effekt zu implementieren für Android Registeransichten?

War es hilfreich?

Lösung

Von dem, was ich im Android Sourcecode (TabHost.java) lesen kann, gibt es keine Möglichkeit, es mit Standard-Widgets in ähnlicher Weise wie das iPhone zu tun.

Was Sie tun können ist:

  1. Wenn der Posteingang Zählung geändert wurde, löschen Sie alle Tabs http: / /developer.android.com/reference/android/widget/TabHost.html#clearAllTabs ()
  2. Erstellen Sie dann die Tabs wieder mit http://developer.android.com/reference/android/widget/TabHost.html#addTab (android.widget.TabHost.TabSpec ), aber stellen Sie sicher, dass der tabspec initialisiert mit [http: // developer. android.com/reference/android/widget/TabHost.TabSpec.html#setIndicator(java.lang.CharSequence, android.graphics.drawable.Drawable)] [1]. Sie können Ihre eigene ziehbar dort passieren und es verwenden, das malen Abzeichen selbst.

Es ist kein Ersatz für die iPhone Style-Abzeichen obwohl, wie das iPhone Abzeichen ganz schön in den topRight Ecken des Etiketts ist. Und bisher gibt es keine Möglichkeit, es zu ändern.

Auf der anderen Seite, wobei dies alle Java jemand die TabHost Klasse erweitern könnte und die Unterstützung für iPhone-Stil Abzeichen.

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

Andere Tipps

Dies ist ein Beispiel von Wie ein Abzeichen in Tab hinzufügen

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>

Dies ist badge.xml (roter Kreis für Benachrichtigungen Hintergrund), Textview-ID: new_notifications Hintergrund

<?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>

Dann im Code können Sie einfach tun

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));

Wie Sie mein Relative-Layout sehen kann, hat einen Hintergrund @drawable/tab_indicator die Tab indicator.xml ist die Standard-ziehbar der Registerkarte Rahmen, die ich aus dem sdk bekam, schlage ich vor, Sie es auch bekommen sollte aus der Ordner des api in sdk, wie Sie auch einige Bilder aus den ziehbar Ordner müssen kopieren, können Sie es finden your_sdk_drive: \ sdk \ Plattformen \ android-8

Sie können die viewbadger.jar Datei hier herunterladen und dieses Beispiel als Referenz verwenden können https://github.com/jgilfelt/android-viewbadger

Hier ist ein Beispielcode

TabWidget tabs = (TabWidget) findViewById (android.R.id.tabs); BadgeView Abzeichen = new BadgeView (context, Tabulatoren, 3); badge.setTextSize (12); badge.setBadgePosition (BadgeView.POSITION_TOP_RIGHT); badge.setText ( "0")); badge.toggle ();

Ich nehme an, Sie eine Liste Ihrer Objekte. Sie können eine Eigenschaft erstellen für das Objekt „lesen“, und dann die Anzahl der Objekte mit read = false zählen im Moment die Registerkarte öffnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top