업데이트 안드로이드 아이콘 탭
-
09-06-2019 - |
문제
나는 활동이있는 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
, 지만,그것은 중요하지 않)을 포함하는 ImageView
고 TextView
.그래서 조금 바이올린을 켜는 디버거나 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));
}
}
});