使用AppCompat_v7 21.0.0d的几个兼容问题

1.实现新的ActionBarDrawerToggle动画

ActionBarDrawerToggle使用最新的AppCompat_v7 21会出现一个很帅的动画,使用方式在Androidstudio下面先添加compile

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.0'
}

然后直接将ActionBarDrawerToggle的impot使用import android.support.v7.app.ActionBarDrawerToggle;

之后的构造方法就可以使用

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.app_name, R.string.app_name);

当然需要一个ToolBar。

2.使用ToolBar代替ActionBar

Android L添加了一个新控件来一步步的替换ActionBar,ToolBar有着更灵活的扩展,完全能够代替ActionBar,并且有着自己作为一个View的灵活性。只是有点不方便的是,ToolBar需要在每个Activity中声明,不管是在XML中或者代码

  • 修改主题
<resources>
    <style name="AppTheme" parent="Theme.AppCompat">
        <!-- Customize your theme here. -->
        <item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>

        <!-- Actionbar color -->
        <item name="colorPrimary">@color/accent_material_dark</item>
        <!--Status bar color-->
        <item name="colorPrimaryDark">@color/accent_material_light</item>
        <!--Window color-->
        <item name="android:windowBackground">@color/dim_foreground_material_dark</item>
    </style>
</resources>

如果你原来使用ActionBarPullToRefresh控件这个时候会发现,进度条和底边有俩个dp的间隔,如果使用了ToolBar,那么你就可以控制ActionBar的高度,当然你可以修改ActionBarPullToRefresh源码来解决这个问题

  • 布局中添加ToolBar
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        ></android.support.v7.widget.Toolbar>
 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
 setSupportActionBar(toolbar);

这样就得到了一个代替ActionBar的Toolbar,测试发现内部的Fragment getActionBar还是可以直接使用,因为在Activiyty中将ToolBar设置为了ActionBar,所以内部的Fragment 对ActionBar的操作完全可以和以前一样使用。当然也可以在fragment中设置自己的Toolbar。

3.Actionbar的ListModel错位问题

ActionBar.NAVIGATION_MODE_LIST在替换了AppCompat 之后在4.x上显示会出现错位的情况,并且显示这个方法已经被废弃,如下图

解决方案是使用TintSpinner代替Spinner,奇怪的是TintSpinner在官网竟然查不到相关的信息,当然它也在android.support.v7.internal.widget包中,打开看源码发现

public class TintSpinner extends android.widget.Spinner {
    private static final int[] TINT_ATTRS;

    public TintSpinner(android.content.Context context) { /* compiled code */ }

    public TintSpinner(android.content.Context context, android.util.AttributeSet attrs) { /* compiled code */ }

    public TintSpinner(android.content.Context context, android.util.AttributeSet attrs, int defStyleAttr) { /* compiled code */ }
}

他继承Spinner,但是没有做任何的改动,好奇观,替换了之后确实解决了问题。

4.待续。。。

时间: 2024-12-06 03:49:30

使用AppCompat_v7 21.0.0d的几个兼容问题的相关文章

Hadoop0.21.0部署安装以及mapreduce测试

鉴于hadoop的需要...但是并不限于此...有时候闲输入密码麻烦,也可以用这种办法从一个节点通过ssh进入另一个节点... 设要使master进入slave是免密码的,则可以在master(ip为192.168.169.9)中如下操作: 命令:ssh-keygen -t rsa  然后一路回车(该命令不需要进入特定目录) cd进入/root/.ssh/可以看见如下(橙色是新生成的) id_rsa  id_rsa.pub  known_hosts 然后用scp命令将id_rsa远程传输到sla

android studio module添加最新的com.android.support:appcompat-v7:21.0.0依赖报错

我的开发平台是Mac,测试机是MX3(API 19 android 4.4.4),我不确定其他平台是否出现该问题,所以提前说明一下,免得误人子弟. 今天再使用自定义ActionBar的时候,出现了一个很奇葩的错误,就是我为自己的module添加了最新的com.android.support:appcompat-v7:21.0.0依赖后,在Activity中使用 final ActionBar actionBar = getActionBar(); actionBar.show(); 来获取Act

python3+selenium 3.13 + geckodriver 21.0,提示ConnectionResetError,切换会较低版本的driver即可

学习selenium时,如果sleep时间大于等于5秒,就会提示ConnectionResetError: [Errno 54] Connection reset by peer.换成chrome浏览器,可以正常运行. #demo.py from selenium import webdriver from time import sleep, ctime #chrome #driver = webdriver.Chrome(executable_path='//Users/csj/Deskto

《Photoshop 2020》初心版 21.0.2.57

<Phtoshop_2020>初心版 下载地址(85b7) SHA1:E41E63295232C6D4E4C820E0DC58A1060E89C5FA 版本信息    发行版本 2020    程序版本 21.0.2.57     版本标签 21.0.2 20191122.r.57    程序创建于 2020年1月19日配置要求    处理器:具有64位支持的英特尔®或AMD处理器:2 GHz或更快的处理器    操作系统:Microsoft Windows 7 Service Pack 1(

如何解决VC6.0++ 与 win8&amp;8.1兼容问题

今天电子班的梦婷同学抱着电脑来我实验室问我怎么解决在Win8系统安装VC6.0的问题, 一开始我也很头痛,因为我也没弄过这个,然后抱着死马当作活马医的态度在网上搜搜试了下. 如何解决VC6.0++ 与 win8&8.1兼容问题 另附:VC6.0的下载地址 1/4 2/4 将MSDEV.EXE重命名为MSDEV1.EXE. 你将看到一个名为MSDEV.exe的程序,没错就是它,首先对他重命名,(如MSDEV1.exe看你喜好),然后右键属性→兼容性,将其改为以兼容模式运行此程序,选择windows

Android -- uses-sdk:minSdkVersion 10 cannot be smaller than version L declared in library com.android.support:appcompat-v7:21.0.0-rc1

这是一个报错,是我在Android Studio上添加完Support-v4和v7包之后爆出的错误,百度了好久也没有百度到.当时我的项目有minSdkVersion 19. 设置版本最小为L的时候也会出错,并且我的测试机是4.3,根本就无法安装. defaultConfig { .... minSdkVersion 'L' .... } 解决办法 1.将compileSdkVersion设置成为 compileSdkVersion 'android-L' 这个解决方案只适用于L版本,如果尝试部署

Materialise Magics 21.0.0.263 Win64 1CD

Altair.HyperWorks.Virtual.Wind.Tunnel.14.3.2719.Win64 1CD Fekete.FAST.FieldNotes.v5.0.1.3 1CD Gstarsoft.GstarCAD.2017.160929.Win64 1CD IHS Kingdom Suite 2016.1 v10.1 Win64 1DVD ````````````````````````````````````````````````````````` 至真至诚  品质保证 QQ:1

升级到appcompat v7 21.0.2之后遇到的问题解决方法

1)一开始是手动直接覆盖文件到对应的lib project下,提示数个style找不到.原因是新旧版本的文件命名和结构不同,所以这个问题只需要把project目录清空,重新复制文件即可解决. 2)发现部分Activity的菜单背景是透明的,但v20之前没这个问题,经排查这些Activity都继承于FragmentActivity,只需要修改为ActionBarActivity即可解决. 3)只设置background无法修改actionbar的背景颜色,但v20之前也是没问题的,解决方法是加上b

Win8.1安装mysql-installer-community-5.6.21.0.mis

引言 我本机是win8.1,在官网下载的这个安装是32位和64位都能装,安装步骤参考:http://jingyan.baidu.com/article/67662997305dcd54d51b84d4.html 安装后测试 安装完成,通过DOS命令测试服务端安装是否成功, 找到Mysql的安装目录:C:\Program Files (x86)\MySQL\MySQL Server 5.6,这是我本地的安装目录. 然后通过DOS测试. 配置环境变量 如果不希望每次都需要先找到mysql的安装目录,