- 浏览: 363937 次
文章分类
- 全部博客 (401)
- hibernate 入门 (24)
- it生活 (3)
- MapReduce 算法设计 (1)
- Android (13)
- java (6)
- web (4)
- 技术文章 (9)
- javascript (1)
- html5 (1)
- 数据库 (3)
- jquary (1)
- 1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
- 2.Java新手区 (0)
- 4.其他技术区 (0)
- 6.转载区(Java技术文章转载, 请注明原文出处) (0)
- 5.提问区(Java方面的技术提问) (0)
- servlet (1)
- IT 生活 (2)
- Struts2 (2)
- Struts 2 教程 (2)
- jQuery (1)
- DOM (1)
- ibatis,hibernate (1)
- 数据分析师 (1)
最新评论
-
NIIT_zhu:
我现在要做一个 基于exchange 2010的webmail ...
Exchange 2003 升级到Exchange 2010 之申请证书并分配服务! -
yinren13:
实在不行试试简单易用的turbomeeting,连接速度很快的 ...
QQ远程协助没动静?QQ版本有讲究 -
jicu7766240:
写得很好。赞一个!2年开发的我深有感触。这些我觉得说得很对。要 ...
老程序员的忠告:不要做浮躁的软件工程师 -
haohao-xuexi02:
好像很多人都买起却看不起书。。找各种理由不看。。我的书也这样 ...
老程序员的忠告:不要做浮躁的软件工程师 -
Judy123456:
希望可以提供源代码噢,我最近正好在学这个底部菜单,非常希望楼 ...
Android仿微信底部菜单
Dependencies and prerequisites[前提条件]
- Android 1.6 or higher (2.1+ for the sample app)
- Basic knowledge of Activities and Fragment
- Experience building an Android User Interface
- Several features require the use of the support library
You should also read
Try it out
Download the sample app
NewsReader.zip
Android powers hundreds of device types with several different screen sizes, ranging from small phones to large TV sets. Therefore,it’s important that you design your application to be compatible with all screen sizes so it’s available to as many users as possible.
[显然,Android设备屏幕不一,为了更好的用户体验,我们必须做适配不同屏幕的操作]
Supporting Different Screen Sizes[支持不同的屏幕大小]
This lesson teaches you to
- Use "wrap_content" and "match_parent"
- Use RelativeLayout
- Use Size Qualifiers
- Use the Smallest-width Qualifier
- Use Layout Aliases
- Use Orientation Qualifiers
- Use Nine-patch Bitmaps
Use "wrap_content" and "match_parent"[使用wrap_content与match_parent而不是hard-coded]
"wrap_content"
, the width or height of the view is set to the minimum size necessary to fit the content within that view, while "match_parent"
(also known as"fill_parent"
before API level 8) makes the component expand to match the size of its parent view.wrap_content:宽高根据内容大小调整
match_parent:伸展至与父控件一致
显然我们不能hard-coded(写死大小)
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <LinearLayout android:layout_width="match_parent"
- android:id="@+id/linearLayout1"
- android:gravity="center"
- android:layout_height="50dp">
- <ImageView android:id="@+id/imageView1"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:src="@drawable/logo"
- android:paddingRight="30dp"
- android:layout_gravity="left"
- android:layout_weight="0" />
- <View android:layout_height="wrap_content"
- android:id="@+id/view1"
- android:layout_width="wrap_content"
- android:layout_weight="1" />
- <Button android:id="@+id/categorybutton"
- android:background="@drawable/button_bg"
- android:layout_height="match_parent"
- android:layout_weight="0"
- android:layout_width="120dp"
- style="@style/CategoryButtonStyle"/>
- </LinearLayout>
- <fragment android:id="@+id/headlines"
- android:layout_height="fill_parent"
- android:name="com.example.android.newsreader.HeadlinesFragment"
- android:layout_width="match_parent" />
- </LinearLayout>
下面是相应的layout出现的屏幕
Use RelativeLayout[使用相对布局]
[如果我们需要一个相对的位置而不是仅仅是直线型的布局,那么我们可以使用RelativeLayout]
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <TextView
- android:id="@+id/label"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="Type here:"/>
- <EditText
- android:id="@+id/entry"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/label"/>
- <Button
- android:id="@+id/ok"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/entry"
- android:layout_alignParentRight="true"
- android:layout_marginLeft="10dp"
- android:text="OK" />
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toLeftOf="@id/ok"
- android:layout_alignTop="@id/ok"
- android:text="Cancel" />
- </RelativeLayout>
上面图片是:Screenshot on a QVGA screen (small screen).
上面图片是:Screenshot on a WSVGA screen (large screen).
Use Size Qualifiers[使用大小标识符]
- [虽然我们可以用上面的方法定义布局文件,让其在不同的情况下进行拉伸等动作,可是在某些比较大的屏幕,比如平板与TV上面还是不太适合,我们最好可以在这种情况下使用两套不同的布局文件来适配大小,我们可以使用大小标示符来标记不同的布局,让机器在运行程序的时候根据自身的大小来选择显示哪个布局]
- [通常在 Tablets and TVs的AP上使用"two pane"的布局,这样]
-
res/layout/main.xml
, single-pane (default) layout:- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <fragment android:id="@+id/headlines"
- android:layout_height="fill_parent"
- android:name="com.example.android.newsreader.HeadlinesFragment"
- android:layout_width="match_parent" />
- </LinearLayout>
-
res/layout-xlarge/main.xml
, two-pane layout:- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="horizontal">
- <fragment android:id="@+id/headlines"
- android:layout_height="fill_parent"
- android:name="com.example.android.newsreader.HeadlinesFragment"
- android:layout_width="400dp"
- android:layout_marginRight="10dp"/>
- <fragment android:id="@+id/article"
- android:layout_height="fill_parent"
- android:name="com.example.android.newsreader.ArticleFragment"
- android:layout_width="fill_parent" />
- </LinearLayout>
[“xlarge”可以用来标示哪些屏幕比较大的情况,在那些设备上,系统会自动选择two-pane的布局,对于其他小点的设备就会自动选择default的布局]
Use the Smallest-width Qualifier [使用最小宽度标识符]
- 在很多时候我们不方便判断具体多大的屏幕才叫做large[比如5“与7”的设备],所以在Android 3.2之后引入了sw600dp,这样的方式来表示那些屏幕宽度至少是600dp以上的设备[通常7“的设备都至少会有600dp的宽],
- 我们这可以这样定义一个布局文件:res/layout-sw600dp/main.xml(这是一个two-pane的布局),这样设置之后,系统会在设备屏幕宽至少600dp的时候自动选择显示这个布局文件,当然小于的情况下就会选择默认的
res/layout/main.xml布局文件。
- However,我们不能在Android 3.2之前的设备上使用这样的表示方法,仍然需要使用xlarge来处理这样的大屏幕情况
Use Layout Aliases [使用布局文件别名]
因为3.2之前不支持使用Smallest-width的标识符,为了兼容之前的设备,我们仍然需要使用一些抽象的大小标识符(small, normal, large and xlarge),有时候我们会出现定义了重复的布局文件的情况,比如
res/layout/main.xml:
single-pane layoutres/layout-xlarge:
multi-pane layout (这个文件是用来兼容3.2之前的设备)res/layout-sw600dp:
multi-pane layout (这个文件可以在3.2上进行使用,但是与上面的布局文件一致,都是two-pane的布局)
为了避免这样的duplication(重复的)文件,我们可以为重复的布局取个别名
res/layout/main.xml
, single-pane layoutres/layout/main_twopanes.xml
, two-pane layout
这样以后,我们可以这样重新定义上面那两个布局文件
-
res/values-xlarge/layout.xml
:
- <resources>
- <item name="main" type="layout">@layout/main_twopanes</item>
- </resources>
-
res/values-sw600dp/layout.xml
:
- <resources>
- <item name="main" type="layout">@layout/main_twopanes</item>
- </resources>
这样一来,就只需写一份two-pane的布局文件,两个布局设置都引用它 [这个设计很容易理解,通常很多地方我们都有这样做过]
Use Orientation Qualifiers [使用方向标识符]
一些布局可以很好的自动适配横屏landscape与竖屏portrait,但是我们最好是针对不同的方向设置不同的布局会比较好
比如我们现在有这样一个需求:
- small screen, portrait: single pane, with logo
- small screen, landscape: single pane, with logo
- 7" tablet, portrait: single pane, with action bar
- 7" tablet, landscape: dual pane, wide, with action bar
- 10" tablet, portrait: dual pane, narrow, with action bar
- 10" tablet, landscape: dual pane, wide, with action bar
我们可以使用上面说的别名方法,对上面的需求抽取出一些公共的布局元素,定义下面几个布局:
res/layout/onepane.xml:
res/layout/onepane_with_bar.xml:
res/layout/twopanes.xml
:res/layout/twopanes_narrow.xml
:
这样以来,我们需要在setContentView的时候选择main_layout就可以了,系统会选择到相应的Value里面取出对应的布局文件进行显示
-
res/values/layouts.xml
:
- <resources>
- <item name="main_layout" type="layout">@layout/onepane_with_bar</item>
- <bool name="has_two_panes">false</bool>
- </resources>
-
res/values-sw600dp-land/layouts.xml
:
- <resources>
- <item name="main_layout" type="layout">@layout/twopanes</item>
- <bool name="has_two_panes">true</bool>
- </resources>
-
res/values-sw600dp-port/layouts.xml
:
- <resources>
- <item name="main_layout" type="layout">@layout/onepane</item>
- <bool name="has_two_panes">false</bool>
- </resources>
-
res/values-xlarge-land/layouts.xml
:
- <resources>
- <item name="main_layout" type="layout">@layout/twopanes</item>
- <bool name="has_two_panes">true</bool>
- </resources>
-
res/values-xlarge-port/layouts.xml
:
- <resources>
- <item name="main_layout" type="layout">@layout/twopanes_narrow</item>
- <bool name="has_two_panes">true</bool>
- </resources>
Use Nine-patch Bitmaps[使用9-patch图片]
- nine-patch bitmaps:which are specially formatted PNG files that indicate which areas can and cannot be stretched. [一种有限制的可伸缩的图片格式,为了避免通常的图片在伸缩后出现的不某些不适配,比如图片中有个logo,你不希望这个logo随拉伸而拉伸,那么我们就应该使用这种格式的图片来定义哪些区域可以拉伸]
发表评论
-
android44个常用的权限三
2012-04-20 20:15 109621、android.permission.CHANGE_NE ... -
android44个常用的权限二
2012-04-20 20:13 92311、android.permission.BLUETOO ... -
android44个常用的权限一
2012-04-20 20:03 8361、android.permission.ACCESS_CHE ... -
Android 操作权限大全 (android.permission)
2012-04-20 20:01 1265Android 操作权限大全 (android.perm ... -
android 界面布局 很好的一篇总结
2012-04-19 16:20 1422布局: 在 android 中我们常用的布局方 ... -
Android仿微信底部菜单
2012-04-19 16:18 3934今天终于把公司的界面原型做完了, ... -
Android截取字符串
2012-04-19 16:16 2925String str = "a=111,b=222, ... -
Android开发教程之--sql语句
2012-04-18 18:26 984一、创建/删除表 String sql="C ... -
Android 提高显示布局文件的性能[Lesson 2 - 使用include标签重用Layout]
2012-04-17 23:36 1366Re-using Layouts with <in ... -
Android 提高显示布局文件的性能[Lesson 1 - 优化布局层级]
2012-04-17 23:35 1574Optimizing Layout Hierarchie ... -
Android适配不同的屏幕[Lesson 3 - 实现可适配的UI流程]
2012-04-17 23:34 1370Implementing Adaptative UI F ... -
Android 适配不同的屏幕[Lesson 2 - 适配不同屏幕密度]
2012-04-17 23:33 1433Supporting Different Densiti ...
相关推荐
- 适配不同语言环境,实现多语言支持。 - 优化布局以适应各种屏幕尺寸和密度。 - 兼容不同的Android系统版本。 9. **管理Activity的生命周期** - 深入理解Activity的生命周期方法。 - 处理Activity的启动、...
Android培训课程中文版v0.9.2是一份全面、深入的Android开发者学习资源,旨在帮助新手和经验丰富的开发者提升技能,掌握Android应用开发的核心概念和技术。这份资料特别强调了本地HTML的使用,这对于构建离线可用的...
【标题】"攻防世界Training-Stegano-1" 是一个关于信息安全领域的训练题目,主要涉及的是隐写术(Steganography)技术。隐写术是一种隐藏信息的技术,通常用于在图像、音频或文本中嵌入秘密数据,使得非授权者无法...
本压缩包"tangjiadong-Training-master-master.zip"中包含的"Training-master"项目,正是一个基于SSM框架的高职技能大赛管理系统,它为我们提供了一个学习和实践SSM技术的绝佳案例。 首先,我们来了解一下SSM框架的...
Android开发平台技术资料,Android开发平台技术资料
Android开发平台的技术资料,上层应用程序的开发
在"书籍 ansible-training-answer-keys-master 的随带例子代码"中,你将找到一系列实践示例,帮助你深入理解 Ansible Playbook 的使用。 首先,让我们了解一下 Ansible Playbook 的基本结构。一个 Playbook 包含一...
在Android开发领域,Android Training是一系列官方提供的教程和实践课程,旨在帮助开发者提升技能,创建高质量的Android应用程序。这些教程涵盖了从基础到高级的各种主题,包括用户界面设计、性能优化、网络通信、...
Android Development Training Course Repository Android アプリ開発の基礎知識と実務スキルを身に付けるトレーニングコース 前提 このトレーニングコースに入る前に、下記の知識・スキルについて勉強しておいてく...
本手册为“sgx-web-training-Lab-Manual-v1.0”,旨在指导读者如何一步步深入使用Intel SGX技术。文档强调实践操作,涵盖从系统配置到项目建立,再到Intel SGX的具体应用过程。配合B站视频,该实训文档构成了一个...
### Android Training Course in Chinese #### 一、Android入门基础 - **建立第一个App** - 创建Android项目:通过Android Studio等开发工具,选择合适的模板快速搭建Android应用的基础框架。 - 执行Android程序...
《PyPI官网下载:xt_training-1.1.2-py3-none-any.whl》 在Python编程领域,PyPI(Python Package Index)是官方的软件仓库,它为开发者提供了丰富的第三方库,使得用户可以方便地下载和安装这些库。在本话题中,...
1. **时钟树检查**:检查时钟树的结构,防止由于非MUX组合门导致的潜在时钟毛刺(如Clock_info05b所示)。例如,不适当的逻辑门可能会引入时钟树中的不稳定,增加时钟抖动风险。此外,检查时钟树中不应出现的门,如...
为了保证良好的用户体验,Navigation设计应考虑不同屏幕尺寸和横竖屏的适配。ListView的布局可能需要根据屏幕尺寸进行调整,以确保所有条目都能正确显示。 9. **测试和调试** 在实现Navigation时,确保对各种...
training-linear-layout
Android training docs
Android Training-Cast 2015-Marcos Rafael da S Cavalheiro。 2015/08/02 在客户列表屏幕上包括搜索字段。 2015年7月30日 评估完成 包含登录验证 如果无效或没有互联网,则包括对CEP的验证。 包含CEP的搜索...
4. `training-mobility-example.cc`:移动性模型是VANET仿真中的重要组成部分,这个文件可能是介绍或实现不同移动模型的示例,如随机游走、GPSR(Greedy Perimeter Stateless Routing)等,以模拟车辆的动态行为。...