通常のTabHostの代わりに、XMLレイアウトでこのカスタムクラスを使用してみてください。
package com.example.test;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TabHost;
public class TabHostFix extends TabHost
{
public TabHostFix(Context context)
{
super(context);
}
public TabHostFix(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
public void onTouchModeChanged(boolean isInTouchMode)
{
//do not call through to base class, do nothing
//this is a fix for tabhost stealing focus from textboxes
}
}
次のように、XMLレイアウトでカスタムクラスを参照します。
<?xml version="1.0" encoding="utf-8"?>
<com.example.test.TabHostFix xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TabWidget
android:id="@android:id/tabs"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_weight="0"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0" />
<FrameLayout
android:id="@+android:id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
</com.example.test.TabHostFix>
編集:別の解決策として、サポートライブラリのViewPagerとタブを模倣したカスタムのView Pagerインジケーターを使用して、TabHostを完全に置き換えることができる場合があります。私はこれまでこれを試したことがありませんが、ここに優れた無料のサードパーティビューページャーインジケーターがあることを読みました。