【问题标题】:Android How To change Tab Icons on tab clickAndroid 如何更改标签点击时的标签图标
【发布时间】:2012-03-16 20:57:30
【问题描述】:

安卓:

我是 android 新手,我想在标签点击时更改标签图标。我遵循了可能的教程,这些教程指导如何通过选择器 xml 文件更改选项卡图标,例如

http://developer.android.com/resources/tutorials/views/hello-tabwidget.html http://www.androidhive.info/2011/08/android-tab-layout-tutorial/

但在我的原因中,为什么所有这些都不起作用,它只会将第一个选项卡图标更改为未选中和未选中到已选中,但不适用于所有其他我的代码中的问题在哪里请帮助我 plz plz plz

我的代码如下

我的可绘制图标设置文件如下,名称为

可绘制文件夹下的becel_setting.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- When selected, -->
    <item android:drawable="@drawable/menu_promenera_selected"
          android:state_selected="true"
          android:state_pressed="false" />

    <!-- When not selected, -->
    <item android:drawable="@drawable/menu_promenera"
         />

    <!-- When selected, -->
    <item android:drawable="@drawable/menu_varaframsteg_selected"
          android:state_selected="true"
          android:state_pressed="false" />
    <!-- When not selected, -->
    <item android:drawable="@drawable/menu_varaframsteg"
         />

    <!-- When selected,  -->
    <item android:drawable="@drawable/menu_minapromenader_selected"
          android:state_selected="true"
          android:state_pressed="false" />
    <!-- When not selected,-->
    <item android:drawable="@drawable/menu_minapromenader"
         />

    <!-- When selected,  -->
    <item android:drawable="@drawable/menu_information_selected"
          android:state_selected="true"
          android:state_pressed="false" />
    <!-- When not selected, -->
    <item android:drawable="@drawable/menu_information"
         />

</selector>

我的标签主机主机类如下

public class BECEL extends TabActivity{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try{
            setMenuTabs();
        }catch(Exception ex){
            String message = ex.getMessage();
        }
    }

    private void setMenuTabs() {
        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost();  // The activity TabHost

        TabHost.TabSpec spec;  // Resusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        /*******************************************/

        intent = new Intent(this, BecelFacebookConnection.class);

        spec = tabHost.newTabSpec("").setIndicator("",
        res.getDrawable(R.drawable.becel_setting)).setContent(intent);  /**** xml file name becel_setting ******/
        tabHost.addTab(spec);        



        intent = new Intent(this, OurProgress.class);
        Drawable mySelector = getResources().getDrawable(R.drawable.menu_varaframsteg);
        spec = tabHost.newTabSpec("").setIndicator("",mySelector).setContent(intent);
        tabHost.addTab(spec);



        intent = new Intent(this, MyWalks.class);

        spec = tabHost.newTabSpec("").setIndicator("",
        res.getDrawable(R.drawable.menu_minapromenader)).setContent(intent);
        tabHost.addTab(spec);



        intent = new Intent(this, WalkInformations.class);

        spec = tabHost.newTabSpec("").setIndicator("",
        res.getDrawable(R.drawable.menu_information)).setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);

    }
}

请帮我看看我的代码哪里出了问题

【问题讨论】:

    标签: android android-layout android-widget


    【解决方案1】:

    您需要为每个 newTabSpec("") 提供一个唯一的字符串值。例如以下示例中的 tab1tab2tab3tab4

    public class BECEL extends TabActivity{
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            try{
                setMenuTabs();
            }catch(Exception ex){
                String message = ex.getMessage();
            }
        }
    
        private void setMenuTabs() {
            Resources res = getResources(); // Resource object to get Drawables
            TabHost tabHost = getTabHost();  // The activity TabHost
    
            TabHost.TabSpec spec;  // Resusable TabSpec for each tab
            Intent intent;  // Reusable Intent for each tab
    
            /*******************************************/
    
            intent = new Intent(this, BecelFacebookConnection.class);
    
            spec = tabHost.newTabSpec("tab1").setIndicator("tab1",
            res.getDrawable(R.drawable.becel_setting)).setContent(intent);  /**** xml file name becel_setting ******/
            tabHost.addTab(spec);        
    
    
    
            intent = new Intent(this, OurProgress.class);
            Drawable mySelector = getResources().getDrawable(R.drawable.menu_varaframsteg);
            spec = tabHost.newTabSpec("tab2").setIndicator("tab2",mySelector).setContent(intent);
            tabHost.addTab(spec);
    
    
    
            intent = new Intent(this, MyWalks.class);
    
            spec = tabHost.newTabSpec("tab3").setIndicator("tab3",
            res.getDrawable(R.drawable.menu_minapromenader)).setContent(intent);
            tabHost.addTab(spec);
    
    
    
            intent = new Intent(this, WalkInformations.class);
    
            spec = tabHost.newTabSpec("tab4").setIndicator("tab4",
            res.getDrawable(R.drawable.menu_information)).setContent(intent);
            tabHost.addTab(spec);
    
            tabHost.setCurrentTab(0);
    
        }
    }
    

    【讨论】:

    • (感谢 waqas,但它仍然无法解决与之前为每个 newTabSpec 唯一的 namw 相同的问题)
    • 或者也可以尝试在setIndicator 中添加名称。查看我的更新答案
    • 通过添加唯一值 newTebspec 和 setIndicator 仍然不起作用。我感觉问题很大。如果您有任何教程,其中超过两到三个带有不同图标的选项卡在点击时发生变化
    • 压缩你的项目,上传到某个地方,然后把链接发给我
    猜你喜欢
    • 2021-02-09
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多