- 浏览: 2204276 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 635本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1111颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 1005从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1181Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1020Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 848前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 937监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 808在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 979最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1344##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1143当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 791setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1525问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 781底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1792点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1383import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2337TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1567一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 880Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 941最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
白色简洁的艺术展示网页模板下载.zip
电商平台开发需求文档.doc
1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用KEIL 标准库开发,当前在STM32F030C8T6运行,如果是STM32F030其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、编译时请注意提示,请选择合适的编译器版本。
数电期末练习题.doc
交易流水证明_用于材料证明_20241225_174557.zip
计算机网络期末复习(第八版)谢希仁
汽车销售系统使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理汽车销售系统信息,查看汽车销售系统信息,管理汽车销售系统。 用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还进行了对用户名称的模糊查询的条件。 汽车信息管理页面,此页面提供给管理员的功能有:查看已发布的汽车信息数据,修改汽车信息,汽车信息作废,即可删除,还进行了对汽车信息名称的模糊查询 汽车信息信息的类型查询等等一些条件。 汽车类型管理页面,此页面提供给管理员的功能有:根据汽车类型进行条件查询,还可以对汽车类型进行新增、修改、查询操作等等。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
电视盒子的远程输入法应用,可跨屏远程输入和跨屏远程控制盒子.7z
白色大气的旅游度假酒店企业网站模板下载.zip
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
标题中的“用python代码放烟花”表明我们将讨论如何使用Python编程语言来模拟烟花绽放的效果。在Python编程中,实现这样的视觉效果通常涉及到图形用户界面(GUI)或者更具体地说是图形渲染。描述中的内容与标题一致,暗示我们将深入探讨一个使用Python编写的烟花模拟程序。 `main.py`是这个项目的核心文件,它很可能是整个烟花秀的主入口点。在这个文件中,开发者可能定义了程序的主循环,以及调用其他模块如`particle.py`的代码。`particle.py`可能包含了粒子系统的设计,因为烟花效果通常是通过模拟无数粒子的运动来实现的。粒子系统是一种常见的计算机图形学技术,用于模拟大量独立对象(在这里是烟花)的行为。 在`particle.py`中,我们可以预期找到类或函数来定义烟花粒子的属性,比如位置、速度、颜色、生命周期等。这些粒子可能会随着时间的推移而改变状态,例如从升空到爆炸,再到散开形成绚丽的图案。开发者可能使用了物理学原理,如重力和随机力,来模拟粒子的运动。 `.gitignore`文件是一个配置文件,告诉Git版本控制系统忽略特定的文件或目录。在这个项目中,它可
白色创意风格的图片浏览源码下载.zip
白色大气风格的设计公司CSS3单页模板.zip
Chapter 03 复合数据类型-1(资源)项目中编写代码部分的源代码示例,包括石头剪刀布程序和用户登录以及增删改查程序
白色大气风格的电子邮件订阅模板下载.zip
IMG_20241225_230314.jpg
白色简洁风格的安卓游戏卡通动漫人物整站网站模板.zip
变电站红外电压电流互感器绝缘子检测图像数据集,数据集总共1600张左右图片,标注为VOC格式图像数据集,数据集总共1600张左右图片,标注为VOC格式。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。