继承的tabactivity怎么用appcompatactivity代替并实现tabactivity的的效果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承的tabactivity怎么用appcompatactivity代替并实现tabactivity的的效果相关的知识,希望对你有一定的参考价值。
ActivityGroup在实际的开发中是十分常见的,在我使用过的android应用中,十个应用里面有九个应用的主界面都是使用ActivityGroup的。说起ActivityGroup,在国内好像直接使用它开发的并不多,基本都是使用TabActivity,它是ActivityGroup唯一的一个子类。Android端新浪微博的主界面就是用TabActivity来实现的,还有其它的一些应用也几乎都用TabActivity来实现。在我眼里,TabActivity是Google提供的一个非常失败的API(至少我现在这么认为,下文我会说它失败在哪里),但中国几乎所有的应用都使用TabActivity,我不禁在思考这是巧合还是复制粘贴的产物。使用ActivityGroup(或者说TabActivity)开发出来的主界面效果图如下(涉及版权问题,我这里就不粘微博的主界面了,ArtistActivity.java
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
view plain
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
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代码:
view plain
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开始的哦。
参考技术A 然后直接上代码:
ArtistActivity.java
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
view plain
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
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代码:
view plain
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开始的哦。
软件测试作业1:android手机应用布局之TabActivity
在android手机应用布局中,qq客户端标签栏,新浪微博主页等用TabActivity布局可以方便的进行Activity的切换。寒假期间,在模拟qq客户端标签栏布局开发上,第一次尝试了TabActivity的开发。
程序实现了“好友”,“讨论组”,“群”三个子活动界面,在TabActivity中调用三个活动,以“群”Activity作为欢迎页,TabActivity代码如下:
1 public class MainActivity extends TabActivity { 2 3 @Override 4 public void onCreate(Bundle savedInstanceState){ 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 TabHost tabHost = getTabHost(); 9 TabHost.TabSpec spec; 10 Intent i; 11 12 i=new Intent(this,MyFriendActivity.class); 13 spec=tabHost.newTabSpec("1").setIndicator("好友").setContent(i); 14 tabHost.addTab(spec); 15 16 i=new Intent(this,MyGroupActivity.class); 17 spec=tabHost.newTabSpec("2").setIndicator("群").setContent(i); 18 tabHost.addTab(spec); 19 20 i= new Intent(this,MyDiscussionActivity.class); 21 spec=tabHost.newTabSpec("0").setIndicator("讨论组").setContent(i); 22 tabHost.addTab(spec); 23 tabHost.setCurrentTab(1); 24 } 25 }
运行程序,出现“程序已终止运行”的提示。
经过百度搜索,发现在AndroidManifest.xml中缺少“Group”,“Friend”,“Dicussion”活动的配置。而原来的想法是用TabActivity调用了这些活动,不必要进行配置。对子活动的配置代码如下:
1 <activity 2 android:name="com.example.qq.MyDiscussionActivity"> 3 </activity> 4 5 <activity 6 android:name="com.example.qq.MyFriendActivit"/> 7 8 <activity 9 android:name="com.example.qq.MyGroupActivity"/>
最终正常运行结果如下:
以上是关于继承的tabactivity怎么用appcompatactivity代替并实现tabactivity的的效果的主要内容,如果未能解决你的问题,请参考以下文章