Autore Topic: TabHost  (Letto 898 volte)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
TabHost
« il: 14 Maggio 2011, 01:08:10 CEST »
0
Vorrei creare 3 tab semplici semplici ma invece dell'icona con la scritta sotto voglio che compaiono per ogni tab 1 immagine....ho provato così

Codice (Java): [Seleziona]
tabhost.addTab(tabhost.newTabSpec("tab1").setIndicator("",getResources().getDrawable(R.drawable.phone_tab)).setContent(new Intent(this,Tab1.class)));
       

ma esce la drawable sempre dentro al grosso rettangolo ed io voglio invece che appaia solo l'immagine e poi senza la linea orizzonatale grigia che compare sotto i tab...si può fare ?

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

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:TabHost
« Risposta #2 il: 14 Maggio 2011, 02:43:11 CEST »
0
Ciao Nicola, si avevo visto quel tutorial,ma la cosa che vorrei fare io è unpò diversa, cioè sostituire al tab un immagine, non sò se si può fare onestamente..

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:TabHost
« Risposta #3 il: 14 Maggio 2011, 03:12:38 CEST »
0
Ecco come viene...come vedi i tab sono molto più grandi dell'immagine, io voglio che si veda solo l'immagine che cliccata funzioni da tab.....

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:TabHost
« Risposta #4 il: 14 Maggio 2011, 13:20:53 CEST »
0
Ecco come viene...come vedi i tab sono molto più grandi dell'immagine, io voglio che si veda solo l'immagine che cliccata funzioni da tab.....
fatti l'immagine 9path e poi setti il tab indicator come view. La view che specifichi è un linearLayout con all'interno un'immagine impostata con fill parent.
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 mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:TabHost
« Risposta #5 il: 14 Maggio 2011, 15:41:11 CEST »
0
Ok dtasera ci.provo e ti faccio sapete...speriamo bene :-) grazie! ;-)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:TabHost
« Risposta #6 il: 14 Maggio 2011, 23:59:27 CEST »
0
Allora ho provato però ho un problemino perchè ho questo errore : "05-14 23:39:27.781: ERROR/AndroidRuntime(10985): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first."

questo è l'XML tabs_dettaglio.xml che uso per visualizzare i tabs, ogni Imageview dovrebbe essere un tab.... :
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal"
 android:id="@+id/relativeimg">
        <RelativeLayout android:id="@+id/relativeimg1" android:layout_width="wrap_content" android:layout_height="wrap_content"><ImageView android:layout_width="wrap_content" android:id="@+id/imageView3" android:layout_height="wrap_content"  android:layout_marginLeft="10dip"></ImageView></RelativeLayout>
    <RelativeLayout android:id="@+id/relativeimg2" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/imageView2"  android:layout_marginLeft="220dip"></ImageView></RelativeLayout>
    <RelativeLayout android:id="@+id/relativeimg3" android:layout_width="wrap_content" android:layout_height="wrap_content"><ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/imageView1"  android:layout_marginLeft="97dip"></ImageView></RelativeLayout>
</RelativeLayout>

...questo è il codice java :
Codice (Java): [Seleziona]
private void setTabs() {
        tabHost = getTabHost();
        tabHost.addTab(tabHost.newTabSpec("1").setContent(new Intent(this,d.class)).setIndicator(addImg(1)));
        tabHost.addTab(tabHost.newTabSpec("2").setContent(new Intent(this,d.class)).setIndicator(addImg(2)));
                tabHost.addTab(tabHost.newTabSpec("3").setContent(new Intent(this,d.class)).setIndicator(addImg(3)));
}
   
        private View addImg(int i) {
                int cc;
                                int cc2;
                if(i==1){
                        cc = R.id.imageView3;
                                                cc2 = R.drawable.menu_oggi;

                }else if(i==2){
                        cc = R.id.imageView2;
                                                 cc2 = R.drawable.menu_ieri;

                }else{
                                      cc = R.id.imageView1;
                                        cc2 = R.drawable.menu_domani;
                                }
                View tabIndicator = LayoutInflater.from(getBaseContext()).inflate(R.layout.tabs_dettaglio,null);               
                                 ImageView icon = (ImageView) tabIndicator.findViewById(cc);
                icon.setBackgroundResource(cc2);
                return icon;
        }              

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:TabHost
« Risposta #7 il: 15 Maggio 2011, 15:36:43 CEST »
0
Allora, sono finalmente riuscito a risolvere in questo modo...anche se ho ancora un problemino che poi vi dico :

XML TabHost
Codice: [Seleziona]
<TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:id="@+id/linearLayout2" android:layout_width="wrap_content" android:layout_height="fill_parent">
   <TabWidget android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@android:id/tabs"></TabWidget>
      <FrameLayout android:layout_width="wrap_content" android:id="@android:id/tabcontent" android:layout_below="@android:id/tabs" android:layout_height="fill_parent">
          <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/i3"  android:src="@drawable/menu_oggi"></ImageView>
          <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/i2"  android:src="@drawable/menu_mese"></ImageView>
          <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/i1" android:src="@drawable/menu_settimana"></ImageView>
       </FrameLayout>
    </LinearLayout>
</TabHost>

Per le 3 immagini che saranno ognuna un tab, ho 3 layout in 3 file xml che si chiamano tab_dettaglio.xml, tab_mese.xml e tab_settimana.xml, ne riporto di seguito uno solo tanto sono tutti e 3 uguali :
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/relativeimg2">
    <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/imageView1"  android:src="@drawable/img_settimana" ></ImageView>
</RelativeLayout>

Per la visualizzazione ho invece usato questo codice java:
Codice (Java): [Seleziona]
             private void setTabs() {
            tabHost = getTabHost();
                    tabHost.addTab(tabHost.newTabSpec("1").setContent(R.id.i3).setIndicator(addImg(R.layout.tabs_dettaglio)));
            tabHost.addTab(tabHost.newTabSpec("2").setContent(R.id.i2).setIndicator(addImg(R.layout.tab_settimana)));
            tabHost.addTab(tabHost.newTabSpec("3").setContent(R.id.i1).setIndicator(addImg(R.layout.tab_mese)));
               
        }
   
        private View addImg(int layout) {
                View tabIndicator = LayoutInflater.from(getBaseContext()).inflate(layout,null);
                return tabIndicator;
        }

Con questo codice effettivamente i 3 pulsanti vengono visualizzati come volevo uno affianco all'altro, c'è solo un piccolo problema e cioè che le immagini del setContent che dovrebbero essere visualizzate quando si preme ogni tab vanno affianco ai tab invece che sotto ho provato a mettere nella linea di codice <LinearLayout android:id="@+id/linearLayout2" android:layout_width="wrap_content" android:layout_height="fill_parent"> l'attributo orientation="vertical"
 ed in effetti a quel punto me lo visualizza sotto i tab solo che poi mi sfasa la posizione di tutti i tabs..... :(