解读(一):从manifest开始
总览Manifest关键配置
<application
android:name=".AppManager"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme.Base">
<activity
android:name=".ui.activity.StartActivity"
android:theme="@style/Theme.AppStart">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.activity.MainActivity"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity android:name=".ui.activity.DetailActivity" />
<activity
android:name=".ui.activity.CmmActivity"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.activity.TweetDetailActivity"
android:windowSoftInputMode="adjustResize|stateHidden"/>
<activity android:name=".ui.activity.ListLikeUserActivity"/>
<activity android:name=".ui.activity.UserHomeActivity"/>
<activity
android:name=".ui.activity.LoginActivity"
android:windowSoftInputMode="adjustResize|stateHidden"/>
<activity
android:name=".ui.activity.TweetPublishActivity"
android:windowSoftInputMode="adjustResize|stateHidden"/>
</application>
可以看到, 程序的入口是 .AppManager类, 从Launcher启动过来首先打开的是StartActivity.
程序中有MainActivity, DetailActivity, CmmActivity, TweetDetailActivity, ListLikeUserActivity, UserHomeActivity, LoginActivity, TweetPublishActivity. 见名知意
我们详细的来看看究竟.
Application配置
<application
android:name=".AppManager" //程序入口Application
android:allowBackup="true" //将程序加入到系统的备份和恢复架构中
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true" //支持从右到左
android:theme="@style/AppTheme.Base"> //设置App整体风格
说明:
android:allowBackup=”true” 当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。这里说有风险, 主要来自这篇文章: http://www.freebuf.com/articles/terminal/60778.html
android:supportsRtl 取值:true/false 表示如果当前系统语言是阿拉伯语/波斯语,打开了这个功能的应用的布局就会自动变成从右往左的. 为了方便开发者去支持阿拉伯语/波斯语等阅读习惯是从右往左.
这里还设置了主题为AppTheme.Base
<!--=================Base Theme====================-->
<!--坑!请在application设置这个主题,否则在运行时设置,windowActionBar和windowNotTitle将会无效-->
<style name="AppTheme.Base" parent="Theme.AppCompat"> //继承自AppCompat主题, 这是使用AppCompatActivity必要的
<item name="windowActionBar">false</item> //无ActionBar
<item name="windowNoTitle">true</item> //无标题栏
<item name="android:windowBackground">@color/transparent</item> //背景透明
<item name="android:textColorPrimary">#FFFFFF</item> //App Bar上的标题文字颜色
<item name="android:windowAnimationStyle">@style/AnimationActivity</item> //启动动画
</style>
- 说明:
- 设置App Bar上的文字颜色为白色 #FFFFFF
- 设置了Activity的转场动画效果 @style/AnimationActivity (属性为android:windowAnimationStyle)
<!--activity动画-->
<style name="AnimationActivity" parent="@android:style/Animation.Activity"> //注意这里要继承自@android:style/Animation.Activity
<item name="android:activityOpenEnterAnimation">@anim/anim_activity_in</item>
<item name="android:activityCloseExitAnimation">@anim/anim_activity_over</item>
<item name="android:activityOpenExitAnimation">@anim/anim_activity_open_exit</item>
</style>
anim/anim_activity_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
//从右侧进入
<translate android:fromXDelta="100%" android:toXDelta="0" android:duration="300"/>
</set>
anim/anim_activity_over.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
//向右侧滑出
<translate android:fromXDelta="0" android:toXDelta="100%" android:duration="300"/>
</set>
anim/anim_activity_open_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-30%" android:duration="300"/> //注意这里使用的是百分比
<alpha android:fromAlpha="1" android:toAlpha="0.6" android:duration="300"/> //透明度变化
</set>
- 综上: activity的进入和退出效果可以通过以下四个属性来设置
@android:activityOpenEnterAnimation
@android:activityOpenExitAnimation
@android:activityCloseEnterAnimation
@android:activityCloseExitAnimation
注意需要继承自 @android:style/Animation.Activity。
具体这4个属性什么意思呢?
假设我们有 2 个 Activity,分别是 A1 和 A2:
当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation
当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation
当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation
当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation
Activity配置
接下来看 启动的Activity
<activity
android:name=".ui.activity.StartActivity"
android:theme="@style/Theme.AppStart"> //主题
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这里设置了一个主题
<!--app start theme that has not title bar and state bar-->
<style name="Theme.AppStart" parent="android:Theme.Black.NoTitleBar.Fullscreen">
<item name="android:windowBackground">@mipmap/welcome</item> //引入启动的背景图片
<item name="android:windowNoTitle">true</item> //无标题栏
</style>
这样设置app背景图片的方式个人感觉比在Activity布局文件中设置要好.
其他的Activity的一些属性配置
android:launchMode="singleTask" //启动模式
android:windowSoftInputMode="adjustResize|stateHidden" //activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题
windowSoftInputMode可取值的含义:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
具体含义可以参考文章: http://blog.csdn.net/yunnywu/article/details/7926015