문제

나는 활동이있는 TabHost 을 포함하는 설정의 TabSpecs 각 listview 포함된 항목에 의해 표시되는 탭입니다.을 때 각 TabSpec 가 만들어 내가 설정 아이콘을 표시 탭에서 헤더가 있습니다.

이 TabSpecs 는 이러한 방식으로 만들어진 내에서 setupTabs() 방법있는 루프를 만들은 적절한 수의 탭:

TabSpec ts = mTabs.newTabSpec("tab");
ts.setIndicator("TabTitle", iconResource);

ts.setContent(new TabHost.TabContentFactory(
{
    public View createTabContent(String tag)
    {
        ... 
    }            
});
mTabs.addTab(ts);

거기에 몇 가지 인스턴스가고 싶은데 어디를 변경할 수 있 아이콘이 표시되는 각 탭에서 실행되는 동안 내 프로그램입니다.현재 나는 모두 삭제하 탭을 호출하면 위의 코드는 다시 다시 만드는 것이 가장 좋습니다.

mTabs.getTabWidget().removeAllViews();
mTabs.clearAllTabs(true);
setupTabs();

는 방법이 있을 바꾸는 아이콘이 표시되고 없이 삭제하고 다시 만들의 모든 탭?

도움이 되었습니까?

해결책

짧은 대답입니다,당신은 아무것도 누락되지 않습니다.Android SDK 을 제공하지 않 직접적인 방법을 변경하는 표시의 TabHost 후에 만들어졌습니다.이 TabSpec 만을 구축하는 데 사용되는 탭,그래서 변경 TabSpec 후에 사실은 아무런 효과가 없습니다.

제가 생각하기로는 해결 방법,하지만.전화 mTabs.getTabWidget() 을 얻 TabWidget 체입니다.이것은 단지의 하위 클래스 ViewGroup, 할 수 있도록,전화 getChildCount()getChildAt() 액세스 개별 탭에 TabWidget.이러한 각각의 탭을은 또한 보고서의 경우 탭 그래픽 표시 및 라벨의 텍스트,그것은 거의 확실히 다른 어떤 ViewGroup (어쩌면 LinearLayout, 지만,그것은 중요하지 않)을 포함하는 ImageViewTextView.그래서 조금 바이올린을 켜는 디버거나 Log.i, 할 수 있어야 합 그 레시피를 얻 ImageView 과 변경됩니다.

단점은 당신이 조심하지 않는 경우,정확한의 레이아웃 컨트롤 내 탭을 변경할 수 있습과 당신의 수 있습니다.초기 솔루션은 아마도 더 강력하지만,다시 이어질 수 있습니다 다른 부작용과 같은 흔들림이나 초점 문제입니다.

다른 팁

지 확인하기 위해 dominics,대답을 여기에 자신의 솔루션 코드(실제로 작동하는):

tabHost.setOnTabChangedListener(new OnTabChangeListener() {
    public void onTabChanged(String tabId) {
        if (TAB_MAP.equals(tabId)) {
            ImageView iv = (ImageView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_map_black));
            iv = (ImageView) tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_list_white));
        } else if (TAB_LIST.equals(tabId)) {
            ImageView iv = (ImageView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_map_white));
            iv = (ImageView) tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_list_black));
        }
    }
});

물론 그것은 모험을 사용하여 그 직접 지표 getChildAt()이 좋지 않다.

수도 조금 늦었지만 당신은 수 있습을 보이 스레드

http://groups.google.com/group/android-developers/browse_thread/thread/ef3bdebcb715b385

내 게시물을 참조 코드를 들어에 관한 Customized 안드로이드 탭.

감사 Spct

이것은 무엇을 했는지고 그것이 나를 위해 작동 합니다.내가 만들어에서 이 함수는 활동에서 확장 TabBarActivity

public void updateTab(int stringID) {
    ViewGroup identifyView = (ViewGroup)getTabWidget().getChildAt(0);
    TextView v =  (TextView)identifyView.getChildAt(identifyView.getChildCount() - 1);
    v.setText(stringID);
}

이 기능을 수정할 수 있습니다 이미지를 변경하는 대신의 텍스트 또는 변경할 수 있습니다,당신은 또한 수정할 수 있습니다 이 모든 탭을 아이입니다.나는에서 특히 관심이 수정하여 텍스트의 첫 번째 탭을 수 있습니다.

나는 이 함수에서 관련 활동을 사용하여 이 call

getParent().updateTab(R.string.tab_bar_analyze);

이것을 보십시오:

tabHost.setOnTabChangedListener(new OnTabChangeListener() {
    public void onTabChanged(String tabId) {
        if (TAB_MAP.equals(tabId)) {
            ImageView iv = (ImageView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_map_black));
            iv = (ImageView) tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_list_white));
        } else if (TAB_LIST.equals(tabId)) {
            ImageView iv = (ImageView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_map_white));
            iv = (ImageView) tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_list_black));
        }
    }
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top