Подтвердить что ты не робот

Как изменить изображения вкладок в TabHost

Я использую TabHost в своем приложении, я использую четыре вкладки в своем приложении, и я хочу использовать разные изображения в TabHost, когда специальная вкладка выбрана и не выбрана. Мне нужно использовать разные изображения для каждой отдельной вкладки.

Когда я выбираю любую вкладку, изображение немного яркое, и когда я переключаюсь на другую вкладку, яркое изображение становится серым.

Я реализовал TabHost, но не знаю, как изменить изображения в TabHost.

Может ли кто-нибудь помочь мне в этом.

Спасибо, Дэвид

4b9b3361

Ответ 1

Если вы хотите использовать разные изображения для выбранных и невыделенных состояний, тогда создайте XML файлы 'selector' в папке drawables для каждой вкладки, например. tab1_selector.xml, tab2_selector.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>

Затем, используя метод .setIndicator, описанный выше, вы должны ссылаться на свой новый ресурс, который вы используете для xml.

Ответ 2

Прежде всего, у вас должны быть два изображения, потому что вы хотите переходить от одного к другому, поэтому вам нужны оба изображения, и вы должны поместить его в три папки с возможностью рисования.

В моем примере у меня есть изображения, называемые icon1.png и icon2.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>

Вы можете выбрать, какое изображение будет отображаться при выборе вкладки. В этом случае появится значок icon1, потому что мы объявили его в теге, где state_selected = true.

Итак, теперь у вас есть два изображения и xml файл внутри трех доступных папок. Ok!

Теперь, в классе, который вы объявляете вкладки, добавьте эту строку для каждой вкладки, которую вы хотите добавить.

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

Помните, что R.drawable.yourxmlfile соответствует файлу xml, созданному в папках с возможностью переноса.

Что это! Надеюсь, это поможет вам.

Ответ 3

Чтобы установить текст и значок, нам нужно использовать свойство 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));

используйте это, чтобы установить отдельное изображение для каждой вкладки

Ответ 4

Создайте 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);

Ответ 5

В this В учебнике 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) для установки текста и значка для вкладки.

Ответ 6

эти коды показывают, как установить значок в узле вкладки, а также установить намерение

  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

Ответ 7

Вы можете использовать ImageButton лучше, потому что изображение может быть выбрано и не выбрано, а ImageButton может быть выбран не выбранным и нажатым, а другие....

Ответ 8

@Suchismita лучше использовать TextView вместо TabActivity. Я столкнулся с следующими проблемами в табастильности

  • Я не мог запустить другую активность на одной вкладке, это серьезная проблема, с которой я столкнулся.

  • next настраивает представление вкладки, я не могу изменить разделитель.

  • И TabActivity устарела в ICS

Далее, используя TextView, я обнаружил, что он очень легко обрабатывает события и поток активности. Здесь вы полностью контролируете поведение приложения, а также можете настроить внешний вид вкладки, но вы хотите.

Вас интересует, как реализовать?

Ответ 9

Если вы хотите изменить изображение вкладки программно, то:

ImageView yourImage= (ImageView)mTabHost.getTabWidget().getChildTabViewAt(youtTabPosition).findViewById(android.R.id.icon);   
yourImage.setImageResource(R.drawable.ic_more_vert_white_24dp);