2

上部と下部に異なるタブがあり、クリックすると異なるアクティビティにつながる可能性があるかどうかを知りたいです。それをグーグルで検索しましたが、それについて何も見つかりませんでした。

ありがとう

4

1 に答える 1

4

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 こちらで確認できます。ソースを見ると、コードに単一の mTab​​Widget があり、これが非常に具体的な ID = tabs( com.android.internal.R.id.tabs) を使用して初期化されていることが明らかです。IDを変更しましたので、ご注意ください。

では、元のソースを変更するにはどうすればよいでしょうか。1 つのアプローチは、独自のクラスを作成し、コアの TabHost を拡張することです。元の TabHost 内の関数とメンバーの半分はprivate(なぜそうではないのprotectedですか?!?) であるため、これは簡単ではありません。とにかく、ソースコードがあり、非常に簡単なので、それを行うことは可能です.

あなたの新しい拡張クラスが(またはMyTabHostを持たない変数/関数にアクセスできるように、元のTabHostと同じパッケージに配置する可能性があります)、XMLで単語をまたは実際に置き換えることができます)、次にクラス元の代わりに XML で使用されます。privatepublicTabHostMyTabHostcom.yourpackage.MyTabHost

ソース コードを見ると、この機能がデフォルトでサポートされていないことは明らかです。でも、本当に実現したいのなら、道は見えてくると思います。

于 2013-07-22T13:33:20.050 に答える