用较早版本的APIs实现抽象类
来源:互联网 发布:自然搜索优化 编辑:程序博客网 时间:2024/06/06 18:29
原文链接:http://android.eoe.cn/topic/android_sdk
用较早版本的APIs实现抽象类
这节课程我们讨论如何创建一个实现类,即能对应新版本的API,又能够保持对老版本API的支持。
寻找一个替代的解决方案
为了保持向后兼容,我们需要用老版本平台的UI框架特性来实现新本版的UI框架特性,这是一件非常具有挑战性的任务。在很多情况下,我们是完全可以做到这一点的,请看下边的例子:
- Action bars能够用一个 horizontalLinearLayout在你Activity Layout中实现,这个LinearLayout可以添加一个自定义的标题或者是Views,加上image buttons,执行的动作可以在设备的Menu button来显示。
- Action bar tabs可以用horizontal LinearLayout加上按钮或者用TabWidget UI来实现。
- NumberPicker和Switch部件可以用Spinner和ToggleButton部件分别实现。
- ListPopupWindow和PopupMenu部件可以用PopupWindow部件来实现。
一般情况下,我们无法找到一个完美的方案,可以把新UI组件的完全的移植到旧版本的设备上。在这个问题上我们应该多考虑一下用户体验,使用老版本设备的用户可能对新版本的设计模式并不熟悉。因此我们在实现的时候要考虑相同的功能实现尽量用用户熟悉的方式来实现。很多情况下我们不必过于担心这个问题,如果这个新的UI组件在应用程序的环境中设计的比较优秀(比如:'''Action Bar''')或者交互模式非常简单和直观的(比如:'''Swip Views'''应用 ViewPager。
用较早版本API实现Tabs
我们可以用TabWidget和TabHost 我们也可以用horizontally laid-out Button部件来实现'''ActionBar'''标签。因为我们使用了Android 2.0 (Eclair)以下的APIs,所以我们的实现类名字叫做TabHelperEclair和CompatTabEclair:
图1:Eclair实现tabs的类图
实现CompatTabEclair时需要在变量中保存tab的属性,比如:text、icon等。因为我们已经没有现成的ActionBar.Tab可以帮助来处理这些属性了。
1 2 3 4 5 6 7 8 910111213141516
public class CompatTabEclair extends CompatTab { // Store these properties in the instance, // as there is no ActionBar.Tab object. private CharSequence mText; ... public CompatTab setText(int resId) { // Our older implementation simply stores this // information in the object instance. mText = mActivity.getResources().getText(resId); return this; } ... // Do the same for other properties (icon, callback, etc.)}
实现TabHelperEclair时需要需要用到TabHost部件来创建TabHost.TabSpec对象和tab indicators:
1 2 3 4 5 6 7 8 91011121314151617181920212223242526
public class TabHelperEclair extends TabHelper { private TabHost mTabHost; ... protected void setUp() { if (mTabHost == null) { // Our activity layout for pre-Honeycomb devices // must contain a TabHost. mTabHost = (TabHost) mActivity.findViewById( android.R.id.tabhost); mTabHost.setup(); } } public void addTab(CompatTab tab) { ... TabSpec spec = mTabHost .newTabSpec(tag) .setIndicator(tab.getText()); // And optional icon ... mTabHost.addTab(spec); } // The other important method, newTab() is part of // the base implementation.}
现在我们有CompatTab和TabHelper的两个实现类了,一个用在Android 3.0或者更新的版本的APIs中,一个用在Android 2.0或更新版本的APIs中,下节课我们将讨论如何在我们的应用中使用这样两个实现类。
- 用较早版本的APIs实现抽象类
- Creating an Implementation with Older APIs 用较早版本的APIs实现抽象类
- Abstracting the New APIs 抽象出新的API
- 实现抽象类内部的抽象方法
- python抽象类、抽象方法的实现
- Android SDK Manage无法下载各个版本的APIs
- Accessible抽象类的实现
- C++抽象类的实现
- 抽象类、抽象方法、接口的区别及实现
- 黑马程序员--Java基础学习笔记之抽象类和接口、内存结构分析、Java APIs
- 实现接口的抽象类的用处
- 接口的重实现与抽象类
- 抽象类实现接口的意义
- Java AbstractFactory 抽象工厂类的实现
- 抽象类的继承与方法实现
- OC实战: 抽象类的实现
- 抽象类的实现及派生
- python:抽象超类的实现
- android辅助开发工具包介绍
- Windows平台JDK安装
- 如何在Linux平台下安装JDK
- 如何在Windows环境下安装JDK
- 如何运行你的Android程序?
- 用较早版本的APIs实现抽象类
- Eclipse_Configure
- 【Android开发】Api_Android_Distribute
- Android开发环境搭建篇详尽的教程实例汇
- WIN32界面开发之二:GDI+中的局部刷新技术
- 【Android开发】之Android环境搭建及HelloWorld
- 我要搬家到csdn,大家到那里来看我吧,平台更大,看到的人更多!
- 在win7上使用eclipse上传文件到rhel的HDFS上
- 7-17 jsp