Java Android: Tabs scrollbar machen + nur 3 Tabs sichtbar

Danny787

Ensign
Registriert
Jan. 2007
Beiträge
180
Hallo zusammen,

ich habe folgendes Anliegen:

Ich habe einen Tabhost, der aus 5 Tabs besteht. Nun möchte ich 3 von den 5 Tabs immer anzeigen lassen, und sobald die Tabs von links nach rechts oder umgekehrt horizontal gescrollt werden sollen erst die beiden anderen Tabs sichtbar werden.

Die Tabs habe ich mit einer "HorizontalScrollView" "scrollbar" gemacht:

Code:
<?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:layout_width="fill_parent"
			android:layout_height="wrap_content" android:fillViewport="true"
			android:scrollbars="none">

			<TabWidget android:id="@android:id/tabs"
				android:layout_width="wrap_content" 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>
</TabHost>

Hier meine TabWidget-Klasse mit den 5 Tabs:

Code:
public class HelloTabWidget extends TabActivity{
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.tab);
	    

	    Resources res = getResources();  // Resource Objekt
	    TabHost tabHost = getTabHost();  // Activity TabHost
	    TabHost.TabSpec spec; 			 // TabSpec für Tabs
	    Intent intent;
	    
	    // Initialisiert "Notizen" Tabansicht und fügt zum Tabhost hinzu
	    intent = new Intent().setClass(this, NoteActivity.class);
	    spec = tabHost.newTabSpec("note").setIndicator("Notizen",
	                      res.getDrawable(R.drawable.ic_tab_note))
	                  .setContent(intent);
	    tabHost.addTab(spec);

	    // Initialisiert "Stundenplan" Tabansicht und fügt zum Tabhost hinzu
	    intent = new Intent().setClass(this, ScheduleActivity.class);
	    spec = tabHost.newTabSpec("schedule").setIndicator("Stundenplan",
	                      res.getDrawable(R.drawable.ic_tab_schedule))
	                  .setContent(intent);
	    tabHost.addTab(spec);

	    // Initialisiert "Ausfallende Vorlesungen" Tabansicht und fügt zum Tabhost hinzu
	    intent = new Intent().setClass(this, CanceledCoursesActivity.class);
	    spec = tabHost.newTabSpec("canceled").setIndicator("Ausfallende Vorlesungen",
	                      res.getDrawable(R.drawable.ic_tab_canceled))
	                  .setContent(intent);
	    tabHost.addTab(spec);
	    
	 // Initialisiert "Notenspiegel" Tabansicht und fügt zum Tabhost hinzu
	    intent = new Intent().setClass(this, GradesActivity.class);
	    spec = tabHost.newTabSpec("grades").setIndicator("Notenspiegel",
	                      res.getDrawable(R.drawable.ic_tab_grades))
	                  .setContent(intent);
	    tabHost.addTab(spec);
	    
	    // Initialisiert "Prüfungsplan" Tabansicht und fügt zum Tabhost hinzu
	    intent = new Intent().setClass(this, ExamScheduleActivity.class);
	    spec = tabHost.newTabSpec("exam").setIndicator("Prüfungsplan",
	                      res.getDrawable(R.drawable.ic_exam))
	                  .setContent(intent);    
	    tabHost.addTab(spec);
	    

	    tabHost.setCurrentTab(2);

Nur will ich die ersten 3 Tabs immer anzeigen lassen, und die letzten beiden sollen erst sichtbar werden, sobald die Tabs horizontal gescrollt werden.

Ich hab mir das folgendermaßen vorgestellt:

//Zuerst Tabs 4 und 5 invisible machen

Code:
 tabHost.getTabWidget().getChildAt(3)
        .setVisibility(View.GONE);
	    
	    tabHost.getTabWidget().getChildAt(4)
        .setVisibility(View.GONE);

Und nun kommt der Punkt wo ich nicht weiß wie ich weitermachen muss. Jetzt müsste ich ja irgendwie einer Prüfung durchführen ob die Tabs gescrollt werden (z.B. mit nem onScrollListener oder so) und sobald dies der Fall ist werden die Tabs dann wieder auf Visible gesetzt:

Code:
   tabHost.getTabWidget().getChildAt(3)
        .setVisibility(View.VISIBLE);
	    
	    tabHost.getTabWidget().getChildAt(4)
        .setVisibility(View.VISIBLE);

Hat jemand eine Idee wie ich diesen letzten Schritt bewerkstelligen kann? Oder vielleicht sogar einen ganz anderen/einfacheren Ansatz?

Danke schon mal im Voraus :-)
 
Zurück
Oben