それぞれが異なるアクティビティを持つ複数のタブを作成しようとしています。唯一の欠点は、カスタム レイアウト ファイルを使用しているため、クラスがTabActivity
. 実行しようとすると失敗し、呼び出しを提案しますTabHost.Setup(ActivityGroupManager agm)
これをどのように達成できるかについてのアイデア/実用的な例はありますか?
前もって感謝します
それぞれが異なるアクティビティを持つ複数のタブを作成しようとしています。唯一の欠点は、カスタム レイアウト ファイルを使用しているため、クラスがTabActivity
. 実行しようとすると失敗し、呼び出しを提案しますTabHost.Setup(ActivityGroupManager agm)
これをどのように達成できるかについてのアイデア/実用的な例はありますか?
前もって感謝します
これは、TabActivity から拡張されていない私のアクティビティのサンプルです。
protected TabHost tabs;
// ...
/**
* Init tabs.
*/
private void initTabs() {
tabs = (TabHost) findViewById(R.id.tabhost);
tabs.setup();
tabs.setBackgroundResource(R.drawable.bg_midgray);
TabHost.TabSpec spec;
// Location info
txtTabInfo = new TextView(this);
txtTabInfo.setText("INFO");
txtTabInfo.setPadding(0, 0, 0, 0);
txtTabInfo.setTextSize(14);
txtTabInfo.setBackgroundResource(R.drawable.bg_tab_left_inactive_right_inactive);
txtTabInfo.setTextColor(Color.DKGRAY);
txtTabInfo.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.TOP);
txtTabInfo.setHeight(39);
spec = tabs.newTabSpec("tabInfo");
spec.setContent(R.id.tabInfo);
spec.setIndicator(txtTabInfo);
tabs.addTab(spec);
// Maps
txtTabMap = new TextView(this);
txtTabMap.setText("MAP");
txtTabMap.setTextSize(14);
txtTabMap.setPadding(0, 0, 0, 0);
txtTabMap.setBackgroundResource(R.drawable.bg_tab_middle_inactive_right_active);
txtTabMap.setTextColor(Color.DKGRAY);
txtTabMap.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.TOP);
txtTabMap.setHeight(39);
spec = tabs.newTabSpec("tabMap");
spec.setContent(R.id.tabMap);
spec.setIndicator(txtTabMap);
tabs.addTab(spec);
tabs.setCurrentTab(0);
tabs.setOnTabChangedListener(this);
}
// ...
まず、メイン レイアウトで frametab を定義します。
<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">
<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" android:padding="5dp">
</framelayout>
</tabwidget>
</linearlayout>
</tabhost>
次に、TabActivity から拡張されたアクティビティを作成します。
Resources res = getResources();
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, DashboardActivity.class);
spec = tabHost.newTabSpec("home").setIndicator("Home", res.getDrawable (R.drawable.ic_tab_dashboard)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, CreditCardActivity.class);
spec = tabHost.newTabSpec("sample1").setIndicator("Sample Tab",res.getDrawable (R.drawable.ic_tab_sample1)).setContent(intent);
tabHost.addTab(spec);
タブをロールオーバーする場合は、セレクター レイアウトを使用します。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/helpblue" android:state_selected="true">
<item android:drawable="@drawable/helpgray"></item>
</item></selector>
サンプルのスクリーンショットを次に示します。
代替テキスト http://rayyildiz.com/wp-content/uploads/2010/06/android_sample_tab-201x300.png 代替テキスト http://rayyildiz.com/wp-content/uploads/2010/06/android_sample_tab2-201x300.png
拡張する追加のクラスをTabActivity
作成し、そのクラスをメイン アクティビティにします。
XML マニフェストでこれを行うには、以下を含めます。
<activity android:name=".TabActivtyClass" android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
このクラスでは、次のように記述します。
public class TabActivtyClass extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = getTabHost(); // The associated TabHost
// Create an Intent to launch given Activty for this tab
Intent i = new Intent().setClass(this, FirstActivty.class);
TabHost.TabSpec spec = tabHost.newTabSpec("tab_name").setIndicator("Tab Name").setContent(i); // <- references the intent we just created
tabHost.addTab(spec);
// And do the same for the other tabs ...
}
}
この TabActivty クラスは、必要に応じて大きくしたり小さくしたりできますが、通常は次のように、各タブのアクティビティが画面のメイン部分に読み込まれるフルスクリーンになります:
(ソース: android.com )
PSまた、Eclipse Layout Editorはタブでは機能しないことに注意してください。すでに記録されているバグです。