- 浏览: 112752 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
zhangchixtacbn:
能否发一份代码参考一下,谢谢。554242516@qq.com ...
DWZ整合struts2笔记 -
tuimaochang:
你好,这个有完整的源码吗?里面的对话框/图片资源用我自己的看不 ...
ActivityGroup + ViewPager 实现可滑动的底部Tab -
lintghi:
...
教你如何提高eclipse速度 -
119568242:
...
解决Bitmap读取频发OOM -
thunder_yan:
beat_it_ 写道能不能给份代码啊?上面不就是一个例子吗? ...
DWZ整合struts2笔记
首先看看布局文件
main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 底部Tab --> <LinearLayout android:id="@+id/ly_tab" android:layout_width="fill_parent" android:layout_height="55dip" android:layout_alignParentBottom="true" android:background="@drawable/tab_background" android:orientation="horizontal" > <!-- Tab可以滑动的ViewPager --> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> <!-- 中间显示内容的LinerLayout --> <LinearLayout android:id="@+id/ly_container" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@id/ly_tab" /> </RelativeLayout>
ViewPager 的 一个页面的配置文件
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ImageView android:id="@+id/imageView_tab_item_frist" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.0" android:background="@drawable/gray_takeout_96_80_1" android:contentDescription="@string/imageView" android:fadingEdge="vertical" android:fadingEdgeLength="5dip" android:onClick="onClick" android:tag="1" /> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.0" android:background="@drawable/gray_play_96_80_1" android:contentDescription="@string/imageView" android:fadingEdge="vertical" android:fadingEdgeLength="5dip" android:onClick="onClick" android:tag="2" /> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.0" android:background="@drawable/gray_express_96_80_1" android:contentDescription="@string/imageView" android:fadingEdge="vertical" android:fadingEdgeLength="5dip" android:onClick="onClick" android:tag="3" /> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.0" android:background="@drawable/gray_logistics_96_80_1" android:contentDescription="@string/imageView" android:fadingEdge="vertical" android:fadingEdgeLength="5dip" android:onClick="onClick" android:tag="4" /> </LinearLayout>
因为用到了ViewPager组件, 而Android本身自带是没有这个组件的。
因此需要加载ViewPager的jar包, android-support-v4.jar
这个jar包, 在谷歌自带的SDK的android-sdk-windows\extras\android\support\v4目录下面就有
然后是看看java类:
/** * 主界面多选项卡选择Activity * @author Thunder * */ public class TabChooseActivity extends ActivityGroup { /* */ private LayoutInflater layoutInflater = null; /* 一些对话框 */ private AboutDialog aboutDialog = null; private AboutCFDialog aboutCFDialog = null; /* 一些常量 */ private static final int CASE_TAKE_OUT = 0; private static final int CASE_PLAY = 1; private static final int CASE_EXPRESS = 2; private static final int CASE_LOGISTICS = 3; private static final int CASE_SPIN_PANEL = 4; /* ActivityGroup实现Tab */ private static final int PAGE_COUNT = 2; private List<View> viewList = null; private ViewGroup viewGroup = null; private ViewPager viewPager = null; private LinearLayout ly_container = null; /* Tab的一些资源 */ private View preView = null; private int preIndex = 0; private int[] img_bg_normal = {R.drawable.gray_takeout_96_80_1, R.drawable.gray_play_96_80_1, R.drawable.gray_express_96_80_1, R.drawable.gray_logistics_96_80_1, R.drawable.gray_spin_panel_96_80_1, R.drawable.gray_logistics_96_80_1, R.drawable.gray_refresh_96_80_1, R.drawable.gray_more_96_80_1}; private int[] img_bg_foucs = {R.drawable.blue_takeout_96_80_1, R.drawable.blue_play_96_80_1, R.drawable.blue_express_96_80_1, R.drawable.blue_logistics_96_80_1, R.drawable.blue_spin_panel_96_80_1, R.drawable.blue_logistics_96_80_1, R.drawable.blue_refresh_96_80_1, R.drawable.gray_more_96_80_1}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 初始化函数 */ init(); /* 设置显示的View */ setContentView(viewGroup); } /** * 初始化函数 */ private void init() { /* 得到 LayoutInflater */ layoutInflater = getLayoutInflater(); /* ViewList 用户存放每一个TabItem页 */ viewList = new ArrayList<View>(); /* 设置默认第一个Tab Item 是选中状态 */ View tempView = layoutInflater.inflate(R.layout.page_item_1, null); preView = tempView.findViewById(R.id.imageView_tab_item_frist); preIndex = 0; setImgFocus(preIndex, preView); /* 添加每一页面的显示页面 */ viewList.add(tempView); viewList.add(layoutInflater.inflate(R.layout.page_item_2, null)); /* 反射出布局 */ viewGroup = (ViewGroup) layoutInflater.inflate(R.layout.main, null); viewPager = (ViewPager) viewGroup.findViewById(R.id.viewPager); /* 初始化对话框 */ aboutDialog = new AboutDialog(this); aboutCFDialog = new AboutCFDialog(this); /* 用于中间显示内容的容器, 其实就是一个LinearLayout */ ly_container = (LinearLayout) viewGroup.findViewById(R.id.ly_container); /* 让ViewPager加载数据页 */ viewPager.setAdapter(new ViewPagerAdapter()); /* 默认启动一个Tab 项的Activity */ switchActivity(preIndex); } /** * View 的点击事件 * @param view */ public void onClick(View view) { int index = Integer.parseInt(view.getTag().toString()) - 1; setImgNormal(); setImgFocus(index, view); preView = view; preIndex = index; switchActivity(index); } /** * 把原来的聚焦状态设置为正常状态 */ public void setImgNormal() { if (preView != null) { ((ImageView) preView).setBackgroundResource(img_bg_normal[preIndex]); } } /** * 把原来的正常状态设置为聚焦状态 * @param index * @param view */ public void setImgFocus(int index, View view) { ((ImageView) view).setBackgroundResource(img_bg_foucs[index]); } /** * ActivityGroup的切换 * @param index */ private void switchActivity(int index) { // 必须先清除容器中所有的View ly_container.removeAllViews(); /* Intent 对象 */ Intent intent = null; /* 匹配实例化Intent */ switch (index) { case CASE_TAKE_OUT: intent = new Intent(this, TakeOutActivity.class); break; case CASE_PLAY: intent = new Intent(this, PlayActivity.class); break; case CASE_EXPRESS: intent = new Intent(this, ExpressActivity.class); break; case CASE_LOGISTICS: intent = new Intent(this, LogisticsActivity.class); break; case CASE_SPIN_PANEL: intent = new Intent(this, SpinPanelActivity.class); break; default: break; } /* 设置此Activity的标志位 */ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); /* Activity 转为 View */ Window subActivity = getLocalActivityManager().startActivity( "subActivity", intent); /* 容器添加View */ ly_container.addView(subActivity.getDecorView(), LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); } /** * ViewPager 的 Adapter * @author Thunder * */ private class ViewPagerAdapter extends PagerAdapter { @Override public int getCount() { // 页面的数量 return PAGE_COUNT; } @Override public Object instantiateItem(View container, int position) { // 加入到ViewGroup中去 ((ViewPager) container).addView(viewList.get(position), 0); return viewList.get(position); } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(viewList.get(position)); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void finishUpdate(View arg0) { } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View arg0) { } } }
具体实现, 上面的注释已经写得很清楚了,
如果有不明白的地方, 直接@我就行。
转载请说明出处, 谢谢。
Thunder
2012/07/01
评论
1 楼
tuimaochang
2013-07-27
你好,这个有完整的源码吗?里面的对话框/图片资源用我自己的看不出效果,还有
((ImageView) preView).setBackgroundResource(img_bg_normal[preIndex]);
这一行提示ImageView cannot be resolved to a type。
我的邮箱lx19990999@sina.com.谢谢博主分享
((ImageView) preView).setBackgroundResource(img_bg_normal[preIndex]);
这一行提示ImageView cannot be resolved to a type。
我的邮箱lx19990999@sina.com.谢谢博主分享
发表评论
-
Android 实现圆形Panel ListView
2012-12-04 18:32 1360(效果如上图所示) 其实很简单: 比方说上面的容 ... -
Android WIFI热点工具
2012-10-28 02:09 3436Hello Thunder夜未眠, 午夜时分, 发布一个小工具 ... -
Android 2.3+ 使用StrictMode
2012-09-21 14:47 0ANR窗口产生的原因是多种多样的。程序的主线程因为IO读 ... -
内存泄露 on Android
2012-09-21 14:41 11041.资源对象没关闭造成的内存泄漏 描述: 资源性对象 ... -
Android 高效编程
2012-09-21 14:36 13641.使用本地方法 当 ... -
Android, BaseAdapter 处理大数据量时的优化
2012-09-21 14:23 7408Android优化 最常见的就是ListView, Galle ... -
SQLite优化方法
2012-09-21 13:50 34751.建表优化 SQLite的数据库本质文件读写操作,频 ... -
Android SQLite插入优化
2012-09-21 13:48 1372最初代码如下,直接执行sql语句,外加事务提升性能: ... -
解决Bitmap读取频发OOM
2012-08-25 09:48 1336/** * Bitmap 工具包 * @author ... -
Android 使用des算法
2012-06-11 14:09 1929import java.security.Key; i ... -
Android 自定义Toast显示图片
2012-06-11 14:08 3044Toast用于向用户显示一些帮助/提示。下面展示了5种效 ... -
Android TabActivity中onKeyDown无效问题
2012-06-11 14:04 35561.当继承TabActivity时,同学们是不是onKeyDo ... -
Android程序安装和卸载
2012-06-11 14:01 1103安装: String str = "/Can ... -
Android 完全退出
2012-06-11 14:00 2582//通过context获取系统服务,得到Activity ... -
Android:创建网格状的RadioGroup
2012-06-05 10:37 3437Android系统自带的Radio ... -
Android: NDK编程
2012-06-05 10:32 5788为何要用到NDK? 概括来说主要分为以下几种情况: ... -
Android 3D图片切换
2012-06-05 10:25 2557MainActivity package org.wp ... -
android反编译和防止反编译的方法
2012-06-05 10:23 1613android基于java的,而ja ... -
android开发之MediaPlayer+Service MP3播放器
2012-06-02 14:57 4044import java.io.File; impo ... -
Android怎么让一个service开机自动启动
2012-06-02 14:58 2005今天我们主要来探讨android怎么让一个service开机自 ...
相关推荐
下面我们将详细探讨`Fragment + ViewPager`与`ViewPager + ActivityGroup`在实现tab横向滑动时的区别和知识点。 **Fragment + ViewPager** 1. **Fragment的引入**:Fragment是Android 3.0版本引入的概念,它是一个...
为了实现滑动切换效果,我们可以监听`GridView`的滑动事件,或者使用第三方库如`ViewPager`来更优雅地实现这一功能。`ViewPager`可以自动处理页面间的滑动切换,而且提供了更丰富的页面指示器和动画效果。 总的来说...
"Android Gallery+ActivityGroup实现滑动TAB独立Activity"是一个设计模式,它利用Android的Gallery组件和ActivityGroup来达到这一目的。在这个模式中,每个Tab都对应一个独立的Activity,从而提供更灵活和丰富的用户...
总之,虽然`ActivityGroup`+`GridView`的组合在旧版Android开发中常见,但现代Android开发中,应优先选择`Fragment`和`ViewPager`等组件来实现Tab分页和页面滑动效果。这样不仅代码更简洁,而且能充分利用Android...
在描述中提到的博客文章中,开发者可能详细介绍了如何将`TabActivity`与`ActivityGroup`结合,以实现在顶部和底部都有Tab的效果。`ActivityGroup`是一个旧的类,用于管理在一个`LocalActivityManager`中的子Activity...
6. **顶部Tab实现**: 压缩包中的"ActivityGroup和GridView实现标签分页(顶部Tab)"可能是指在顶部添加一个水平滚动的Tab条,通常使用HorizontalScrollView或ViewPager实现,这种方式可以提供更丰富的交互体验。...
在“基于GridView和ActivityGroup实现的Tab分页”场景下,ViewPager可以替代TabHost,用户可以在水平滑动时平滑地在各个页面之间切换。 6. 文件名“TabActivity”: 这可能是项目中的主Activity文件,负责设置和...
在UI开发中,仿QQ的滑动Tab是一种常见的设计模式,用于实现应用界面中的多页面切换,用户可以通过滑动Tab来...在实际开发中,我们应该采用现代的`Fragment`和`ViewPager`等组件来实现更高效、更可维护的滑动Tab功能。
在QQ应用中,用户可以通过左右滑动Tab来切换聊天、联系人、发现和我等不同页面。这种设计既节省屏幕空间,又能提供清晰的导航结构。 实现"仿qq的tab滑动"主要有两个关键点:一是视觉上的平滑过渡动画;二是逻辑上的...
- 使用`FragmentTransaction`可以方便地在`Fragment`之间进行切换,而`ViewPager`则可以实现滑动切换的效果,提供更好的用户体验。 总的来说,理解和掌握`TabHost`和`ActivityGroup`有助于了解Android的历史和演进...
Fragment代表应用程序的一个片段,可以在Activity之间共享,而ViewPager可以滑动展示多个Fragment,实现Tab切换的效果。 对于初学者,理解ActivityGroup的历史背景和工作原理是重要的,因为它可以帮助理解Android的...
在ActivityGroup_Tab中,我们可能看到的是一个自定义的ActivityGroup类,这是早期Android中实现内嵌Activity的方式。ActivityGroup允许我们在一个Activity中启动其他Activity,并在同一个窗口内显示。不过,这种...
尽管在后来的Android版本中,`Fragment`和`ViewPager`成为更推荐的实现方式,但这个例子仍然展示了如何利用`ActivityGroup`来创建类似QQ应用的滑动Tab效果。 代码首先在`onCreate`方法中初始化界面元素,包括各个`...
在现代Android开发中,我们通常使用`Fragment`来替代`ActivityGroup`,并结合`ViewPager`实现页面滑动和Tab切换。 总结起来,创建自定义Tab选择项卡涉及Android布局设计、自定义UI组件、事件监听以及页面切换逻辑。...
`ViewPager`则通过滑动切换页面,为实现复杂的用户界面提供了一种更现代且推荐的方法。 `ActivityGroup`虽然在一些老项目中仍可能被使用,但作为现代Android开发,我们应该尽可能避免使用已被废弃的API。对于混合...
此外,考虑到`ActivityGroup`的过时,可能需要考虑如何用`Fragment`和`ViewPager`等现代组件来实现类似的功能,它们提供了更强大的功能和更好的性能。 总之,`ActivityGroup`和`ViewFlipper`在早期的Android开发中...
在Android开发中,TabActivity是早期版本Android SDK中用于实现底部导航栏的一种方式。这个"TabActivityDemo"是一个示例项目,旨在展示如何在Android应用中创建和使用TabHost组件来构建多标签界面。让我们深入了解...
`TabHost`在早期版本的Android中常用,但现在已经被`ViewPager`所取代,因为`ViewPager`提供了更流畅的滑动体验和更好的可定制性。在这个案例中,我们将使用`TabHost`来创建分页菜单,因为它与`ActivityGroup`的集成...
在Android应用开发中,`TabActivity`曾是实现底部导航栏的一种常见方式,它允许开发者在同一个Activity中切换多个Fragment或者子Activity来展示不同的内容。然而,随着Android SDK的更新,`TabActivity`已被官方弃用...
`Fragment`可以被视为轻量级的`Activity`,可以嵌入到一个更大的UI结构中,而`ViewPager`则负责滑动切换这些`Fragment`。 ```java import android.app.ActivityGroup; import android.app.LocalActivityManager; //...