无法将 ActionBarActivity 与 Theme.Material 一起使用
Can't use ActionBarActivity with Theme.Material
每当我使用 ActionBarActivity
扩展 class 时,当我在样式中将主题用作 Theme.Material... 时,它会在模拟器上生成运行时错误。当我将此主题更改为 AppCompat 时,它工作正常。或者,即使我将 ActionBarActivity
更改为 Activity
,主题为 Theme.Material,它在 Lollipop 模拟器上也能正常工作。
styles/values-v1.xml
:
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:colorPrimaryDark">#3F51B5</item>
<item name="android:colorPrimary">#3031B5</item>
</style>
<style name="ActionBarTheme" parent="android:ThemeOverlay.Material.ActionBar">
<item name="android:textColorPrimary">#f00</item>
<item name="android:textColorSecondary">#00f</item>
</style>
MainActivity.java
:
package com.example.sharmakritya.myapplication;
import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;
import android.support.v7.app.ActionBarActivity;
public class MainActivity extends ActionBarActivity {
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar=(Toolbar)findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if(id==R.id.next){
}
return super.onOptionsItemSelected(item);
}
}
build.gradle
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.example.sharmakritya.myapplication"
minSdkVersion 21
targetSdkVersion 21
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:21.0.3"
}
我想在 Lollipop 上使用 ActionBar
和 Material 主题。我在这里做错了什么?
如果您想在 Android 5.0+ 上使用 Theme.Material
,那些使用该主题的活动需要是使用原生操作栏的普通活动,并且您需要一些其他主题对于基于 Theme.Holo
.
的旧设备
如果你想使用appcompat-v7
中的ActionBarActivity
,你必须使用Theme.AppCompat
作为你主题的基础,并依靠它给你一个Material 在新旧设备上进行设计。
所以,回顾一下:
Theme.Material
需要原生操作栏
appcompat-v7
操作栏向后移植不能使用 Theme.Material
您的主要 activity 必须扩展 ActionBarActivity
public class MainActivity extends ActionBarActivity {
每当我使用 ActionBarActivity
扩展 class 时,当我在样式中将主题用作 Theme.Material... 时,它会在模拟器上生成运行时错误。当我将此主题更改为 AppCompat 时,它工作正常。或者,即使我将 ActionBarActivity
更改为 Activity
,主题为 Theme.Material,它在 Lollipop 模拟器上也能正常工作。
styles/values-v1.xml
:
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:colorPrimaryDark">#3F51B5</item>
<item name="android:colorPrimary">#3031B5</item>
</style>
<style name="ActionBarTheme" parent="android:ThemeOverlay.Material.ActionBar">
<item name="android:textColorPrimary">#f00</item>
<item name="android:textColorSecondary">#00f</item>
</style>
MainActivity.java
:
package com.example.sharmakritya.myapplication;
import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;
import android.support.v7.app.ActionBarActivity;
public class MainActivity extends ActionBarActivity {
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar=(Toolbar)findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if(id==R.id.next){
}
return super.onOptionsItemSelected(item);
}
}
build.gradle
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.example.sharmakritya.myapplication"
minSdkVersion 21
targetSdkVersion 21
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:21.0.3"
}
我想在 Lollipop 上使用 ActionBar
和 Material 主题。我在这里做错了什么?
如果您想在 Android 5.0+ 上使用 Theme.Material
,那些使用该主题的活动需要是使用原生操作栏的普通活动,并且您需要一些其他主题对于基于 Theme.Holo
.
如果你想使用appcompat-v7
中的ActionBarActivity
,你必须使用Theme.AppCompat
作为你主题的基础,并依靠它给你一个Material 在新旧设备上进行设计。
所以,回顾一下:
Theme.Material
需要原生操作栏appcompat-v7
操作栏向后移植不能使用Theme.Material
您的主要 activity 必须扩展 ActionBarActivity
public class MainActivity extends ActionBarActivity {