TabWidget 用の独自 View を作ります。
- public class CustomTabContentView extends FrameLayout {
- LayoutInflater inflater = (LayoutInflater) getApplicationContext()
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- public CustomTabContentView(Context context) {
- super(context);
- }
- public CustomTabContentView(Context context, String title, int icon) {
- this(context);
- View childview1 = inflater.inflate(R.layout.tabwidget1, null);
- TextView tv1 = (TextView) childview1.findViewById(R.id.textview);
- ImageView iv1 = (ImageView) childview1.findViewById(R.id.imageview);
- tv1.setText(title);
- iv1.setImageResource(icon);
- addView(childview1);
- }
- }
ここでは FrameLayout を継承して、res/layout/tabwidget1.xml で指定されたレイアウトから LinearLayout, TextView ,ImageView を生成し、引数で渡された文字列と画像のリソースIDをそれぞれ TextView と ImageView に設定しています。
setIndicator にカスタムビューを指定します。
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- TabHost tabHost = getTabHost();
- tabHost.setCurrentTab(1);
- View childview1 = new CustomTabContentView(this, "First", R.drawable.ic_tab_home);
- TabSpec firstTab = tabHost.newTabSpec("First");
- firstTab.setIndicator(childview1);
- firstTab.setContent(R.id.first_content);
- tabHost.addTab(firstTab);
- View childview2 = new CustomTabContentView(this, "Second", R.drawable.ic_tab_star);
- TabSpec secondTab = tabHost.newTabSpec("Second");
- secondTab.setIndicator(childview2);
- secondTab.setContent(R.id.second_content);
- tabHost.addTab(secondTab);
- View childview3 = new CustomTabContentView(this, "Third", R.drawable.ic_tab_camera);
- TabSpec thirdTab = tabHost.newTabSpec("Third");
- thirdTab.setIndicator(childview3);
- thirdTab.setContent(R.id.third_content);
- tabHost.addTab(thirdTab);
- }
tabwidget1.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/tabwidget_bg"
- android:gravity="center"
- >
- <TextView
- android:id="@+id/textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <ImageView
- android:id="@+id/imageview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </LinearLayout>

CustomTabContentView で 「メソッド getApplicationContext() は型 CustomTabContentView で未定義です」とエラーがでます。どうしたらよいでしょうか。
返信削除教えて頂けると助かります。
getApplicationContext()は、Activityのメソッドなので、Viewには存在しません。
返信削除mActivity.getApplicationContext();
のように、親のActivityを指定する書き方にする必要がありますよ。