在材料设计中缺少ActionBar

8 android android-layout

我想用AndroidStudio和新的材料设计开发Android应用程序,它在Android 5.0上看起来很棒但是当我在4.4.2手机上测试应用程序时,应用程序的ActionBar丢失了.

这是我的清单:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/MyTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

styles.xml

<resources>

<!-- Base application theme. -->
<style name="MyTheme" parent="Theme.AppCompat.Light">
</style>
Run Code Online (Sandbox Code Playgroud)

和build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.0.0"

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:+'
}
Run Code Online (Sandbox Code Playgroud)

你知道错误在哪里吗?

谢谢!西蒙

Com*_*are 13

要使用appcompat-v7操作栏backport,您需要继承您的活动ActionBarActivity.

引用Chris Banes的博客文章:

如果您当前没有使用AppCompat,或者您是从头开始,那么以下是如何设置它:

  • 您的所有活动都必须从ActionBarActivity扩展.它从v4支持库中的FragmentActivity扩展,因此您可以继续使用片段.
  • 您的所有主题(需要操作栏/工具栏)都必须从Theme.AppCompat继承.有可用的变种,包括Light和NoActionBar.
  • 为要在操作栏上显示的任何内容(例如操作栏中的列表导航的SpinnerAdapter)进行充气时,请确保使用通过getSupportActionBar().getThemedContext()检索的操作栏的主题上下文.
  • 您必须使用MenuItemCompat中的静态方法对MenuItem上的任何与操作相关的调用.

更新:请注意Google正在迁移到AppCompatActivity.ActionBarActivity作品 - 它只是一个无用的子类AppCompatActivity- 但AppCompatActivity如果你打算使用appcompat-v7动作栏后退,你可以通过直接扩展来获得更好的服务.