无法在Theme.Material中使用ActionBarActivity

时间:2015-03-08 22:57:15

标签: android android-layout material-design

每当我使用ActionBarActivity扩展类时,当我在样式中使用主题为Theme.Material时,它会在模拟器上生成运行时错误。当我将此主题更改为AppCompat时,它可以正常工作。或者即使我将主题为Theme.Material的ActionBarActivity更改为Activity,也可以在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"
}

我想在棒棒糖上使用带有Material主题的ActionBar。我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

如果您想在Android 5.0+上使用Theme.Material,那些使用该主题的活动需要使用原生操作栏进行普通活动,并且您需要为基于旧版设备的其他主题设置其他主题离开Theme.Holo

如果您想使用ActionBarActivity中的appcompat-v7,则必须使用Theme.AppCompat作为主题的基础,并依靠它来为您提供Material Design-ish on old和新设备。

所以,回顾一下:

  • Theme.Material需要原生操作栏
  • appcompat-v7操作栏backport无法使用Theme.Material

答案 1 :(得分:0)

您的主要活动必须扩展ActionBarActivity

public class MainActivity extends ActionBarActivity {