27

アプリケーションで TabHost を使用しています。アプリケーションで 4 つのタブを使用しており、特定のタブが選択されている場合と選択されていない場合に、TabHost で異なる画像を使用したいと考えています。特定のタブごとに異なる画像を使用する必要があります。

タブを選択すると画像が少し明るくなり、別のタブに切り替えるとその明るい画像が灰色になります。

TabHost を実装しましたが、TabHost の画像を変更する方法がわかりません。

誰でもこれで私を助けることができますか?

ありがとう、デビッド

4

9 に答える 9

42

選択状態と非選択状態で異なる画像を使用する場合は、各タブのドローアブル フォルダーに「セレクター」XML ファイルを作成します。選択された状態と選択されていない状態の場合。すなわち

    <?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
  <item
    android:state_selected="true"
    android:drawable="@drawable/tab1_selected_image" />
  <item
    android:state_selected="false"
    android:drawable="@drawable/tab2_unselected_image" />
</selector>

次に、bharath が上で書いたように .setIndicator メソッドを使用して、新しい xml ドローアブル リソースを参照する必要があります。

于 2010-12-22T09:37:09.053 に答える
16

ある画像から別の画像に変更したいので、まず 2 つの画像が必要です。したがって、両方の画像が必要であり、それを 3 つのドローアブル フォルダーに配置する必要があります。

私の例では、icon1.pngicon2.pngという画像が必要です。

その後、ドローアブル フォルダー内に xml ファイルを作成します (すべてのドローアブル フォルダーで同じファイル)。これはファイルです:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected, use icon1 -->
<item android:drawable="@drawable/icon1"
      android:state_selected="true" />
<!-- When not selected, use icon2-->
<item android:drawable="@drawable/icon2" />
</selector>

タブが選択されたときに表示される画像を選択できます。この場合、state_selected=trueのタグで宣言したため、 icon1が表示されます。

これで、2 つの画像と xml ファイルが 3 つのドローアブル フォルダーに格納されました。Ok!

次に、タブを宣言するクラスで、追加する各タブにこの行を追加します。

tabHost.addTab(tabHost
.newTabSpec("one")
.setIndicator("The Tab",
  res.getDrawable(R.drawable.yourxmlfile))
.setContent(new Intent(this, YourClass.class)));

R.drawable.yourxmlfile は、drawableフォルダーに作成した xml ファイルに対応することに注意してください。

それでおしまい!これがお役に立てば幸いです。

于 2010-12-22T16:20:13.753 に答える
10

テキストとアイコンを設定するには、setIndicator プロパティを使用する必要があります。

 tabSpec.setIndicator(Char,Drawable);
 firstTabSpec.setIndicator("First Tab Name", getResources().getDrawable(R.drawable.logo));
 secondTabSpec.setIndicator("Second Tab Name",getResources().getDrawable(R.drawable.logo));

これを使用して、各タブに個別の画像を設定します

于 2010-12-22T09:26:35.407 に答える
6

セレクター xml ファイル tabicon.xml を作成し、このコードを配置します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/tab_enbled" android:state_selected="true"/>
    <item android:drawable="@drawable/tab_default" android:state_selected="false"/>
</selector>

今あなたのTabActivityに行き、このコードを入れてください

TabSpec MyTab = tabhost.newTabSpec("MyTab");
MyTab.setIndicator("", getResources().getDrawable(R.drawable.tabicon));
//note:if you give some text in setIndicator sometimes the icon will not be showed. 
Intent tabIntent = new Intent(this, TabOne.class);
TWTTab.setContent(tabIntent);
于 2013-11-11T15:49:09.457 に答える
2

このコードは、タブホストでアイコンを設定する方法とインテントを設定する方法を示しています

  TabHost tabHost = getTabHost();

        // Tab for Photos
        TabSpec photospec = tabHost.newTabSpec("Photos");
        // setting Title and Icon for the Tab
        photospec.setIndicator("", getApplicationContext().getResources().getDrawable(R.drawable.icon_photos_tab));
        Intent photosIntent = new Intent(this, PhotosActivity.class);
        photospec.setContent(photosIntent);

        // Tab for Songs
        TabSpec songspec = tabHost.newTabSpec("Songs");
        songspec.setIndicator("", getApplicationContext().getResources().getDrawable(R.drawable.icon_songs_tab));
        Intent songsIntent = new Intent(this, SongsActivity.class);
        songspec.setContent(songsIntent);


        // Tab for Videos
        TabSpec videospec = tabHost.newTabSpec("Videos");
        videospec.setIndicator("", getApplicationContext().getResources().getDrawable(R.drawable.icon_videos_tab));
        Intent videosIntent = new Intent(this, VideosActivity.class);
        videospec.setContent(videosIntent);

        // Adding all TabSpec to TabHost
        tabHost.addTab(photospec); // Adding photos tab
        tabHost.addTab(songspec); // Adding songs tab
        tabHost.addTab(videospec); // Adding videos tab
于 2012-12-11T07:24:35.783 に答える
2

この TabLayout チュートリアルでは、タブが選択されている場合と選択されていない場合に異なる画像が使用されます

基本的に、Statelistドローアブルを作成する必要があります。開発者サイトからの同じコードは次のとおりです

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/ic_tab_artists_grey"
          android:state_selected="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/ic_tab_artists_white" />
</selector>

また、タブのテキストとアイコンを設定するために setIndicator(CharSequence, Drawable) が呼び出されます。

于 2010-12-22T09:49:21.443 に答える
1

ImageButton を使用することができます。これは、imageView を選択したり選択したりできず、ImageButton を選択したり押したりせずに選択したりできるためです。

于 2011-12-15T21:12:15.677 に答える
0

@Suchismita TabActivity の代わりに TextView を使用することをお勧めします。タブアクティビティでこれらの次の問題に直面しました

  • 同じタブ内で別のアクティビティを開始できませんでした。これは私が直面した大きな問題です

  • 次はタブのビューのカスタマイズですが、ディバイダーのドローアブルを変更できませんでした。

  • また、TabActivity は ICS で廃止されました

次にTextViewを使用すると、イベントとアクティビティフローを非常に簡単に処理できることがわかりました。ここでは、アプリケーションの動作を完全に制御でき、タブのルックアンドフィールを自由にカスタマイズできます。

実装方法に興味がありますか?

于 2012-12-11T10:04:48.300 に答える
0

プログラムでタブの画像を変更したい場合:

ImageView yourImage= (ImageView)mTabHost.getTabWidget().getChildTabViewAt(youtTabPosition).findViewById(android.R.id.icon);   
yourImage.setImageResource(R.drawable.ic_more_vert_white_24dp);
于 2016-03-28T08:49:33.210 に答える