上部と下部に異なるタブがあり、クリックすると異なるアクティビティにつながる可能性があるかどうかを知りたいです。それをグーグルで検索しましたが、それについて何も見つかりませんでした。
ありがとう
Android の良いところは、やりたいことのほとんどすべてが可能であることです。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_top"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<TabWidget
android:id="@android:id/tabs_bottom"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0" />
</LinearLayout>
</TabHost>
TabWidgets の ID を変更したことに注意してください。
これは問題の半分にすぎません。残りの半分は、TabHost
この変更に対応するためにコア クラスのソース コードをどのように変更するかです。
元のソースはTabHost
こちらで確認できます。ソースを見ると、コードに単一の mTabWidget があり、これが非常に具体的な ID = tabs
( com.android.internal.R.id.tabs
) を使用して初期化されていることが明らかです。IDを変更しましたので、ご注意ください。
では、元のソースを変更するにはどうすればよいでしょうか。1 つのアプローチは、独自のクラスを作成し、コアの TabHost を拡張することです。元の TabHost 内の関数とメンバーの半分はprivate
(なぜそうではないのprotected
ですか?!?) であるため、これは簡単ではありません。とにかく、ソースコードがあり、非常に簡単なので、それを行うことは可能です.
あなたの新しい拡張クラスが(またはMyTabHost
を持たない変数/関数にアクセスできるように、元のTabHostと同じパッケージに配置する可能性があります)、XMLで単語をまたは実際に置き換えることができます)、次にクラス元の代わりに XML で使用されます。private
public
TabHost
MyTabHost
com.yourpackage.MyTabHost
ソース コードを見ると、この機能がデフォルトでサポートされていないことは明らかです。でも、本当に実現したいのなら、道は見えてくると思います。