Autore Topic: TabWidget & Scroll  (Letto 1275 volte)

Offline Diego Stamigni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Google+
    • diegostamigni
    • diego.stamigni
    • diegostamigni
    • Mostra profilo
    • Iside
  • Dispositivo Android:
    Galaxy Neuxs, Galaxy Note, Transformer Prime
  • Play Store ID:
    Diego Stamigni
  • Sistema operativo:
    Mac OS X, GNU/Linux
TabWidget & Scroll
« il: 09 Giugno 2011, 12:02:00 CEST »
0
Salve ragazzi,

Ho un TaHost in cui i tab vengono aggiunti in modo dinamico. Se però apro, ad esempio, 10 tabs, c'è un modo per scrollare in modo horizzontale tra i tab ? alcuni vengono nascosti ed è un problema, ad esempio, selezionare il primo.
Diego Stamigni
Software Engineer:  AreaMobile - Iside

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:TabWidget & Scroll
« Risposta #1 il: 09 Giugno 2011, 18:18:04 CEST »
0
Vorresti fare più o meno come l'app Youtube?

Offline Diego Stamigni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Google+
    • diegostamigni
    • diego.stamigni
    • diegostamigni
    • Mostra profilo
    • Iside
  • Dispositivo Android:
    Galaxy Neuxs, Galaxy Note, Transformer Prime
  • Play Store ID:
    Diego Stamigni
  • Sistema operativo:
    Mac OS X, GNU/Linux
Re:TabWidget & Scroll
« Risposta #2 il: 09 Giugno 2011, 18:44:44 CEST »
0
Si, sarebbe un'idea. E' un po'  che giro in rete e non trovo nulla di interessante. Ho ipotizzato di usare le Gesture ma mi sembra strano dover fare tutto questo, magari c'è qualche metodo AdHoc.
Diego Stamigni
Software Engineer:  AreaMobile - Iside

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:TabWidget & Scroll
« Risposta #3 il: 09 Giugno 2011, 20:16:07 CEST »
0
anche dolphin ha una cosa del genere... io credo che ti tocca guardarti i sorgenti dell tabhost (o tabwidget,non ricordo mai come si chiama quello che contiene i tabs) e wrappare tutto dentro una horizontal scroll view o cmq in una view personalizzata...
dico questo a naso,non ho mai provato ed è l'approccio che proverei io...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Diego Stamigni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Google+
    • diegostamigni
    • diego.stamigni
    • diegostamigni
    • Mostra profilo
    • Iside
  • Dispositivo Android:
    Galaxy Neuxs, Galaxy Note, Transformer Prime
  • Play Store ID:
    Diego Stamigni
  • Sistema operativo:
    Mac OS X, GNU/Linux
Re:TabWidget & Scroll
« Risposta #4 il: 10 Giugno 2011, 08:50:09 CEST »
0
Si infatti è la prima cosa che ho provato a fare, ma molto esplicitamente, non funziona :D
Diego Stamigni
Software Engineer:  AreaMobile - Iside

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:TabWidget & Scroll
« Risposta #5 il: 10 Giugno 2011, 09:56:51 CEST »
0
C'è un progetto open source qui : http://code.google.com/p/mobyfactory-uiwidgets-android/
che implementa un TabHost scrollabile, guarda se può darti o meno qualche ispirazione  :-P

Offline Diego Stamigni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Google+
    • diegostamigni
    • diego.stamigni
    • diegostamigni
    • Mostra profilo
    • Iside
  • Dispositivo Android:
    Galaxy Neuxs, Galaxy Note, Transformer Prime
  • Play Store ID:
    Diego Stamigni
  • Sistema operativo:
    Mac OS X, GNU/Linux
Re:TabWidget & Scroll
« Risposta #6 il: 10 Giugno 2011, 09:59:04 CEST »
0
C'è un progetto open source qui : http://code.google.com/p/mobyfactory-uiwidgets-android/
che implementa un TabHost scrollabile, guarda se può darti o meno qualche ispirazione  :-P

Interessante! Vedrò appena posso e se fa al caso mio imposto il topic come RISOLTO! Grazie :)
Diego Stamigni
Software Engineer:  AreaMobile - Iside

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:TabWidget & Scroll
« Risposta #7 il: 10 Giugno 2011, 10:31:04 CEST »
0
ciao, ho fatto un test:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
        <LinearLayout android:orientation="vertical" android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:padding="5dp">
                <HorizontalScrollView android:id="@+id/horizontalScrollView1"
                        android:layout_width="fill_parent" android:layout_height="wrap_content">
                        <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent"
                                android:layout_height="wrap_content" />
                </HorizontalScrollView>
                <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent"
                        android:layout_height="fill_parent" android:padding="5dp">
                        <LinearLayout android:id="@+id/content" android:orientation="vertical"
                                android:layout_width="fill_parent" android:layout_height="fill_parent">
                                <TextView android:text="TESTO CONTENT" android:layout_width="fill_parent"
                                        android:layout_height="wrap_content" />
                        </LinearLayout>
                </FrameLayout>
        </LinearLayout>
</TabHost>

Codice (Java): [Seleziona]
public class TabTestActivity extends TabActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                TabHost tabHost = getTabHost(); // The activity TabHost
                TabHost.TabSpec spec; // Resusable TabSpec for each tab
                Intent intent; // Reusable Intent for each tab

                for (int i = 0; i < 15; i++)
                        tabHost.addTab(tabHost.newTabSpec("Test" + i).setIndicator("Test" + i).setContent(R.id.content));

                tabHost.setCurrentTab(0);
        }
}

questo codice funziona e i tab sono scrollabili. Purtroppo se i tab non sono abbastanza a coprire tutta la view in orizzontale, allora non fanno il fill_parent. Credo il problema sia nell'implementazione dei tab. Però se te invece che mettere il testo come indicator metti una view bella grossa,con testo lungo e larghezza minima più grande di quella che risulta nel mio test,allora forse non ti capiterà mai di avere quel problema.

La soluzione proposta da quel link è una serie di radio button con un'activity group,che se non sbaglio è l'effettiva implementazione del tabwidget...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Diego Stamigni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Google+
    • diegostamigni
    • diego.stamigni
    • diegostamigni
    • Mostra profilo
    • Iside
  • Dispositivo Android:
    Galaxy Neuxs, Galaxy Note, Transformer Prime
  • Play Store ID:
    Diego Stamigni
  • Sistema operativo:
    Mac OS X, GNU/Linux
Re:TabWidget & Scroll
« Risposta #8 il: 10 Giugno 2011, 10:42:44 CEST »
0
ciao, ho fatto un test:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
        <LinearLayout android:orientation="vertical" android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:padding="5dp">
                <HorizontalScrollView android:id="@+id/horizontalScrollView1"
                        android:layout_width="fill_parent" android:layout_height="wrap_content">
                        <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent"
                                android:layout_height="wrap_content" />
                </HorizontalScrollView>
                <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent"
                        android:layout_height="fill_parent" android:padding="5dp">
                        <LinearLayout android:id="@+id/content" android:orientation="vertical"
                                android:layout_width="fill_parent" android:layout_height="fill_parent">
                                <TextView android:text="TESTO CONTENT" android:layout_width="fill_parent"
                                        android:layout_height="wrap_content" />
                        </LinearLayout>
                </FrameLayout>
        </LinearLayout>
</TabHost>

Codice (Java): [Seleziona]
public class TabTestActivity extends TabActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                TabHost tabHost = getTabHost(); // The activity TabHost
                TabHost.TabSpec spec; // Resusable TabSpec for each tab
                Intent intent; // Reusable Intent for each tab

                for (int i = 0; i < 15; i++)
                        tabHost.addTab(tabHost.newTabSpec("Test" + i).setIndicator("Test" + i).setContent(R.id.content));

                tabHost.setCurrentTab(0);
        }
}

questo codice funziona e i tab sono scrollabili. Purtroppo se i tab non sono abbastanza a coprire tutta la view in orizzontale, allora non fanno il fill_parent. Credo il problema sia nell'implementazione dei tab. Però se te invece che mettere il testo come indicator metti una view bella grossa,con testo lungo e larghezza minima più grande di quella che risulta nel mio test,allora forse non ti capiterà mai di avere quel problema.

La soluzione proposta da quel link è una serie di radio button con un'activity group,che se non sbaglio è l'effettiva implementazione del tabwidget...


Esatto, questo è esattamente il problema in cui sono incappato io
Diego Stamigni
Software Engineer:  AreaMobile - Iside

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:TabWidget & Scroll
« Risposta #9 il: 10 Giugno 2011, 11:23:17 CEST »
0
sai cosa farei io? farei una bella cosa proprio come dolphin, cioè uno spazio colorato per i tab, se ce n'è uno il tabWidget è invisible, se ce ne sono due li fai belli grossi che occupino tutta la view (o comunque di piu), se ce ne sono tanti scrolli.
Se fai un buon override dei temi non ti accorgi neanche che la view occupa mezzo schermo (ovviamente il tema a colori sta nella HorizScrollView che occupa tutto in orizzontale)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Diego Stamigni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Google+
    • diegostamigni
    • diego.stamigni
    • diegostamigni
    • Mostra profilo
    • Iside
  • Dispositivo Android:
    Galaxy Neuxs, Galaxy Note, Transformer Prime
  • Play Store ID:
    Diego Stamigni
  • Sistema operativo:
    Mac OS X, GNU/Linux
Re:TabWidget & Scroll
« Risposta #10 il: 10 Giugno 2011, 11:42:08 CEST »
0
sai cosa farei io? farei una bella cosa proprio come dolphin, cioè uno spazio colorato per i tab, se ce n'è uno il tabWidget è invisible, se ce ne sono due li fai belli grossi che occupino tutta la view (o comunque di piu), se ce ne sono tanti scrolli.
Se fai un buon override dei temi non ti accorgi neanche che la view occupa mezzo schermo (ovviamente il tema a colori sta nella HorizScrollView che occupa tutto in orizzontale)

Si, mi piace questa soluzione, anche se per il momento sono propenso a tentare l'uso di http://code.google.com/p/mobyfactory-uiwidgets-android/
Diego Stamigni
Software Engineer:  AreaMobile - Iside

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:TabWidget & Scroll
« Risposta #11 il: 10 Giugno 2011, 11:47:50 CEST »
0
Si, mi piace questa soluzione, anche se per il momento sono propenso a tentare l'uso di http://code.google.com/p/mobyfactory-uiwidgets-android/

vedi te, ho dato uno sguardo (velocissimo) alle classi e mi sembra roba buona, io però non metterei i tab in basso, è l'idea di iOS che mi fa cagare, anche perchè vengono coperti poi da eventuali menu!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Diego Stamigni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Google+
    • diegostamigni
    • diego.stamigni
    • diegostamigni
    • Mostra profilo
    • Iside
  • Dispositivo Android:
    Galaxy Neuxs, Galaxy Note, Transformer Prime
  • Play Store ID:
    Diego Stamigni
  • Sistema operativo:
    Mac OS X, GNU/Linux
Re:TabWidget & Scroll
« Risposta #12 il: 10 Giugno 2011, 11:50:32 CEST »
0
vedi te, ho dato uno sguardo (velocissimo) alle classi e mi sembra roba buona, io però non metterei i tab in basso, è l'idea di iOS che mi fa cagare, anche perchè vengono coperti poi da eventuali menu!

Si tanto a me servono in alto, al limite vedo come hanno implementato quella roba e me la scrivo da me
Diego Stamigni
Software Engineer:  AreaMobile - Iside

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:TabWidget & Scroll
« Risposta #13 il: 10 Giugno 2011, 12:03:29 CEST »
0
Si tanto a me servono in alto, al limite vedo come hanno implementato quella roba e me la scrivo da me
non serve, basta che inverti linearLayout e "tab" layout nell'xml!
ah, io alla scroll view che usano, toglierei il marcatore, è osceno da vedere sotto i tabs...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Diego Stamigni

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Google+
    • diegostamigni
    • diego.stamigni
    • diegostamigni
    • Mostra profilo
    • Iside
  • Dispositivo Android:
    Galaxy Neuxs, Galaxy Note, Transformer Prime
  • Play Store ID:
    Diego Stamigni
  • Sistema operativo:
    Mac OS X, GNU/Linux
Re:TabWidget & Scroll
« Risposta #14 il: 10 Giugno 2011, 12:09:52 CEST »
0
non serve, basta che inverti linearLayout e "tab" layout nell'xml!
ah, io alla scroll view che usano, toglierei il marcatore, è osceno da vedere sotto i tabs...

Ah perfetto, non avendo visto ancora i sorgenti non so come abbiano fatto loro/lui che sia :)
Comunque @Nicola, ho preso il tuo codice e ho provato a fare un'inflate di una View come Indicator e:



Il codice aggiunto è semplicemente una TextView:

Codice (XML): [Seleziona]
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/tvIndicator"
        android:padding="25dip"
        android:layout_width="fill_parent"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:background="#ffffff"
/>

e il for da te proposto, naturalmente modificato (posto l'intera classe):

Codice (Java): [Seleziona]
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                createTab(15);
        }

        public void createTab(int howMany) {
                TabHost tabHost = getTabHost();
                LayoutInflater inflater = getLayoutInflater();
               
                // ONLY FOR TEST
                for (int i = 0; i < howMany; i++) {
                        View v = inflater.inflate(R.layout.tvindicator, (ViewGroup) tabHost.getTabWidget().getChildAt(i));
                        ((TextView) v).setText("BLABLA  "+i);
                        tabHost.addTab(tabHost.newTabSpec("Test" + i).setIndicator(v).setContent(R.id.content));
                }
               
                tabHost.setCurrentTab(1);
        }

Per ora potrei anche accontentarmi, ma voglio comunque provare quella roba su GIT
Diego Stamigni
Software Engineer:  AreaMobile - Iside