私は自分のアプリを作成しようとしていますが、成功していません。例外は次のとおりです。
Caused by: Java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
私のstyle.xmlは次のとおりです。
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- theme customizations -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowActionBar">false</item>
<item name="Android:textColorPrimary">@color/ldrawer_color</item>
<item name="actionMenuTextColor">@color/ldrawer_color</item>
<item name="Android:textColorSecondary">@color/ldrawer_color</item>
</style>
</resources>
そしてあなたが見ることができるように私は宣言しました
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowActionBar">false</item>
これは私のmanifest.xmlです
<application
Android:allowBackup="true"
tools:replace="Android:icon"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
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>
</application>
他のアクティビティを拡張するために使用するBaseActivity
import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.support.v7.widget.Toolbar;
public abstract class BaseActivity extends AppCompatActivity {
public Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResource());
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(BaseActivity.this.getResources().getString(R.string.app_name));
//getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
protected abstract int getLayoutResource();
protected void setActionBarIcon(int iconRes) {
toolbar.setNavigationIcon(iconRes);
}
}
クラッシュする理由はわかりません。クラッシュせずにアプリケーションを起動する唯一の方法は、Theme.AppCompat.Light.NoActionBar
のstyle.xmlに親を設定することですが、この方法ではステータスバーは透明で、色付けされません...
Theme.AppCompat.Light
を使用すると、AndroidにフレームワークにActionBarを提供することを指示します。ただし、独自のActionBar(Toolbar
)を作成しているため、フレームワークに、ActionBarをどこから取得したいかに関するシグナルを与えます。
ツールバーを使用しているため、Theme.AppCompat.Light.NoActionBar
が必要です。
次のステップは、ツールバーのスタイルが正しいことを確認することです。これは、問題が発生している場所のようです。テーマに定義した色を使用して、ツールバーをActionBarのようにスタイルするには、次のようなテーマを提供する必要があります。
<Android.support.v7.widget.Toolbar
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
Android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
this Android Developers blog post のツールバーウィジェットの「スタイリング」セクションを参照してください。
styles.xml
に次の行があると仮定します。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<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>
次に、これをマニフェストのアクティビティに追加します。
<activity Android:name=".activity.YourActivity"
Android:theme="@style/AppTheme.NoActionBar"><!-- ADD THIS LINE -->
チュートリアルやその他のソリューションを確認した後、それは私にとって最高のソリューションでした
私の場合、新しいアクティビティを作成し、AndroidManifest.xmlでapp:themeを定義するのを忘れていました。
<activity
Android:name=".HistoryActivity"
Android:label="History"
Android:theme="@style/AppTheme.Primary"></activity>
マニフェストのアクティビティの「Android:theme」の値を「@ style/AppTheme」から「@ style/AppTheme.NoActionBar」に変更した後、問題を解決しました。
<activity Android:name=".MyXXXActivity"
... Android:theme="@style/AppTheme.NoActionBar" />