解读(一):从manifest开始

解读(一):从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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值