Pregunta

Tengo una aplicación Android en la pantalla de inicio es una vista de la ficha. Una de la pestaña va a una actividad "Bandeja de entrada". Me gustaría mostrar un número que indica el nuevo número de mensajes. Esta parece ser una característica estándar en las aplicaciones del iPhone. ¿Hay algún tipo de sistema de apoyo para esto? Si no es así, ¿cuál es la forma más fácil de poner en práctica este efecto para android tabviews?

¿Fue útil?

Solución

Por lo que puedo leer en el código fuente de Android (TabHost.java) no hay manera de hacerlo con widgets estándar de una forma similar como el iPhone.

Lo que podría hacer es:

  1. Siempre que el recuento de la bandeja de entrada fue cambiado, elimine todas las fichas utilizando http: / /developer.android.com/reference/android/widget/TabHost.html#clearAllTabs ()
  2. A continuación, crear las pestañas utilizando de nuevo http://developer.android.com/reference/android/widget/TabHost.html#addTab (android.widget.TabHost.TabSpec ), pero asegúrese de que el TabSpec se inicia con [http: // desarrollador. android.com/reference/android/widget/TabHost.TabSpec.html#setIndicator(java.lang.CharSequence, android.graphics.drawable.Drawable)] [1]. puede pasar su propia dibujable allí y utilizarlo para pintar el badge mismo.

No es un sustituto de la insignia de estilo iPhone, sin embargo, como la insignia iPhone es bastante bien en las esquinas superior derecho de la etiqueta. Y hasta ahora no hay manera de cambiarlo.

Por otra parte, esta siendo todo alguien Java podría extender la clase TabHost y agregar soporte para tarjetas de estilo iPhone.

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

Otros consejos

Este es un ejemplo de ¿Cómo agregar una tarjeta de identificación en la pestaña

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>

Este es badge.xml (círculo rojo para las notificaciones de fondo), TextView id: new_notifications fondo

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

A continuación, en el código se puede hacer simplemente

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

Como se puede ver a mi disposición relativa tiene un fondo @drawable/tab_indicator la indicator.xml es estirable estándar del marco de la pestaña, que me dieron desde el SDK, le sugiero que también debe obtener de la carpeta de la API de SDK como también hay que copiar algunas imágenes de las carpetas dibujable, se puede encontrar your_sdk_drive: \ SDK \ plataformas \ android-8

Puede descargar el archivo viewbadger.jar de aquí y puede utilizar este ejemplo para referencia https://github.com/jgilfelt/android-viewbadger

Aquí hay un código de ejemplo

TabWidget pestañas = (TabWidget) findViewById (android.R.id.tabs); BadgeView insignia = new BadgeView (contexto, pestañas, 3); badge.setTextSize (12); badge.setBadgePosition (BadgeView.POSITION_TOP_RIGHT); badge.setText ( "0")); badge.toggle ();

supongo que tienes una lista de los objetos. Puede crear una propiedad de "leer" para el objeto, y luego contar el número de objetos con read = false en el momento de la apertura de la cuenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top