本帖最后由 王震阳老师 于 2015-3-23 22:22 编辑
Android基础-04Android基础04样式主题_国际化
1. Android中的样式和主题(★★)1.1样式样式是作用在控件上的,是它是一个包含一个或者多个view控件属性的集合,例如定义属性fontColor、fontSize、layout_width、layout_height等,以独立的资源文件存放在XML文件中,并设置样式的名称。 Android Style类似网页设计中的级联样式CSS设计思路,可以让设计与内容分离,并且可以方便的继承、覆盖、重用。 下面通过一个简单的案例演示自定义样式的用法,在该案例中,我们自定义一个样式用于渲染Button控件的显示效果。 我们新创建一个Android工程,工程名称《样式和主题》。直接使用默认布局文件和默认Activity类。 打开工程中res->values->styles.xml文件,添加如下样式。 在默认布局文件中使用上面的自定义样式。我们只需在如下布局文件中给 Button一个style="@style/btn_style"属性,那么所有属性都会作用在该Button上。 执行上面代码的效果如图: :同CSS一样,样式的引入遵循就近原则,在控件上定义的属性会覆盖被引入的样式中 的同一个属性。 1.2主题主题的定义与样式的定义相同,都是定义在styles.xml文件下,且均可以通过设置parent属性来继承一个父样式,不同之处在于主题是作用在Activity上的。 主题通过定义AndroidManifest.xml文件中的<application>和<activity>节点下的”android:theme”属性作用在整个应用或者某个Activity,主题对整个应用或某个Activity进行全局性影响。如果一个应用使用了主题,同时应用下的view也使用了样式,那么当主题和样式属性发生冲突时,样式的优先级高于主题。 android系统也定义了一些主题,例如:<activity android:theme=“@android:style/Theme.Dialog”>,该主题可以让Activity看起来像一个对话框,还有透明主题:@android:style/Theme.Translucent。如果需要查阅这些主题,可以在文档的reference-->android-->R.style中查看。 继续使用本文档1.1中创建的工程。在res->values->styles.xml中添加如下样式: 在AndroidManifest.xml中给添加样式,如下图清单黄色高亮部分。 也可以在Activity类中通过Java代码动态设置样式。 程序运行效果图比较简单,在这里就不再展示。 2. Android实现国际化(★★)国际化的英文单词是Internationalization,因为这个单词太长了,有时也简称为I18N,其中的I是这个单词的第一个字符,18表示中间省略的字母个数,而N代表这个单词的最后一个字母。所以,I18N也就是国际化的意思。 Android程序国际化,也就是程序可以根据系统所使用的语言,将界面中的文字翻译成与之对应的语言。这样,可以让程序更加通用。Android可以通过资源文件非常方便的实现程序的国际化。 2.1 Android中如何实现国际化在编写Android项目时,通常都是将程序中要使用的字符串资源放置在res/values目录下的strings.xml文件中,为了给这些字符串资源实现国际化,可以在Android项目的res目录下,创建对应于各个语言的资源文件夹(例如,为了让程序兼容简体中文、繁体中文和美式英文,可以分别创建名称为values-zh-rCN、values-zh-rTW和values-en-rUS的文件夹),然后在每个文件夹中创建一个对应的strings.xml文件,并在该文件中定义对应语言的字符串即可。这样,当程序运行时,就会自动根据操作系统所使用的语言来显示对应的字符串信息了。 图片也可以进行国际化,同字符串的国际化类似,只需根据程序要兼容的语言版本,分别创建名称类似drawable-zh-rCN,drawable-zh-rTW这样的文件夹,将图片资源存放在文件夹下即可。 2.2国际化示例下面通过一个案例来演示国际化的使用方法。 在res文件下分别创建values-zh-rCN和values-zh-rTW文件夹,分别在两个文件夹下创建strings.xml文件。 给values-zh-rCN/settings.xml添加内容如下:
给values-zh-rTW/settings.xml添加内容如下:
在res文件下分别创建drawable-zh-rCN和drawable-zh-rTW文件夹,向里面各自添加一个flag.jpg的图片。第一个为为五星红旗、第二个为青天白日旗。图片的名字必须一致。 修改该工程的默认布局文件
设置模拟器的语言为简体中文。Menu->System settings->Language&input->Language->中文(简体)。然后运行改程序,效果图如下: 设置模拟器的语言为简体中文。Menu->System settings->Language&input->Language->中文(繁体)。然后运行改程序,效果图如下: 3. Android中的动画(★★★)Android 3.0以前,Android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一个新的动画系统:property animation,这三种动画模式在SDK中被称为property animation,view animation,drawable animation。 在本文档中只介绍tween animation和frame animation。 Frame Animation(帧动画):创建一个Drawable序列,这些Drawable可以按照指定的时间间隔一个一个的显示,也就是顺序播放事先做好的图像。 Tween Animation(渐变动画):通过对特定的对象做图像变换如平移、缩放、旋转、淡出/淡入等产生动画效果。 3.1帧动画FrameAnimation创建一个Drawable序列,这些Drawable可以按照指定的时间间隔一个一个的显示,也就是顺序播放事先做好的图像,跟放胶片电影类似。 下面通过一个案例来演示帧动画的使用方法。新创建一个工程《Android中的动画》。 将准备好的图片文件放到res/drawable-hdpi目录中。 如果大家缺乏图片资源可以随便放进去几张图片就行,只要起到练习代码的作用就行。 在项目的res目录下创建文件夹drawable,然后在文件夹下面定义动画XML文件,文件名称可以自定义(也可以使用AnimationDrawable类,采用代码方式定义动画效果),这里给改xml文件起名为frame_anim.xml。 打开创建好的xml文件,在里面添加根节点<animation-list>,可以在此根节点中设置属性”android:oneshot”来控制动画只播放一次,否则系统将默认持续播放。 在根节点<animation-list>下为帧动画的每幅图片添加一个<item>节点,节点的”android:drawable”属性是图片的资源id,”android:duration”属性指定图片展示的时间(一般每秒展示5-8张图片就可以感受到动画的效果)。 编写默认的Activity类。 运行该程序效果如下图: 3.2[color=rgb(87, 137, 220) !important][url=]渐变动画TweenAnimation[/url]渐变动画也叫补间动画。补间动画通过对View的内容进行一系列的图形变换 (包括平移、缩放、旋转、改变透明度)来实现动画效果。动画效果的定义可以采用XML来做也可以采用java代码来做。补间动画有4种类型: 补间动画的常用方法: Animation: ★ setDuration 设置动画的执行时间 ★ setRepeatCount 设置动画的重复次数 ★ setRepeatMode 指定重复的模式(如:反转) ★ setFillAfter 指示动画指定完毕之后控件的状态是否停留在动画停 止的时候 ★ setAnimationListener 设置动画的事件监听器 ImageView: ★ startAnimation(Animation a) 让ImageView执行某动画 3.2.1 Alpha 渐变动画渐变动画在代码中使用的是AlphaAnimation类来定义, 在XML文件中使用<alpha>节点来定义。 下面分别演示使用XML文件和Java代码的方式实现Alpha渐变动画。在这里依然使用本文档3.1章节中的工程。 使用XML文件实现Alpha动画 在res目录下创建anim文件夹 在anim文件夹中创建alpha_anim.xml文件,文件名自定义 编辑alpha_anim.xml文件,文件清单如下。 添加Java逻辑代码:使用AnimationUtils工具类加载xml文件,获取Animation对象;调用startAnimation让ImageView执行此动画。 :这里需要在3.1章节的默认布局文件(activity_main.xml)中添加一个Button,并为该Button指定android:onClick="startAlphaAnimation"属性,在MainActivity中实现该方法。方法清单如下: 运行效果截图比较简单,且截图是静态的,因此不再给出。 使用编码方式实现Alpha动画 3.2.2 Scale 伸缩动画在本文档3.1章节中创建的工程中的布局文件中添加ScaleAnimation按钮,在Activity类中设置改按钮的绑定事件。布局文件十分简单,因此这里就不再给出详细布局清单。效果如下图所示。 Activity类中添加scaleAnimation(View view)方法,方法清单如下: 3.2.3 Translate 位移动画在本文档3.1章节中创建的工程中的布局文件中添加TranslateAnimation按钮,在Activity类中设置改按钮的绑定事件。布局文件十分简单,因此这里就不再给出详细布局清单。Activity类中添加translateAnimation(View view)方法,方法清单如下: 3.2.4 Rotate 旋转在本文档3.1章节中创建的工程中的布局文件中添加RotateAnimation按钮,在Activity类中设置改按钮的绑定事件。布局文件十分简单,因此这里就不再给出详细布局清单。Activity类中添加RotateAnimation(View view)方法,方法清单如下: 运行效果如图:
3.2.5 AnimationSet动画的集合动画集合在代码中使用的是AnimationSet类来定义, 在XML文件中使用<set>节点来定义。 下面分别演示使用XML文件和Java代码的方式实现动画集合。在这里依然使用本文档3.1章节中的工程。 使用XML文件实现动画 在res/anim目录下创建xml文件,anim_set.xml。文件清单如下: 在Activity中添加如下方法,实现业务功能: 使用Java代码实现动画 在该工程的默认布局文件中添加Button,并给该Button指定一个onClick事件,触发的方法名为animationSet2在Activity类中添加如下方法:
至此,章节所有内容完!
|