用好AppCompatActivity

AppCompatActivity 做了什么?

自定义调色板
<resources>
    <!-- Base application theme. -->
    <style name="AppBaseTheme" parent="Theme.AppCompat">
 
        <!-- customize the color palette -->
        <item name="colorPrimary">@color/material_blue_500</item>
        <item name="colorPrimaryDark">@color/material_blue_700</item>
        <item name="colorAccent">@color/material_green_A200</item>
    </style>
</resources>

AppCompat 适配了Activity material的主题,使得你只需要指定3种颜色就可以,完成对主题的自定义。 如下图所示,需要定义的颜色如图,其中具体的对应关系是:

  • colorPrimary 对应ActionBar的颜色。
  • colorPrimaryDark对应状态栏的颜色
  • colorAccent 对应EditText编辑时、RadioButton选中、CheckBox等选中时的颜色。

Toolbar的支持

当我们在使用 ActionBar 的时候遇到了很多自定义的需求,但发现 ActionBar 的自定义支持实在太差劲 :( Toolbar 用了一劳永逸地解决自定义的问题,直接采用了 ViewGroup,是的,你没有看错,这样的自定义程度也太强了吧。那么 Toolbar 是怎么设置 Icon, Title的呢。

TitleTextView = new TextView(context);
mTitleTextView.setSingleLine();
mTitleTextView.setEllipsize(TextUtils.TruncateAt.END);

Title Icon这些都是动态生成,即时插拔的。那么同理,这样也能进行自定义View的绘制,非常的灵活。如果想要自定义 Toolbar,首先需要在 Themes.xml 里面指定不需要系统默认的Toolbar,然后在相应的 layout 文件中添加上自定义的 Toolbar.

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">

	<!-- customize the color palette -->
	<item name="colorPrimary">@color/material_blue_500</item>
	<item name="colorPrimaryDark">@color/material_blue_700</item>
	<item name="colorAccent">@color/material_green_A200</item>

</style>

而 Toolbar 也可以在 Fragment 中使用,只需要声明 setHasOptionsMenu(true); ,并复写 onCreateOptionsMenu 方法,并在 onOptionsItemSelected 中处理相应的点击事件,就能很轻松地使用 Toolbar 的菜单。 

不可思议的 Activity 退出动画

在 AppCompactActivity 出来后,做 Activity 的切换动画变得非常轻松,一般而言有两种实现方式。

在主题中指定

AppCompatActivity 里面可以指定Activity切换动画,通过分别指定进入退出的动画即可,非常简单。

<style name="ActivityInOutAnimation" parent="@android:style/Animation.Activity">
	<item name="android:activityOpenEnterAnimation">@android:anim/slide_in_left</item>
	<item name="android:activityOpenExitAnimation">@android:anim/slide_out_right</item>
	<item name="android:activityCloseEnterAnimation">@android:anim/slide_in_left</item>
	<item name="android:activityCloseExitAnimation">@android:anim/slide_out_right</item>
</style>
在代码中指定

在 StartActivity 和 finish 的时候,指定 overridependingtransition 也可以进行相应的动画,代码非常简单,各位可以自行 Google. 

兼容的退出动画

各位在实际的操作过后,可能还是发现指定的退出动画,不能生效?无论哪种实现方式,都不能很好的工作?这是为什么了?在查看源码,和相应的说明后,还是没有发现相关的原因,不过找到了一种解决方案,这里共享出来。

既然正常的退出动画,无法生效,那么就自己做动画。

  1. 拿到整个 Layout 的Root View,对这个 View 做相应的退出效果
  2. 拦截相应的 BackPressed 事件,同时在这个时候,启动退出动画
  3. 在 Animation 结束的时候,结束掉整个 Activity
  4. 由于在 动画结束的时候,依然会显示 Window 的背景颜色,造成闪动的异常。这时候需要将 这个 Activity 指定为下图所示的 AppTheme.Transparent ,由于是透明的,在退出动画后的 Activity 不会被销毁,这样动画结束后,就能立即看到,从而避免了闪动的效果。 
<style name="AppTheme.Transparent">
	<item name="android:windowBackground">@color/transparent</item>
	<item name="android:windowIsTranslucent">true</item>
</style>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值