今天折腾了一下午,就因为这个TooleBar,也可能是我对它的理解不够深入,总之,我找出了一种一定正确的写法。
下面看我的gradle
apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.example.lenovo.myapplication" minSdkVersion 17 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' }
接下来是style文件,无论是哪个api级别的style文件
必须都是继承这个主题
Theme.AppCompat.Light.NoActionBar
以此来隐藏掉actionbar,而且我发现这样写不会错
下面是values-v21 中的styles.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:colorPrimaryDark">@android:color/holo_blue_dark</item> <item name="android:colorAccent">@android:color/holo_purple</item> </style> </resources>
再下面是values中的styles.xml的写法:
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> </style> </resources>
然后再xml中使用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:gravity="center_horizontal" android:orientation="vertical" tools:context=".MainActivity"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:background="#33b5e5" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="50dp" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:subtitle="大标题" app:title="小标题" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:text="@string/hello_world" android:textColor="#fff" android:gravity="center_horizontal" android:textSize="20sp" /> </android.support.v7.widget.Toolbar> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" /> </LinearLayout>
这里没什么需要注意的
效果是这样
然后就是要替换掉ActionBar,只需在Activity中写上这样一句
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //使toolbar替换actionbar
还有一个要注意的地方
<!--ToolBar是在新版本Android上使用的一个兼容组件,在使用WebView,EditText的时候, 如果长按进入选入状态,ToolBar不会被弹出的上下文菜单(Contextual Action Bar, CAB) 覆盖,而是被压下去了,加上下面这两个属性就不会出现问题了--> <item name="windowActionModeOverlay">true</item> <item name="actionModeStyle">@style/Widget.AppCompat.ActionMode</item>
不过此时的Activity必须继承自AppCompatActivity 不然就会报错 这就是最简单的写法。一直没有出过错,需要源码的可以在下面留言。