tabbar

Diskussion i 'Frågor, support och diskussion' startad av isocron, 18 februari 2011.

  1. isocron

    isocron Kid Droid Medlem

    Blev medlem:
    28 maj 2009
    Inlägg:
    50
    Mottagna gillanden:
    0

    MINA ENHETER

    hej, har följt guiden från google att göra tabbar i appen.
    Och allt fungerar som det ska, jag får tabbar det skrivs olika text för varje tab.
    Men hur lägger jag till mer innehåll till tabcontent. som det är nu så läggs en text till på varje sida som visar t.ex. "tab1" och detta görs i koden tab1.java och inte i t.ex. en tab1.xml. hur får jag en specifik tab att använda en specifik xml för layout? att lägga till via koden verkar inte fungera då jag lägger till en bild så ersätter? den texten.

    har provat så här i tab-koden, och då försvinner texten och bilden visas i mitten på sidan, hur styr man det?

    Kod:
    		TextView textView = new TextView(this);
    		textView.setText("text1");
    		setContentView(textView);
    		
    		ImageView imgPres = new ImageView(this);
    		imgPres.setImageResource(R.drawable.bild);
    		imgPres.setAdjustViewBounds(true); // set the ImageView bounds to match the Drawable's dimensions
    		imgPres.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    		setContentView(imgPres);
    Här följer koden som jag använder.
    Huvudkoden:
    Kod:
    public class vader extends TabActivity  {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            /** använder inte main layouten utan kör med tab.xml */
            setContentView(R.layout.tab);
            
          
            /** TabHost will have Tabs */
            TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
            
            /** TabSpec used to create a new tab.
             *  By using TabSpec only we can able to setContent to the tab.
             *  By using TabSpec setIndicator() we can set name to tab. */
    
            //LayoutInflater.from(this).inflate(R.layout.tabweather, tabHost.getTabContentView(),true);
            
            /** tid1 is firstTabSpec Id. Its used to access outside. */
            TabSpec TabSpecWeather  = tabHost.newTabSpec("tid1");
            TabSpec TabSpecPlaces   = tabHost.newTabSpec("tid2");
            TabSpec TabSpecPlus     = tabHost.newTabSpec("tid3");
            TabSpec TabSpecSettings = tabHost.newTabSpec("tid4");
            
            /** TabSpec setIndicator() is used to set name for the tab. */
            /** TabSpec setContent() is used to set content for a particular tab. */
            
            TabSpec1.setIndicator("tab1", getResources().getDrawable(R.drawable.ic_tab1));
            TabSpec2.setIndicator("tab2", getResources().getDrawable(R.drawable.ic_tab2));
            TabSpec3.setIndicator("tab3", getResources().getDrawable(R.drawable.ic_tab3));
            TabSpec4.setIndicator("tab4", getResources().getDrawable(R.drawable.ic_tab4));
            
            //TabSpecWeather.setContent(R.id.linearLayout2);
            TabSpec1.setContent(new Intent(this,Tab1.class));
            TabSpec2.setContent(new Intent(this,Tab2.class));
            TabSpec3.setContent(new Intent(this,Tab3.class));
            TabSpec4.setContent(new Intent(this,Tab4.class));
            
            /** Add tabSpec to the TabHost to display*/
            tabHost.addTab(TabSpec1);
            tabHost.addTab(TabSpec2);
            tabHost.addTab(TabSpec3);
            tabHost.addTab(TabSpec4);
        }
    }
    Koden för första tabben tab1.class
    Kod:
    public class Tab1 extends Activity {
    	/** Call when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		/* First Tab Content */
    		TextView textView = new TextView(this);
    		textView.setText("tab1");
    		setContentView(textView);
    	}
    }
    layout för appen tab.xml
    HTML:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        
    	<ImageView
    		android:layout_width="fill_parent"
    		android:layout_height="25sp"
    		android:src="@drawable/title_logo"
    		android:background="#000000"/>
    
    	<TabHost 
    		android:layout_width="fill_parent"
    	    android:layout_height="fill_parent" 
    	    xmlns:android="http://schemas.android.com/apk/res/android"
    	    android:id="@android:id/tabhost">
    
    	    <RelativeLayout 
    		    android:id="@+id/RelativeLayout01"
    		    android:layout_width="fill_parent"
    		    android:layout_height="fill_parent">
    	        
    	        <TabWidget 
    	        	android:id="@android:id/tabs"
    	            android:layout_height="wrap_content" 
    	            android:layout_width="fill_parent"
    	            android:layout_alignParentBottom="true">
    	        </TabWidget>
    	            
    	        <FrameLayout 
    	        	android:id="@android:id/tabcontent"
    	            android:layout_height="fill_parent" 
    	            android:layout_width="fill_parent">
    	        </FrameLayout>
    	    </RelativeLayout>
    	</TabHost>
    </LinearLayout>
     
  2. Lindstromer

    Lindstromer Kid Droid Medlem

    Blev medlem:
    28 december 2010
    Inlägg:
    48
    Mottagna gillanden:
    7

    MINA ENHETER

    Detta bör fungera. Står ovanför setContent-delen som en kommentar ser jag nu också.;)
     
  3. isocron

    isocron Kid Droid Medlem

    Blev medlem:
    28 maj 2009
    Inlägg:
    50
    Mottagna gillanden:
    0

    MINA ENHETER

    Jag har provat på det sättet. Då kör den den layouten som finns i xml-filen, på just den tabben, vilket är bra. Men när jag klickat på tabben så vill jag att den ska köra den kod jag har kopplat till Intent som då sker här
    TabSpecWeather.setContent(new Intent(this,Tab1.class));
    Kör man med båda så skriver den sista över den första.
    Och om jag nu har koden så att den kör Tab1.class så verkar det enda sättet att få ut kontroller vara genom att koda dom direkt i javakoden, är det inte att föredra att ha layout:en i xml filen?

    //
     
  4. Sigma78

    Sigma78 Teen Droid Medlem

    Blev medlem:
    27 juli 2010
    Inlägg:
    360
    Mottagna gillanden:
    6

    MINA ENHETER

    Det är den här raden som sätter vilken layout du har
    setContentView(textView);

    Om du anger en xml-resurs där istället borde det fungera, det är så jag har gjort i min tablayout.
    T.ex. setContentView(R.id.minlayout);

    Intents har jag inte använt, så där kan jag dessvärre inte vara till hjälp.
     
  5. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 september 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

    Om du använder Intents för flikarna så är innehållet i varje flik en activity som kan se ut precis hur som helst. I Tab1.java kan du sätta vilken layout-xml du vill med Activity.setContentView(int resID) som i vilken Activity som helst.

    Det finns en del diskussioner om hurvida det är bra eller dåligt att använda Intents för flikar. Jag misstänker att de kan kräva en del extra resurser men jag vet inte. Jag använder Intents dels för att separera koden och dels för att jag slipper ladda massa info till alla flikar innan användaren tryckt på en specifik flik. Separera koden skulle förvisso gå att göra på andra sätt om man ansträngde sig.
     
  6. isocron

    isocron Kid Droid Medlem

    Blev medlem:
    28 maj 2009
    Inlägg:
    50
    Mottagna gillanden:
    0

    MINA ENHETER

    Tack för hjälpen alla, nu verkar det fungera som jag vill. :-)