Autore Topic: TabWidget: utilizzare View come etichette tab  (Letto 1113 volte)

Offline bovello

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +2
    • Mostra profilo
    • Bovello
  • Dispositivo Android:
    San Francisco
  • Play Store ID:
    Bovello
  • Sistema operativo:
    Windows 7, Mac OS Snow Leopard
TabWidget: utilizzare View come etichette tab
« il: 12 Marzo 2011, 02:36:44 CET »
0
Ciao  ;-)
Nella mia bella applicazione su cui utilizzo i tab... gli stessi tab sono un pugno in un occhio  o_O o_O o_O
Vorrei sopratutto diminuirne l'altezza, ma anche il layout.

Ho visto che a partire da Android 1.6 è possibile specificare nel setIndicator anche un oggetto di tipo View, piuttosto che una stringa (TabHost.TabSpec setIndicator (View view) ), il che risolverebbe le mie necessità.

L'idea iniziale era di mettere una semplice TextView colorata, per poi far evolvere la cosa secondo la resa nell'applicazione. Tuttavia non riesco a specificare una TextView come indicator del tab!
Ho provato diverse versioni, ma tutte senza successo. Ecco l'ultima:

File XML di layout:

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp"
    android:text="MYTAB" >
</TextView>

Java:

Codice: [Seleziona]
View myView = new View(this);
TabHost mTabHost = getTabHost();
mTabHost.addTab(mTabHost.newTabSpec("tab_test10").setIndicator(myview).setC ontent(R.id.tabTextView));


Ecco l'errore che riscontro:

Codice: [Seleziona]
E/AndroidRuntime(  572): Caused by: java.lang.IllegalArgumentException: you must specify a way to create the tab indicator.
Sapete spiegarmi il perchè di un tale errore? Avete qualche esempio che possa chiarire il corretto utilizzo?
Grazie mille,

Marco

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:TabWidget: utilizzare View come etichette tab
« Risposta #1 il: 12 Marzo 2011, 12:55:16 CET »
+3
Devi fare l'inflate della tuo layout file in modo da avere un oggetto che la rappresenta.
Le varie implementazioni che ho visto quando anche io ho creato una cosa del genenere avevano questo metodo che prendere come parametro il testo da settare all'indicator e ti ritorna la View pronta da utilizzare:

Codice (Java): [Seleziona]
private View buildIndicator ( int textRes ) {
        final TextView indicator = ( TextView ) getLayoutInflater().inflate( R.layout.tab_indicator, mTabHost.getTabWidget(), false );
        indicator.setText( textRes );
        return indicator;
}

poi per assegnarla fai semplicemente in questo modo:

Codice (Java): [Seleziona]
mTabHost.addTab( mTabHost.newTabSpec( CONSTANTE_TAB ).setContent( R.id.contenuto_della_tab ).setIndicator(
                buildIndicator( R.string.stringa_indicator ) ) );

Già che ci siamo ti do un hint nel caso tu volessi creare delle tab "twitter style"....

Indicator:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<!--
   Copyright 2010 Google Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/tab_label"
   android:layout_width="0dip"
   android:layout_height="fill_parent"
   android:layout_weight="1"
   android:gravity="center"
   android:textSize="14sp"
   android:textStyle="bold"
   android:minHeight="38dp"
   android:background="@drawable/minitab" />

background:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<!--
   Copyright 2010 Google Inc.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
       android:state_pressed="true"
       android:drawable="@drawable/minitab_pressed"
       />
    <item
       android:state_selected="false"
       android:state_focused="false"
       android:state_pressed="false"
       android:drawable="@drawable/minitab_unselected"
       />
    <item
       android:state_selected="true"
       android:state_focused="false"
       android:state_pressed="false"
       android:drawable="@drawable/minitab_default"
       />
    <item
       android:state_focused="true"
       android:state_selected="true"
       android:state_pressed="false"
       android:drawable="@drawable/minitab_selected"
       />
</selector>

I drawable "minitab" da usare li trovi qui:

/trunk/res/ -
 iosched -
 
 Project Hosting on Google Code
(che è dove ho preso spunto).



« Ultima modifica: 12 Marzo 2011, 13:07:08 CET da Ricky` »

Offline bovello

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +2
    • Mostra profilo
    • Bovello
  • Dispositivo Android:
    San Francisco
  • Play Store ID:
    Bovello
  • Sistema operativo:
    Windows 7, Mac OS Snow Leopard
Re:TabWidget: utilizzare View come etichette tab
« Risposta #2 il: 14 Marzo 2011, 02:05:24 CET »
0
Perfetto, risolto!
Grazie mille