• 五万球迷助阵 国安主场“摘花” 2019-05-24
  • 俄罗斯驻华大使:未来上合的首要任务是加强区域一体化 2019-05-23
  • 习近平总书记重要讲话在内蒙古各界引发热烈反响 2019-05-22
  • 女性之声——全国妇联 2019-05-21
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-21
  • 好朋友、和平奖可能人家抱了。 2019-05-20
  • 【北京荣祥月达车型报价】北京荣祥月达综合店车型价格 2019-05-20
  • 脸上长痘代表对应内脏有问题?专家:未发现相关性 2019-05-19
  • 和静县首届东归节6月23日开幕 2019-05-18
  • 太空监视飞行器相关新闻 2019-05-18
  • 警车化身“产房” 冰雪路上“生命接力” 2019-05-17
  • 百部网络正能量动漫音视频作品评选 2019-05-16
  • 初二少年与家长争吵离家出走 客运站人员发觉异样后拦下 2019-05-15
  • 陈海滢的专栏作者中国国家地理网 2019-05-14
  • 乐平市:开展流动党校“培训在基层”活动(图) 2019-05-13
  • 香港赛马会娱乐中心:Android开发之TabHost选项卡及相关疑难解决方法

    香港赛马会网站惠泽社绝杀八码 www.mwcrz.tw  更新时间:2019年03月16日 10:24:41   作者:水中鱼之1999   我要评论

    这篇文章主要介绍了Android开发之TabHost选项卡及相关疑难解决方法,结合实例形式较为详细的分析了Android开发中TabHost选项卡的常见用法以及相关疑难问题解决方法,需要的朋友可以参考下

    本文实例分析了Android开发之TabHost选项卡及相关疑难解决方法。分享给大家供大家参考,具体如下:

    前言:

    虽然现在谷歌已经不推荐使用TabHost,但是初学者还是很有必要接触下这一成金的经典的,本文将介绍纤细介绍这一空间的使用,以及大家可能遇到的问题。注:文末给出完整实现代码

    三个问题:

    1. 无法显示TabHost

    2. 添加图片 + 文字 无法同时

    3. 说在最后:点击事件

    4. 底部导航无法实现

    现在

    从问题出发:

    问题一:无法显示 TabHost

    很多人调用TabHost的方法是:

    setContentView(R.layout.activity_main);
    tabHost = getTabHost();
    
    

    然后发现啥也没有,一脸蒙圈。。。 在这里建议大家采用遮掩的调用方法:

    LayoutInflater.from(this).inflate(R.layout.activity_main,
        tabHost.getTabContentView(), true);
    
    

    成功后的页面:

    注:UI 略丑请忽视

    问题二:图片、文字无法同时添加

    好了,很多人辛辛苦苦把界面搞出来了,可能想搞个底部菜单 加个图片,结果凉凉 半天搞不出来 ,这里介绍一个方法 ,由于TabHost本身图片、文字冲突 ,无法添加,这是我们就得把目光迁移到自定义view上:本段参考自://www.mwcrz.tw/article/157914.htm

    首先在/layout下建立自定义view名为:tab_indicator.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="//schemas.android.com/apk/res/android"
      android:layout_width="0dip"
      android:layout_height="64dip"
      android:layout_weight="1"
      android:orientation="vertical"
      android:background="#45c0c0c0"
      android:padding="5dp">
      <ImageView android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        />
      <TextView android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        style="?android:attr/tabWidgetStyle"
        />
    </RelativeLayout>
    
    

    接着,紧随其后在/drawable下添加:tab_info.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="//schemas.android.com/apk/res/android">
      <item android:drawable="@drawable/find"
        android:state_selected="true" />
      <item android:drawable="@drawable/find1" />
    </selector>
    
    

    这些都搞定之后,就可以在活动中调用了:

    首先在活动中先建立AddTab()方法:

    private void AddTab(String label, int drawableId) {
      Intent intent = new Intent(this, TextActivity.class);
      TabHost.TabSpec spec = tabHost.newTabSpec(label);
      View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);
      TextView title = (TextView) tabIndicator.findViewById(R.id.title);
      title.setText(label);
      ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon);
      icon.setImageResource(drawableId);
      spec.setIndicator(tabIndicator);
      spec.setContent(intent);
      tabHost.addTab(spec);
    }
    
    

    终于我们。。。:

    成功了?。?!

    问题三:添加监听事件

    这个无脑 只要 id 匹配就行了,直接上代码:

    tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener(){
      @Override
      // tabId是newTabSpec参数设置的tab页名,并不是layout里面的标识符id
      public void onTabChanged(String tabId) {
        if (tabId.equals("tab1")) {  //第一个标签
          Toast.makeText(MainActivity.this, "点击标签页一", Toast.LENGTH_SHORT).show();
        }else if (tabId.equals("tab2")) {  //第二个标签
          Toast.makeText(MainActivity.this, "点击标签页二", Toast.LENGTH_SHORT).show();
        }else if (tabId.equals("tab3")) {  //第三个标签
          Toast.makeText(MainActivity.this, "点击标签页三", Toast.LENGTH_SHORT).show();
        }
      }
    });
    
    

    暂时能记起来的 疑难就这些了 如果还有请给我留言 我尽力解答。。

    附上布局与实现:

    布局:

    <?xml version="1.0" encoding="utf-8" ?>
    <TabHost xmlns:android="//schemas.android.com/apk/res/android"
      android:id="@android:id/tabhost"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_weight="1"
      android:scrollbarSize="100dp">
      <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TabWidget
          android:id="@android:id/tabs"
          android:layout_width="match_parent"
          android:layout_height="wrap_content">
          <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <!--定义第一个标签页特内容-->
            <LinearLayout
              android:id="@+id/tab01"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
              <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="text11"
                android:textSize="20dp"/>
              <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="text12"
                android:textSize="20dp"/>
            </LinearLayout>
            <!--定义第二个标签页的内容-->
            <LinearLayout
              android:id="@+id/tab02"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
              <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="text11"
                android:textSize="20dp"/>
              <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="text12"
                android:textSize="20dp"/>
            </LinearLayout>
            <!--定义第三个标签页的内容-->
            <LinearLayout
              android:id="@+id/tab03"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
              <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="text11"
                android:textSize="20dp"/>
              <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="text12"
                android:textSize="20dp"/>
            </LinearLayout>
          </FrameLayout>
        </TabWidget>
      </LinearLayout>
    </TabHost>
    
    

    实现:

    public class MainActivity extends TabActivity {
      TabHost tabHost;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    //    setContentView(R.layout.activity_main);
        tabHost = getTabHost();
        LayoutInflater.from(this).inflate(R.layout.activity_main,
            tabHost.getTabContentView(), true);
        AddTab("tab1", R.drawable.tab_info);
        AddTab("tab2", R.drawable.tab_info);
        AddTab("tab3", R.drawable.tab_info);
    //
        //标签切换事件处理,setOnTabChangedListener
        tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener(){
          @Override
          // tabId是newTabSpec参数设置的tab页名,并不是layout里面的标识符id
          public void onTabChanged(String tabId) {
            if (tabId.equals("tab1")) {  //第一个标签
              Toast.makeText(MainActivity.this, "点击标签页一", Toast.LENGTH_SHORT).show();
            }else if (tabId.equals("tab2")) {  //第二个标签
              Toast.makeText(MainActivity.this, "点击标签页二", Toast.LENGTH_SHORT).show();
            }else if (tabId.equals("tab3")) {  //第三个标签
              Toast.makeText(MainActivity.this, "点击标签页三", Toast.LENGTH_SHORT).show();
            }
          }
        });
      }
      private void AddTab(String label, int drawableId) {
        Intent intent = new Intent(this, TextActivity.class);
        TabHost.TabSpec spec = tabHost.newTabSpec(label);
        View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);
        TextView title = (TextView) tabIndicator.findViewById(R.id.title);
        title.setText(label);
        ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon);
        icon.setImageResource(drawableId);
        spec.setIndicator(tabIndicator);
        spec.setContent(intent);
        tabHost.addTab(spec);
      }
    }
    
    

    ps:新建的layout和/drawable里的xml文件在问题给过,这里就不反复给了。

    问题四:底部导航效果无法实现

    底部导航的参见方法是把TabWidget放在FrameLayout后面,但是啧啧。。。

    <RelativeLayout xmlns:android="//schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" >
      <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true" >
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical" >
          <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="top">
            中间内容前面给出 这里省略
          </FrameLayout>
        </LinearLayout>
        <TabWidget
          android:id="@android:id/tabs"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_gravity="bottom" >
        </TabWidget>
      </TabHost>
    </RelativeLayout>
    
    

    你会发现并没有什么 卵用 ?。?!呕??!,so:

    百度了半天找不到问题所在,然后。。。修改下MainActivity

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      //原来
    //    tabHost = getTabHost();
    //    LayoutInflater.from(this).inflate(R.layout.activity_main,
    //        tabHost.getTabContentView(), true);
      //修改后
      setContentView(R.layout.activity_main);
      tabHost = getTabHost();
      tabHost.setup(this.getLocalActivityManager());
      AddTab("tab1", R.drawable.tab_info);
      AddTab("tab2", R.drawable.tab_info);
      AddTab("tab3", R.drawable.tab_info);
      //标签切换事件处理,setOnTabChangedListener
      iniClick();
    }
    
    

    注:此处我已经将点击事件封装到方法中

    最后:全剧终

    哦,还没有且等我放下最后的图。。

    啧啧,搞定

    更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结

    希望本文所述对大家Android程序设计有所帮助。

    相关文章

    • 详解Android TableLayout表格布局

      详解Android TableLayout表格布局

      表格布局的标签是TableLayout,TableLayout继承了LinearLayout。所以它依然是一个线性布局,通过本文给大家介绍Android TableLayout表格布局,感兴趣的朋友一起学习吧
      2016-02-02
    • 浅析Android中强大的Dialog

      浅析Android中强大的Dialog

      下面将通过一个小实例,来像大家展示Android中功能强大的Dialog。代码都写了详细的注释,读者不妨试着手动去敲
      2013-10-10
    • Android中View的炸裂特效实现方法详解

      Android中View的炸裂特效实现方法详解

      这篇文章主要介绍了Android中View的炸裂特效实现方法,涉及Android组件ExplosionField的相关定义与使用技巧,需要的朋友可以参考下
      2016-07-07
    • Android带依赖树的aar是如何生成的(推荐)

      Android带依赖树的aar是如何生成的(推荐)

      这篇文章主要介绍了Android打带依赖树的aar的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
      2018-01-01
    • Android中Fragment的分屏显示处理横竖屏显示的实现方法

      Android中Fragment的分屏显示处理横竖屏显示的实现方法

      今天小编就为大家分享一篇关于Android中Fragment的分屏显示处理横竖屏显示的实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
      2019-03-03
    • Android自定义ViewGroup实现竖向引导界面

      Android自定义ViewGroup实现竖向引导界面

      这篇文章主要为大家详细介绍了Andoird自定义ViewGroup实现竖向引导界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2019-03-03
    • Android 中Manifest.xml文件详解

      Android 中Manifest.xml文件详解

      这篇文章主要介绍了Android 中Manifest.xml文件详解的相关资料,需要的朋友可以参考下
      2017-03-03
    • Android TextView 字体滚动效果

      Android TextView 字体滚动效果

      这篇文章主要介绍了Android TextView 字体滚动效果的相关资料,需要的朋友可以参考下
      2017-01-01
    • Android常用进度条效果分享

      Android常用进度条效果分享

      这篇文章主要为大家分享了Android常用进度条效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2016-10-10
    • 深入学习Android中的Intent

      深入学习Android中的Intent

      深入学习Android中的Intent,Intent提供了一种通用的消息系统,它允许在你的应用程序见传递Intent来执行动作和产生事件,对Intent感兴趣的小伙伴们可以参考一下
      2015-12-12

    最新评论

  • 五万球迷助阵 国安主场“摘花” 2019-05-24
  • 俄罗斯驻华大使:未来上合的首要任务是加强区域一体化 2019-05-23
  • 习近平总书记重要讲话在内蒙古各界引发热烈反响 2019-05-22
  • 女性之声——全国妇联 2019-05-21
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-21
  • 好朋友、和平奖可能人家抱了。 2019-05-20
  • 【北京荣祥月达车型报价】北京荣祥月达综合店车型价格 2019-05-20
  • 脸上长痘代表对应内脏有问题?专家:未发现相关性 2019-05-19
  • 和静县首届东归节6月23日开幕 2019-05-18
  • 太空监视飞行器相关新闻 2019-05-18
  • 警车化身“产房” 冰雪路上“生命接力” 2019-05-17
  • 百部网络正能量动漫音视频作品评选 2019-05-16
  • 初二少年与家长争吵离家出走 客运站人员发觉异样后拦下 2019-05-15
  • 陈海滢的专栏作者中国国家地理网 2019-05-14
  • 乐平市:开展流动党校“培训在基层”活动(图) 2019-05-13