--/--/--(--)


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
コメント(-) | トラックバック(-) | --:--:--

2011/02/05(土)


タブメニューはTabActivityを継承することで実装します(継承しなくても実装できます)。setIndicatorでタブのレイアウト、setContentでタブに対応する画面のレイアウトを設定します。また、タブ切り替えはOnTabChangeListenerを実装することで取得できます。

import android.app.TabActivity;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TabHost.OnTabChangeListener;

public class MyClass extends TabActivity implements OnTabChangeListener{
 
 public void myMethod(){
  TabHost tabHost = this.getTabHost();
  // TabActivityを継承しない場合
  //TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
 
  // "first"というメニュータブ
  TabSpec firstTab = tabHost.newTabSpec("first");
  firstTab.setIndicator("first",getResources().getDrawable(R.drawable.tab_first));
  firstTab.setContent(R.id.content_first);
 
  // "second"というメニュータブ
  TabSpec secondTab = tabHost.newTabSpec("second");
  secondTab.setIndicator("second",getResources().getDrawable(R.drawable.tab_second));
  secondTab.setContent(R.id.content_second);
  // secondTab.setIndicator(new TextView(this)); // 直接レイアウトを設定
  // secondTab.setContent(new TextView(this)); // 直接レイアウトを設定
 
  tabHost.addTab(firstTab);
  tabHost.addTab(secondTab);
 
  tabHost.setCurrentTab(0); // カレントを設定
  tabHost.setOnTabChangedListener(this); // リスナーを設定
 }
 
 public void onTabChanged(String tabId){
  switch(tabId){
   case "first":
   case "second":
  }
}

レイアウトのxmlでは各メニューに対応した画面のレイアウトを設定しますが、若干の決まりごとがあります。
1) idがtabhostのTabHostタグを作る。
2) TabHostの中に、verticalなLinearLayoutを作る。*1
3) LinearLayoutの中に、idがtabsのTabWidgetタグを作る。
4) LinearLayoutの中に、idがtabcontentのFrameLayoutを作る。
5) FrameLayoutの中に、各メニューに対応した画面のレイアウトを作る。

res/layout/main.xml
<?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:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
>
<TabWidget android:id="@android:id/tabs"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
/>
<FrameLayout android:id="@android:id/tabcontent"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
>

<!-- firstの画面 -->
<LinearLayout android:id="@+id/content_first"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
>
<TextView android:text="tab_first" />
</LinearLayout>

<!-- secondの画面 -->
<LinearLayout android:id="@+id/content_second"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
>
<TextView android:text="tab_second" />
</LinearLayout>
 
</FrameLayout>
</LinearLayout>
</TabHost>

タブメニューアイコンファイル
res/drawable/tab_first.png
res/drawable/tab_second.png

*1:TabHostがFrameLayoutであるため、タブコンテンツがタブとかぶって表示されてしまう。

コメント(0) | トラックバック(0) | 12:37:29
コメントを書く

管理者にだけ表示を許可する
トラックバック:0 - http://genmaicha460.blog27.fc2.com/tb.php/66-b3dab832

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。