这是一个系列,我们将其命名为工具箱,如果你还没有看之前的文章:
概述
AppCompat支持库提供了ActionBar和Material Design的实现,特别是针对Android 2.1 以上的设备可以使用Toolbar。
如果你在使用Android studio,那么你会发现该支持库是默认为你添加的。你可以检查下你的build.gradle文件:
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
}
dependencies {
compile 'com.android.support:appcompat-v7:23.1.0'
}
注意v7包默认包含了v4包,所以你不必再添加v4包的依赖申明。(这个错误,我也犯。。)
同时你应该注意到,当你的compileSdkVersion为22的时候,你需要使用appcompat-v7:22对应的版本。这一概念,我在Github的android项目快速导入AS已经有所介绍。
同时你也应该知道,当你将compileSdkVersion版本升级到23,对应的Apache HTTP Client将不能使用。如果你需要在23中继续使用,在你的app的gradle文件中添加:
android {
useLibrary 'org.apache.http.legacy'
}
升级项目
当你已经准备将你的项目的支持库迁移到appcompat,你需要做以下工作:
将你的所有的activity文件从继承activity改为继承AppCompatActivity。如果你有baseActivity,只需要更改baseActivity的继承就ok了。
将你的所有的fragment改为继承android.support.v4.app.Fragment,getFragmentManager()改为getSupportFragmentManager()。
将getActionBar()改为getSupportActionBar()
注意,如果你想将你的dialog也升级到appcompat:你需要
import android.app.AlertDialog -> import android.support.v7.app.AlertDialog
注意:主题的变更。你需要将之前的主题替换为Theme.AppCompat等主题。
如果你想使用自定义actionbar,你需要申明:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
menu的改变
appCompat支持库不会把showAsAction当做Android默认属性:
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/myMenuItem"
android:title="@string/select"
-android:showAsAction="ifRoom"
+app:showAsAction="ifRoom"
如果你在使用类似searchView:
+<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/contentSearch"
android:orderInCategory="2"
android:title="@string/search"
-android:showAsAction="ifRoom"
-android:actionViewClass="android.widget.SearchView">
+app:showAsAction="ifRoom"
+app:actionViewClass="android.support.v7.widget.SearchView">
MenuItemCompat类
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.my_menu, menu);
mSearchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.contentSearch));
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。