iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android应用中使用TabHost组件继承TabActivity的布局方法
  • 851
分享到

Android应用中使用TabHost组件继承TabActivity的布局方法

方法布局tabhostAndroid 2022-06-06 08:06:09 851人浏览 八月长安
摘要

继承TabActivity并以activity布局 先查看下最终效果图: 再看下代码结构: 其中black.gif顾名思义就是一个黑背景图片,grey.gif就是一张灰

继承TabActivity并以activity布局
先查看下最终效果图:

2016412153332640.gif (388×256)

再看下代码结构:

2016412153402122.gif (251×551)

其中black.gif顾名思义就是一个黑背景图片,grey.gif就是一张灰色的背景图片

然后直接上代码:
ArtistActivity.java


package cn.com.tagview; 
import Android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class ArtistActivity extends Activity { 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView textView = new TextView(this); 
    // 该文档将会作为标签的内容进行显示 
    textView.setText("艺术内容"); 
    setContentView(textView); 
  } 
} 

MusicActivity.java


package cn.com.tagview; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class MusicActivity extends Activity { 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView textView = new TextView(this); 
    // 该文档将会作为标签的内容进行显示 
    textView.setText("音乐内容"); 
    setContentView(textView); 
  } 
} 

SportActivity.java


package cn.com.tagview; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class SportActivity extends Activity { 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView textView = new TextView(this); 
    // 该文档将会作为标签的内容进行显示 
    textView.setText("运动内容"); 
    setContentView(textView); 
  } 
} 

ArtistActivity.java  MusicActivity.java  SportActivity.java三个activity是用做标签内容的activity。即当用户点击相应的标签时,下边会显示相应的activity内容。

ic_tab.xml代码


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

这里一定要注意ic_tab.xml文件的位置,是放在res/drawable文件夹下的。有些朋友说怎么没有这个文件夹啊,实际上大家看到了我将它放在了drawable-hdpi中了,实际上drawable-hdpi、drawable-ldpi、drawable-mdpi三个文件夹都属于drawable文件夹的哦。该文件它规定了,当标签获得焦点和失去焦点时,标签上显示什么图片。

例如本例中,就是当state_selected="true"(当标签被选中时),显示@drawable/grey指定的资源图片。当未被选中时,显示@drawable/black指定的资源图片。

tagView.java代码:


package cn.com.tagview; 
import android.app.TabActivity; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TabHost; 
 
public class TagView extends TabActivity { 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // setContentView(R.layout.main); 
    // android代码中访问application资源的一个类 
    Resources resources = getResources(); 
    // 获取当前activity的标签,该方法的实现中已经执行了setContentView(com.android.internal.R.layout.tab_content); 
    TabHost tabHost = getTabHost(); 
    // 每一个标签项 
    TabHost.TabSpec spec; 
    // 声明一个意图,该意图告诉我们,下一个跳转到的activity是ArtistActivity。 
    Intent intent = new Intent(this, ArtistActivity.class); 
     
    spec = tabHost.newTabSpec("artist").setIndicator("艺术标签", 
        resources.getDrawable(R.drawable.ic_tab)).setContent(intent); 
    tabHost.addTab(spec); 
    Intent intent2 = new Intent(this, MusicActivity.class); 
    spec = tabHost.newTabSpec("music").setIndicator("音乐标签", 
        resources.getDrawable(R.drawable.ic_tab)).setContent(intent2); 
    tabHost.addTab(spec); 
    Intent intent3 = new Intent(this, SportActivity.class); 
    spec = tabHost.newTabSpec("sport").setIndicator("体育标签", 
        resources.getDrawable(R.drawable.ic_tab)).setContent(intent3); 
    tabHost.addTab(spec); 
    // tabHost.setCurrentTabByTag("music");设置第一次打开时默认显示的标签,该参数与tabHost.newTabSpec("music")的参数相同 
    tabHost.setCurrentTab(1);//设置第一次打开时默认显示的标签,参数代表其添加到标签中的顺序,位置是从0开始的哦。 
  } 
} 

AndroidManifest.xml


<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
   package="cn.com.tagview" 
   android:versionCode="1" 
   android:versionName="1.0"> 
  <uses-sdk android:minSdkVersion="8" /> 
  <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <!-- android:theme="@android:style/Theme.NoTitleBar" 的意思是将系统默认的tag标签去掉,为咱们自己的标签空出位置--> 
    <activity android:name=".TagView" 
         android:label="@string/app_name" 
         android:theme="@android:style/Theme.NoTitleBar" 
         > 
      <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <cateGory android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
    <!-- 在主配置文件中声明用于标签切换的3个activity,记住此处一定要声明,否则会出错 
      android:name="ArtistActivity"里面ArtistActivity前面是否有.都可以,你只需要保证该类是在manifest标签下package属性的包中即可。 
     --> 
    <activity android:name="ArtistActivity" android:label="@string/app_name"></activity>  
    <activity android:name="MusicActivity" android:label="@string/app_name"></activity>  
    <activity android:name="SportActivity" android:label="@string/app_name"></activity> 
  </application> 
</manifest> 

一切都弄好之后,运行,就出现了最终效果。这里要注意,main.xml是一直都没有用到的哦。

废话连篇:

其实,利用TabHost布局与ListView有很多相似之处,系统也同样为他们提供了帮助类,TabHost-TabActivity  ListView-ListActivity .当我们的activity集成了这些类之后,一般在里面我们只需要整理绑定下数据就可以。
再次声明一下,代码中是存在setContentView方法的调用的,只不过因为我们集成了TabActivity,TabActivity的getTabHost方法中已经进行了实现而已。对用户隐藏了,并不代表没有。
项目中为了简单易懂,我们只是在每个标签的内容部分添加了一个文本。实际上,我们完全可以在里面添加图片、视频等等。只要在相应的activity中实现就行了。我们可以看到,这种方式其实有很好的分层结构,activity与activity之间没有太多耦合。
可能一直到现在,有些朋友对TabActivity和ListActivity这种实现都特别的别扭。我这里就简单的说一下,实际上这其实是一种设计模式,模板模式。系统给你提供了一个实现了大部分内容的模板,然后你通过继承模板,去做修改(例如模板中有一个方法没有任何实现,你重写该方法并对其进行具体实现),让其符合你的要求。这就是模板模式的原理。

继承TabActivity并以布局文件进行布局
然后再来看以XML布局文件进行布局的方法,先上效果图:

2016412153506750.gif (364×347)

上面的是最终效果图。
代码结构如下。

2016412153522899.gif (249×438)

main.xml代码:


<?xml version="1.0" encoding="utf-8"?> 
<!-- 该布局文件定义了标签的内容部分,该布局文件一定要以FrameLayout为根元素 --> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" android:layout_height="fill_parent"> 
  <!-- 第一个标签内容 --> 
  <LinearLayout android:id="@+id/widget_layout_Blue" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <EditText android:id="@+id/widget34" android:layout_width="fill_parent" 
      android:layout_height="wrap_content" android:text="EditText" 
      android:textSize="18sp"> 
    </EditText> 
    <Button android:id="@+id/widget30" android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:text="Button"> 
    </Button> 
  </LinearLayout> 
  <!-- 第二个标签内容 AnaloGClock为钟表组件--> 
  <LinearLayout android:id="@+id/widget_layout_red" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <AnalogClock android:id="@+id/widget36" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"> 
    </AnalogClock> 
  </LinearLayout> 
  <!-- 第三个标签内容 RadioButton必须在RadioGroup中哦 --> 
  <LinearLayout android:id="@+id/widget_layout_green" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <RadioGroup android:id="@+id/widget43" 
      android:layout_width="166px" android:layout_height="98px" 
      android:orientation="vertical"> 
      <RadioButton android:id="@+id/widget44" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" 
        android:text="RadioButton"> 
      </RadioButton> 
      <RadioButton android:id="@+id/widget45" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" 
        android:text="RadioButton"> 
      </RadioButton> 
    </RadioGroup> 
  </LinearLayout> 
</FrameLayout> 

TagHostTest.java的代码:


package cn.com.tagHost.test; 
import android.app.TabActivity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.ViewGroup; 
import android.widget.TabHost; 
public class TagHostTest extends TabActivity { 
  private TabHost myTabhost; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    myTabhost = this.getTabHost(); 
     
    LayoutInflater.from(this).inflate(R.layout.main, 
        myTabhost.getTabContentView(), true); 
    myTabhost.setBackgroundColor(Color.argb(150, 22, 70, 150)); 
    myTabhost.addTab(myTabhost.newTabSpec("One") 
        .setIndicator("A").setContent(R.id.widget_layout_Blue)); 
    myTabhost.addTab(myTabhost.newTabSpec("Two") 
        .setIndicator("B", getResources().getDrawable(R.drawable.icon)) 
        .setContent(R.id.widget_layout_green)); 
    myTabhost.addTab(myTabhost.newTabSpec("Three") 
        .setIndicator("C", getResources().getDrawable(R.drawable.icon)) 
        .setContent(R.id.widget_layout_red)); 
  } 
} 

这种方法实现起来比较简单,看看我们都做了些什么。
第一步:定义标签内容部分的布局文件,该布局文件必须以FrameLayout为根节点。
第二步:让activity继承TabActivity,然后实现自己的代码。


您可能感兴趣的文章:Android中BroadcastReceiver(异步接收广播Intent)的使用Android的Service应用程序组件基本编写方法浅谈Android Content Provider的使用Android开发之ContentProvider的使用详解Android中自定义ContentProvider实例Android提高之BroadcastReceiver实例详解Android编程四大组件之Activity用法实例分析Android实现Activity、Service与Broadcaster三大组件之间互相调用的方法详解通过实例简单讲解Android App中的Activity组件Android编程四大组件分别是什么


--结束END--

本文标题: Android应用中使用TabHost组件继承TabActivity的布局方法

本文链接: https://www.lsjlt.com/news/25268.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php继承的使用方法
    本篇内容主要讲解“php继承的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php继承的使用方法”吧!继承属于面向对象的三大机制中的一种。在C++,JAVA,PHP中都存在,下面为大家介...
    99+
    2023-06-17
  • javascript继承方法的使用
    这篇文章主要介绍“javascript继承方法的使用”,在日常操作中,相信很多人在javascript继承方法的使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”javascript继承方法的使用”的疑惑有所...
    99+
    2023-06-20
  • Android 布局中的android:onClick的使用方法总结
    Android 布局中的android:onClick的使用方法总结Android布局中的 android:onClick=“...”属性设置点击时从上下文中调用指定的方法。该属性值和要调用的方法名称完全一致。一般在Activity定义符合...
    99+
    2023-05-30
    android onclick roi
  • CSS中层叠与继承的使用方法
    本篇内容介绍了“CSS中层叠与继承的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CSS技术理论:...
    99+
    2024-04-02
  • 继承方法如何在Java中使用
    这期内容当中小编将会给大家带来有关继承方法如何在Java中使用 ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象...
    99+
    2023-05-31
    java 继承 ava
  • Android中怎么利用组合控件复用布局
    本篇文章为大家展示了Android中怎么利用组合控件复用布局,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先,我们需要写出布局文件layout_custom_titlebar.xml。<xm...
    99+
    2023-05-30
    android
  • Android应用中如何使用LayoutInflater加载布局
    Android应用中如何使用LayoutInflater加载布局?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。需要从layout中加载View的时候,会调用这个方法Layo...
    99+
    2023-05-31
    android layoutinflater flat
  • javascript原型链继承的使用方法
    这篇文章主要讲解了“javascript原型链继承的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript原型链继承的使用方法”吧!说明即使不自定义类型,也可以通过原型实...
    99+
    2023-06-20
  • 实践和应用:Python中的多继承方法实现
    Python多继承实现方法的实践与应用 概述:Python是一门强大的面向对象编程语言,支持多继承的特性,允许一个类从多个父类中继承属性和方法。本文将介绍多继承的概念,并通过具体的代码示例来演示如何使用多继承来实现方法的功能扩展...
    99+
    2024-02-03
    应用 实现方法 多继承
  • android线性布局嵌套使用的方法是什么
    在Android中,可以通过在布局文件中使用嵌套的线性布局来实现复杂的界面布局。下面是嵌套使用线性布局的方法:1. 在布局文件中使用...
    99+
    2023-10-10
    Android
  • 如何使用Golang继承方法解决问题和应用范例
    Golang继承方法的优势和应用场景 在Go语言中,虽然没有传统意义上的类的概念,但是通过结构体的嵌套和方法的继承,我们可以实现类似其他面向对象语言中的继承机制。本文将介绍Golang继承方法的优势和应用场景...
    99+
    2024-01-20
    方法 应用场景 继承
  • Android使用ViewStub实现布局优化方法示例
    目录实践过程实现方式知识点实践过程 Hello,大家好啊,我是小空,今天带大家了解下动态加载控件ViewStub。 在平时开发中经常会遇到复杂布局,而每一个view都是会占据内存和消...
    99+
    2024-04-02
  • Dialog中Android应用中的使用方法
    Dialog中Android应用中的使用方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android开发中最常用的就是Dialog类,除了自定义dialog...
    99+
    2023-05-31
    android dialog roi
  • Spring Cloud中使用Feign,@RequestBody无法继承的解决方案
    目录使用Feign,@RequestBody无法继承的问题原因分析解决方案使用feign遇到的问题1、示例2、首次访问超时问题3、FeignClient接口中使用Feign,@Req...
    99+
    2024-04-02
  • 使用java怎么在接口中继承静态方法
    本篇文章给大家分享的是有关使用java怎么在接口中继承静态方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java有哪些集合类Java中的集合主要分为四类:1、List列表:...
    99+
    2023-06-14
  • PHP用trait或组合模式实现多继承的方法
    本篇内容主要讲解“PHP用trait或组合模式实现多继承的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP用trait或组合模式实现多继承的方法”吧!PHP的类继承只能是单继承,不能多继...
    99+
    2023-06-20
  • html div标签布局使用的方法
    这篇文章主要介绍了html div标签布局使用的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇html div标签布局使用的方法文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • content provider组件如何在Android应用中使用
    本篇文章给大家分享的是有关content provider组件如何在Android应用中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、基本概念Android四大组件之一...
    99+
    2023-05-31
    android content provider
  • 小程序中如何使用自定义组件应用及搭建个人中心布局
    一,自定义组件 从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。 开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用;也可以将复杂的页...
    99+
    2023-10-23
    小程序
  • 在Java中使用卡片布局管理器的方法
    在Java中使用卡片布局管理器的方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。卡片布局管理器是由 CardLayout 类实现的布局管理器称为卡片布局管理器,用来操纵其...
    99+
    2023-05-31
    java 卡片布局管理器 ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作