2010-12-22 2 views
27

내 응용 프로그램에서 TabHost를 사용 중입니다. 응용 프로그램에서 4 개의 탭을 사용하고 있으며 특정 탭을 선택하고 선택하지 않은 경우 TabHost에서 다른 이미지를 사용하려고합니다. . 특정 탭에 대해 서로 다른 이미지를 사용해야합니다.TabHost에서 탭 이미지를 변경하는 방법

어떤 탭을 선택하면 이미지가 약간 밝고 다른 탭으로 전환하면 밝은 이미지가 회색 음영으로 표시됩니다.

TabHost를 구현했지만 TabHost에서 이미지를 변경하는 방법을 모르겠습니다.

누구든지 나를 도울 수 있습니까?

감사합니다, 데이비드

+1

@ 슈치 이미타 답은 오리지널 포스터로 받아 들여집니다. 이 현상금의 목적은 무엇입니까? – Ronnie

답변

44

그런 다음, 선택한 선택되지 않은 상태에 대해 서로 다른 이미지를 사용하는 각 탭, 예를 들어, 대한 드로어 블 폴더에 '선택'XML 파일을 작성하려면 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> 

당신의 새로운 XML 드로어 블 리소스를 참조해야합니다 위에 바라 스가 쓴 그런 다음 .setIndicator 방법을 사용하여

.

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)); 

사용이 각 탭에 대한 별도의 이미지를 설정하는

+0

자세한 정보는 http://www.androidpeople.com/android-tabhost-tutorial-part-2/ – bharath

+0

텍스트 및 아이콘을 사용하고 싶지는 않습니다. 선택한 양식과 선택되지 않은 양식의 탭 이미지를 변경하고 싶습니다. . –

2

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를, 드로어 블)가 탭의 텍스트와 아이콘을 설정하기 위해 호출되는 개발자 사이트에서 동일한에 대한 코드입니다.

16

먼저 두 이미지가 있어야합니다. 한 이미지에서 다른 이미지로 변경해야하므로 두 이미지가 모두 필요하므로 이미지를 3 개의 드로어 블 폴더에 배치해야합니다. 내 예에서

나는과 을 icon2.png icon1.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> 

탭을 선택할 때 나타나는 이미지를 선택할 수 있습니다. 이 경우 아이콘 1이 표시됩니다. 여기에 state_selected = true 인 인 태그에 선언했기 때문입니다.

이제는 3 개의 드로어 블 폴더 안에 두 개의 이미지와 xml 파일이 있습니다. 승인!

이제 탭을 선언 한 클래스에서 추가 할 각 탭에 대해이 행을 추가하십시오.

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

는 XML 파일에 R.drawable.yourxmlfile correponds 당신이 그릴 수 폴더에 생성 된 것을 기억하십시오.

그게 전부 야! 희망이 당신을 도와줍니다.

는 는
+1

더 완전한 대답. 감사합니다 :) – Sufian

+0

베스트와 뉴욕 설명 .. :) –

1
당신은 이미지 뷰가 선택이 아닌 선택과하여 ImageButton이 아닌 선택 선택 및 프레스 등 할 수 할 수 있기 때문에 더 나은하여 ImageButton을 사용하기 위해 할 수있는

....

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 
0

@Suchismita 더 나은 당신은 TabActivity 대신 TextView를 사용합니다. 내가 tabactivity

  • 내가 같은 탭에서 다른 활동을 시작할 수 없습니다 이러한 다음과 같은 문제에 직면,이 내가 다음 탭의보기를 사용자 정의하고, 내가 분할 드로어 블을 변경할 수

  • 에 직면 큰 문제입니다.

  • 그리고 TabActivity가 ICS에서 나는 이벤트와 활동 흐름을 처리 할 수는 매우 쉽게 발견

다음 사용하여 텍스트 뷰를 사용되지 않으며, 여기 당신은 응용 프로그램의 동작에 대한 모든 권한을 가지고 있고 또한 당신은 룩앤필을 사용자 정의 할 수 있습니다 그러나 당신이 원하는 탭의.

구현 방법에 관심이 있으십니까? 프로그래밍 다음 탭의 이미지를 변경하려면

6

이 코드

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); 
0

를 선택기 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로 이동이 코드를 넣어 :

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