- 浏览: 2143557 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
日前developer.android.com 的首席技术作家 Scott Main 为 Android Developers Blog 撰写了一篇文章介绍如何把为Android 3.0平板开发的程序移植到即将发布的Ice Cream Sandwich 系统上.
在文中 Scott Main 还提到,Android系统从Ice Cream Sandwich以后都将保持让同一个App运行在各种尺寸的屏幕上,让开发者不再为屏幕尺寸不统一而烦恼!
但是 那些为 Honeycomb 系统而开发的平板程序,是针对大尺寸屏幕设计的, 在Ice Cream Sandwich 尚未发布的时候 这些程序还不会对用户照成什么干扰, 而 在Ice Cream Sandwich发布以后 就不是这么一回事了, 由于Android系统是向后兼容的, 所以等Ice Cream Sandwich系统发布以后,有用户使用该系统的小屏幕手机来使用你为Honeycomb开发的大屏幕程序就会出现问题. 为了避免这种伤害用户的行为,现在你就可以开始修改你的程序了.
对于那些专门为Honeycomb平板而开发的程序,需要做两件事情:
1.阻止该程序安装到小屏幕设备上;
2.修改该程序 使其可以兼容小屏幕设备
只支持Honeycomb平板
如果你的程序只支持大屏幕的平板,则修改程序是比较简单的,只需要在 manifest 文件中添加 <supports-screens> 标签即可:
上面的配置文件说明了:
1.程序不支持 “small”, “normal”, and “large”这3种类型的屏幕, 这些属性应用于3.1或3.1之前的系统,通常这些类型的设备都不是平板
2.requiresSmallestWidthDp属性应用于3.1之后的系统,定义了该程序需要的最小屏幕宽度为600dp, 这通常是大于等于7英寸的屏幕, 如果你的程序是为大于等于9英寸的屏幕设计的,则可以设置该值为 720dp.
由于添加了requiresSmallestWidthDp 这个属性,所以你的程序需要使用3.2或者更新的SDK来编译和发布. 在开发程序的时候 为了保险起见,建议先使用minSdkVersion 指定版本的SDK来开发程序,等程序开发好了再加上requiresSmallestWidthDp这个属性,然后使用3.2版本的SDK来发布程序. 这样的话 就避免了你无意中使用了3.2中的API而导致程序在低版本系统上崩溃的情况.
让Honeycomb程序支持小屏幕设备
如果你想让为平板系统开发程序也运行在小屏幕设备上,则推荐修改你的程序让其支持小屏幕,而不是发布多个APK来支持不同的屏幕.
由于Ice Cream Sandwich支持 Honeycomb的所有API,所以对于支持以下2要素的app 在移植这些程序的时候并不是很复杂.
使用Fragments 来设计程序,这样可以在不同的屏幕上重用该设计,在小屏幕上使用单个面板布局;在大屏幕上使用多个面板布局
注意Action Bar 的设计要灵活,这样当屏幕空间不可用的时候,系统可以把Action Bar 转化为菜单显示
下面我们将介绍一种简单适配的开发方法:
上图显示了在小屏幕和大屏幕设备上使用fragment的显示方式.
在上图所示的App中, Activity A 是程序入口,其根据屏幕大小用不同的layout文件来显示一个或者两个fragments. 当在小屏幕设备上 layout文件只包含Fragment A(图中的List View);当在大屏幕设备(平板)上 layout文件包含Fragment A和Fragment B 两个Fragments.
下面是用于小屏幕的layout文件: res/layout/main.xml
下面是用于大屏幕的layout文件:res/layout-large/main.xml
当用户选择列表中的一个选项的时候, 程序如何响应依赖于Fragment B是否显示在当前layout中. 如果Fragment B显示则 Activity A只要通知Fragment B更新自己就可以了; 如果Fragment B没有显示 则Activity A启动 Activity B(Activity B用来显示Fragment B);
1.要在你的程序中使用这种设计模式,需要每个Fragment都相对独立. 下面有两个建议:
不要直接从一个Fragment中操作另外一个Fragment
2.把和Fragment中包含的内容有关的代码放到该Fragment中, 而不是把这些代码放到该Fragment的Activity中.
为了避免直接从一个Fragment中调用另外一个Fragment, 可以在每个Fragment中都声明一个回调接口,可以通过该接口把事件通知给该Fragment所在的Activity(该Activity实现回调接口),当Activity收到事件的时候 就根据Fragment的配置来触发不同的操作.
例如 在上图所示的 Activity A 中 ,当用户选择一个ListItem的时候的动作如下:
当DisplayActivity (Activity B) 启动的时候, 通过读取Intent中的数据来显示对应的内容.
如果 Fragment B 需要告诉 Fragment A 一个处理结果, 那么实现的逻辑是一样
如果 Fragment B 需要告诉 Fragment A 一个处理结果, 那么实现的逻辑是一样的, Fragment B 和 Activity B 通过回调接口来传递事件. 具体就是: Activity B 实现一个由 Fragment B 定义的回调接口.当 Activity B 收到事件,就设置结果然后关闭(finish)自己. Activity A 收到事件 然后通知 Fragment A.
具体示例可以下载这个项目( Honeycomb Gallery sample)来看看.
对于 Action Bar的设计 可以参考 前面的一篇文章: 使用XML文件来配置Android程序的菜单
最后 就是不用忘记了测试下你的App, 看看其行为是否一致.
当然了 在Ice Cream Sandwich SDK发布之前 你是没法测试小屏幕的, 但是这里偷偷的告诉你一个小窍门, 你可以在Honeycomb中通过屏幕方向来分别代表不同的屏幕尺寸. 例如 竖屏的时候 使用小屏幕的布局文件; 横屏的时候使用大屏幕的布局文件, 这样只要旋转下屏幕就可以测试~\(≧▽≦)/~啦啦啦.
在文中 Scott Main 还提到,Android系统从Ice Cream Sandwich以后都将保持让同一个App运行在各种尺寸的屏幕上,让开发者不再为屏幕尺寸不统一而烦恼!
但是 那些为 Honeycomb 系统而开发的平板程序,是针对大尺寸屏幕设计的, 在Ice Cream Sandwich 尚未发布的时候 这些程序还不会对用户照成什么干扰, 而 在Ice Cream Sandwich发布以后 就不是这么一回事了, 由于Android系统是向后兼容的, 所以等Ice Cream Sandwich系统发布以后,有用户使用该系统的小屏幕手机来使用你为Honeycomb开发的大屏幕程序就会出现问题. 为了避免这种伤害用户的行为,现在你就可以开始修改你的程序了.
对于那些专门为Honeycomb平板而开发的程序,需要做两件事情:
1.阻止该程序安装到小屏幕设备上;
2.修改该程序 使其可以兼容小屏幕设备
只支持Honeycomb平板
如果你的程序只支持大屏幕的平板,则修改程序是比较简单的,只需要在 manifest 文件中添加 <supports-screens> 标签即可:
<manifest ... > <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="false" android:xlargeScreens="true" android:requiresSmallestWidthDp="600" /> <application ... > ... </application> </manifest>
上面的配置文件说明了:
1.程序不支持 “small”, “normal”, and “large”这3种类型的屏幕, 这些属性应用于3.1或3.1之前的系统,通常这些类型的设备都不是平板
2.requiresSmallestWidthDp属性应用于3.1之后的系统,定义了该程序需要的最小屏幕宽度为600dp, 这通常是大于等于7英寸的屏幕, 如果你的程序是为大于等于9英寸的屏幕设计的,则可以设置该值为 720dp.
由于添加了requiresSmallestWidthDp 这个属性,所以你的程序需要使用3.2或者更新的SDK来编译和发布. 在开发程序的时候 为了保险起见,建议先使用minSdkVersion 指定版本的SDK来开发程序,等程序开发好了再加上requiresSmallestWidthDp这个属性,然后使用3.2版本的SDK来发布程序. 这样的话 就避免了你无意中使用了3.2中的API而导致程序在低版本系统上崩溃的情况.
让Honeycomb程序支持小屏幕设备
如果你想让为平板系统开发程序也运行在小屏幕设备上,则推荐修改你的程序让其支持小屏幕,而不是发布多个APK来支持不同的屏幕.
由于Ice Cream Sandwich支持 Honeycomb的所有API,所以对于支持以下2要素的app 在移植这些程序的时候并不是很复杂.
使用Fragments 来设计程序,这样可以在不同的屏幕上重用该设计,在小屏幕上使用单个面板布局;在大屏幕上使用多个面板布局
注意Action Bar 的设计要灵活,这样当屏幕空间不可用的时候,系统可以把Action Bar 转化为菜单显示
下面我们将介绍一种简单适配的开发方法:
上图显示了在小屏幕和大屏幕设备上使用fragment的显示方式.
在上图所示的App中, Activity A 是程序入口,其根据屏幕大小用不同的layout文件来显示一个或者两个fragments. 当在小屏幕设备上 layout文件只包含Fragment A(图中的List View);当在大屏幕设备(平板)上 layout文件包含Fragment A和Fragment B 两个Fragments.
下面是用于小屏幕的layout文件: res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/list_frag" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout>
下面是用于大屏幕的layout文件:res/layout-large/main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/frags"> <fragment android:id="@+id/list_frag" android:layout_width="@dimen/titles_size" android:layout_height="match_parent"/> <fragment android:id="@+id/details_frag" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
当用户选择列表中的一个选项的时候, 程序如何响应依赖于Fragment B是否显示在当前layout中. 如果Fragment B显示则 Activity A只要通知Fragment B更新自己就可以了; 如果Fragment B没有显示 则Activity A启动 Activity B(Activity B用来显示Fragment B);
1.要在你的程序中使用这种设计模式,需要每个Fragment都相对独立. 下面有两个建议:
不要直接从一个Fragment中操作另外一个Fragment
2.把和Fragment中包含的内容有关的代码放到该Fragment中, 而不是把这些代码放到该Fragment的Activity中.
为了避免直接从一个Fragment中调用另外一个Fragment, 可以在每个Fragment中都声明一个回调接口,可以通过该接口把事件通知给该Fragment所在的Activity(该Activity实现回调接口),当Activity收到事件的时候 就根据Fragment的配置来触发不同的操作.
例如 在上图所示的 Activity A 中 ,当用户选择一个ListItem的时候的动作如下:
/** This is a callback that the list fragment (Fragment A) calls when a list item is selected */ public void onItemSelected(int position) { DisplayFragment fragB = (DisplayFragment) getFragmentManager() .findFragmentById(R.id.display_frag); if (fragB == null) { // DisplayFragment (Fragment B) is not in the layout, // start DisplayActivity (Activity B) // and pass it the info about the selected item Intent intent = new Intent(this, DisplayActivity.class); intent.putExtra("position", position); startActivity(intent); } else { // DisplayFragment (Fragment B) is in the layout, tell it to update fragB.updateContent(position); } }
当DisplayActivity (Activity B) 启动的时候, 通过读取Intent中的数据来显示对应的内容.
如果 Fragment B 需要告诉 Fragment A 一个处理结果, 那么实现的逻辑是一样
如果 Fragment B 需要告诉 Fragment A 一个处理结果, 那么实现的逻辑是一样的, Fragment B 和 Activity B 通过回调接口来传递事件. 具体就是: Activity B 实现一个由 Fragment B 定义的回调接口.当 Activity B 收到事件,就设置结果然后关闭(finish)自己. Activity A 收到事件 然后通知 Fragment A.
具体示例可以下载这个项目( Honeycomb Gallery sample)来看看.
对于 Action Bar的设计 可以参考 前面的一篇文章: 使用XML文件来配置Android程序的菜单
最后 就是不用忘记了测试下你的App, 看看其行为是否一致.
当然了 在Ice Cream Sandwich SDK发布之前 你是没法测试小屏幕的, 但是这里偷偷的告诉你一个小窍门, 你可以在Honeycomb中通过屏幕方向来分别代表不同的屏幕尺寸. 例如 竖屏的时候 使用小屏幕的布局文件; 横屏的时候使用大屏幕的布局文件, 这样只要旋转下屏幕就可以测试~\(≧▽≦)/~啦啦啦.
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 564本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1021颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 923从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1029Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 893Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 762前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 849监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 724在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 820最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1220##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 993当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 671setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1396问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 675底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1654点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1287import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2196TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1442一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 787Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 883最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
Android4.0的Launcher相比 2.X 有较大的变化,这里的4.0源码将对您研究Launcher提供一些参考和帮助
投诉预约 一个用于投诉预订的 Android 应用程序,使用带有 AppCompatibility 的 Material Design 向后支持高达 android 4.0 Icecream Sandwich
Android 系统4.0 命名为 Ice Cream Sandwich(简称ICS,冰淇淋三明治),是谷歌发布新一代操作系统。Android4.0 拥有十大重点新特性。集成谷歌电视和Chrome OS的智能停放 ,运行速度得到进一步提升。2011年10月19日...
App: UC Browser Version: 13.0.0.1288 (70024) x86 Min: Android 4.0 (Ice Cream Sandwich, API 14) Target: Android 9.0 (Pie, API 28) January 21, 2020
App: UC Browser Version: 13.2.8.1301 (50139) armeabi-v7a Min: Android 4.0 (Ice Cream Sandwich, API 14) Target: Android 9.0 (Pie, API 28) July 27, 2020
App: UC Browser Version: 13.2.0.1296 (50142) arm64-v8a Min: Android 4.0 (Ice Cream Sandwich, API 14) Target: Android 9.0 (Pie, API 28) August 11, 2020
Android 4.0 SDK 已经出来好一段时间了,早就想试试这个版本到底怎样,好久没做android开发了,之前还是用Android2.2开发的,看这图貌似长得跟冰淇淋一样,所以叫 Ice Cream Sandwich(冰淇淋三明治),蛮有趣的。
Or Android 4.0 Ice Cream Sandwich if you don't use RenderScript How to use For a working implementation, Have a look at the Sample Project - app Include the library as local library project. compile...
完整中文版,免费下载 三星联手谷歌在香港正式发布了第三代Google Nexus产品——...众所周知,4.65英寸720p HD Super AMOLED屏幕,以及Android 4.0 Ice Cream Sandwich系统,此两大要素确保了GALAXY Nexus的唯一性。
根CHKR 一个简单,轻巧,无广告的Root Checker应用程序,适用于Android Ice Cream Sandwich或更高版本。 简单而优雅:按下(仅)按钮,可以告诉您手机是否植根
适用于Android的身份验证表格 基本概述 基于Firebase的Android身份验证表单,具有少量功能,自定义动画和设计。 特征 使用电子邮件和密码进行注册活动,还将用户名和密码存储到数据库中。 使用电子邮件/密码的登录...
快艇 一个简单的 Android 应用程序,用于使用 Raspberry Pi 远程控制船原型。 基本上,导航系统包括在 2D 计划中定义运动的方向和强度... 当前所需的最低 SDK 为 14(Android 4.0 Ice Cream Sandwich)。 部分应用图片
这些部分标题贴在顶部,就像在 Android 4.0 Ice Cream Sandwich 的新人物应用程序中一样。 这种行为也可以在 iOS 设备上的部分列表中找到。 如果您只需要节标题,则此库也可用于没有粘性功能。 StickyListHeaders ...
支持 Android 4.0 (Ice Cream Sandwich)及以上版本。用法public class MainActivity extends AppCompatActivity { JsEvaluator jsEvaluator = new JsEvaluator(this);Evaluate JavaScriptjsEvaluator....
How to use to some OpenGL optimizations and to Renderscript, a new feature in Android 3.0 (Honeycomb) and expanded in Android 4.0 (Ice Cream Sandwich). After reading and using this book, you’ll be a...
Revised and expanded to cover all the Android SDK releases including Android 4.0 (Ice Cream Sandwich), including all updated APIs, and the latest changes to the Android platform. Explains new and ...
Revised and expanded to cover all the Android SDK releases including Android 4.0 (Ice Cream Sandwich), including all updated APIs, and the latest changes to the Android platform. Explains new and ...
对于Android4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有ActionBar功能的版本,基于Ice CreamSandwich的自定义动作栏实现将自动围绕布局。能够让开发者轻松开发一款带动作栏...
Android操作系统版本采用Android 4.0 ICS (Ice Cream Sandwich) 全新的用户界面,快速的应用处理能力,使得用户体验更加流畅,提供开放的软件资源,并对软件进行不断的完善和优化,其软件的可靠性、稳定性得到进一步...