Java Android Studio工具栏作为操作栏错误
我正在学习开发Android应用程序,我正在使用抽屉模板,该模板使用工具栏并将其集成到操作栏中。当我试图创建一个包含抽屉和动作栏动作的主java文件时,就会出现问题。然后,每个实际布局将从主文件扩展到执行所需的活动 首先,这是我的错误 03-30 23:10:24.895 22105-22105/com.mmaengineer.runique E/AndroidRuntime:致命异常:main 流程:com.mmaengineer.runique,PID:22105 java.lang.RuntimeException: 无法启动活动ComponentInfo{com.mmaengineer.runique/com.mmaengineer.runique.MainActivity}:java.lang.IllegalStateException:此活动已具有由窗口装饰提供的操作栏。不要请求Window.FEATURE\u SUPPORT\u ACTION\u工具栏,并在主题中将windowActionBar设置为false以使用工具栏 原因:java.lang.IllegalStateException:此活动已具有由窗口装饰提供的操作栏。不要请求Window.FEATURE\u SUPPORT\u ACTION\u工具栏,并在主题中将windowActionBar设置为false以使用工具栏。 在android.support.v7.app.AppCompateDelegateImplv7.setSupportActionBar(AppCompateDelegateImplv7.java:197)上 位于android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:129) 清单文件Java Android Studio工具栏作为操作栏错误,java,android,Java,Android,我正在学习开发Android应用程序,我正在使用抽屉模板,该模板使用工具栏并将其集成到操作栏中。当我试图创建一个包含抽屉和动作栏动作的主java文件时,就会出现问题。然后,每个实际布局将从主文件扩展到执行所需的活动 首先,这是我的错误 03-30 23:10:24.895 22105-22105/com.mmaengineer.runique E/AndroidRuntime:致命异常:main 流程:com.mmaengineer.runique,PID:22105 java.lang.Run
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<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>
<activity
android:name=".SettingsActivity"
android:label="@string/app_name_settings">
</activity>
</application>
}
MainControls.java
public class MainControls extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@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) {
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_camera) {
// Handle the camera action
} else if (id == R.id.nav_gallery) {
} else if (id == R.id.nav_slideshow) {
} else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_send) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
@颜色/原色
@颜色/原色暗
@颜色/颜色重音
假的
真的
试试这个:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
@颜色/原色
@颜色/原色暗
@颜色/颜色重音
假的
真的
问题在于,您的活动需要使用扩展自AppCompat.NoActionBar
的主题,而不是AppCompat
尝试从更改应用程序的主题(在AndroidManifest.xml
)
到
如果不起作用,请尝试将主题添加到您的main活动中
:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
基本上做了同样的事情,但由于Android Studio已经为您生成了AppTheme.NoActionBar
,因此对AppTheme
进行同样的更改是愚蠢的。解决此问题的最佳方法是替换以下内容:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
为此:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
其他一切都保持不变
因此,您的AppTheme将是:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
@颜色/原色
@颜色/原色暗
@颜色/颜色重音
这样,你仍然拥有你想要的所有主题颜色。只要确保在每个活动上使用工具栏,您就可以使用ActionBar。如果您想使用
setSupportActionBar(toolbar);
在MainActivity.java中,执行以下步骤:
从清单中删除android:theme=“@style/AppTheme”
添加,如下所示:
假的
真的
真的
真的
@颜色/原色暗
@颜色/原色
@颜色/原色暗
@颜色/颜色重音
在清单中添加样式
按照这些步骤,您可以使用setSupportActionBar(工具栏)
据我所知,原因是您正在全局定义AppTheme,因此如果您没有将特定主题应用于您的活动,那么它将采用AppTheme(这会给您带来错误)。就是这样做的。我不知道为什么这只是在我添加了一个初始屏幕时出现的问题,因为它是一个默认模板。但这似乎奏效了。谢谢不知道为什么你会从Android Studio生成的文件中得到这个,也许你创建了一种类型的项目,然后更改了主要活动?不管怎样,很高兴你的工作,考虑接受一个帮助你的答案。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
setSupportActionBar(toolbar);
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">true</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@color/colorPrimaryDark
</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar">
</activity>