web-dev-qa-db-ja.com

java.lang.IllegalArgumentException:デザインライブラリでTheme.AppCompatテーマ(または子孫)を使用する必要があります

このチュートリアルを利用して、マテリアルデザインの「画像付きの柔軟な空間」を実装しようとしています。

Androidデザインサポートライブラリ のツールバーアニメーション

しかし、レイアウトプレビューでこのレンダリングの問題のメッセージが表示されます:

次のクラスをインスタンス化できませんでした。

-Android.support.design.widget.CoordinatorLayout(Open Class、Show Exception、Clear Cache)-Android.support.design.widget.AppBarLayout(Open Class、Show Exception、Clear Cache)

Theme.AppCompatテーマをアプリケーションに適用しましたが、他のすべてのアクティビティでアクションバーと外観が台無しになります。また、次のようなアクションバーメソッドでエラーをスローします。

actionBar.setDisplayHomeAsUpEnabled(true);

エラーを(大まかに)次のように記述します:

setDisplayHomeAsUpEnabled(boolean)がnullオブジェクト参照で呼び出されています

さらに、アプリケーション全体にTheme.AppCompatを使用すると、プレビュー画面に次のエラーが表示されます。

次のクラスが見つかりませんでした:-Android.support.v7.internal.app.WindowDecorActionBar(ビルドパスの修正、クラスの作成)

したがって、アプリケーション全体にTheme.AppCompatを使用したくありません。ただし、「画像付きの柔軟なスペース」デザインを使用する特定のアクティビティにTheme.AppCompatを使用しても、前述のCoordinatorLayoutおよびAppBarLayoutの問題は解決されません。

どうしたらいいか教えてください!私は同じ問題に関する多くのstackoverflowの投稿を読みましたが、それらは私にとってはうまくいきませんでした! Android studioを再起動し、キャッシュを無効にして、何度も再起動しました!!

これが私のbuild.gradleの依存関係です

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.Android.support:support-v4:23.0.1'
    compile 'com.Android.support:appcompat-v7:23.0.1'
    compile project(':viewPagerIndicator')
    compile 'com.Android.support:appcompat-v7:23.1.1'
    compile 'com.Android.support:design:23.1.1'
}

私の電話でアプリをそのまま実行すると、次のエラーが発生します。

Java.lang.IllegalStateException:このアクティビティには、ウィンドウの装飾によって提供されるアクションバーがすでにあります。 Window.FEATURE_SUPPORT_ACTION_BARを要求せず、テーマでwindowActionBarをfalseに設定して、代わりにツールバーを使用します。

次のようにwindowActionBarをfalseに設定します。

<item name="windowActionBar">false</item>

その後、アプリを実行すると、このエラーがスローされます:

Java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {com.seven.actionbar/com.seven.actionbar.EventsDetailActivity}:Java.lang.IllegalArgumentException:AppCompatは現在のテーマ機能をサポートしていません:{windowActionBar:false、windowActionBarOverlay:false 、Android:windowIsFloating:false、windowActionModeOverlay:false、windowNoTitle:false}

これがEventsDetailsActivity.Javaファイルのツールバービットです。

    Toolbar toolbar;
    CollapsingToolbarLayout collapsingToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_eventsdetail);

        actionBarColor =
                new ColorDrawable(ContextCompat.getColor(getApplicationContext(), R.color.ufl_orange));

        tDes = (TextView)findViewById(R.id.evt_desc);
        tVenue = (TextView)findViewById(R.id.evt_venue);
        tDate = (TextView)findViewById(R.id.evt_date);
        tTime = (TextView)findViewById(R.id.evt_time);
        tPdate = (TextView)findViewById(R.id.evt_post_date);
        tPtime = (TextView)findViewById(R.id.evt_post_time);
        tCont = (TextView)findViewById(R.id.evt_contact);
        tOrg = (TextView)findViewById(R.id.evt_org);
        tCount = (TextView)findViewById(R.id.evt_count);

        //Intent intent = getIntent();
        //joinMap = (HashMap)intent.getSerializableExtra("e_uMap");
        myApp = (MyApp)getApplication();

        //action bar magic
        actionBarColor.setAlpha(0);

        toolbar = (Toolbar) findViewById(R.id.anim_toolbar);
        setSupportActionBar(toolbar);
        collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
        ImageView header = (ImageView) findViewById(R.id.header);

        new LoadDetail().execute();

        goingSwitch = (Switch) findViewById(R.id.btn_join);
        goingSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()

        {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                new JoinEvents().execute(String.valueOf(isChecked));
            }
        });
    }



    @Override
    public void onStart(){
        super.onStart();
//        actionBar = this.getActionBar();
//        actionBar.setDisplayShowHomeEnabled(false);
    }

それに伴うレイアウトコードは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>

<Android.support.design.widget.CoordinatorLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true"
    tools:context=".EventsDetailActivity">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/appbar"
        Android:layout_width="match_parent"
        Android:layout_height="192dp"
        Android:fitsSystemWindows="true"
        Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <Android.support.design.widget.CollapsingToolbarLayout
            Android:id="@+id/collapsing_toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginBottom="32dp"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                Android:id="@+id/header"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:background="@drawable/monalisa"
                Android:fitsSystemWindows="true"
                Android:scaleType="centerCrop"
                app:layout_collapseMode="parallax" />

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/anim_toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
        </Android.support.design.widget.CollapsingToolbarLayout>
    </Android.support.design.widget.AppBarLayout>

    <ScrollView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"/>'

</Android.support.design.widget.CoordinatorLayout>

ScrollViewおよび関連する子要素(ここには表示されていません)がページのメインコンテンツです。

また、テーマを次のように変更しました。

<style name="EventsTheme" parent="Theme.AppCompat.Light">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
</style>

IllegalStateExceptionRuntimeExceptionがなくなっている間、私はCoordinatorLayoutを再び見ることができません。

false

9
Flame of udun

なぜToolbarを使用する必要があるのですか?いくつかの古いAndroidバージョンをサポートする必要がありますか?要点は、Toolbarは実際にはActionBarではないということです。それはいくつかの機能を欠いており、明確に使用する必要がありますアクティビティのテーマ。したがって、古いバージョンのAndroid (v7.ToolbarはSDK 7(Android 2.1)用) をサポートする必要がない場合

ちなみに、あなたがやろうとしていることは、折りたたみツールバーレイアウトと呼ばれています。チュートリアルについては、このリンクを確認してください http://antonioleiva.com/collapsing-toolbar-layout/

P.S.同じライブラリの異なるバージョンをコンパイルしないでください!これをしないでください:

compile 'com.Android.support:appcompat-v7:23.0.1'
    compile project(':viewPagerIndicator')
    compile 'com.Android.support:appcompat-v7:23.1.1'
    compile 'com.Android.support:design:23.1.1'

代わりに、次のように変更します。

compile 'com.Android.support:appcompat-v7:23.0.1'
    compile project(':viewPagerIndicator')
    compile 'com.Android.support:design:23.0.1'
4
RexSplode

あなたのlogcatが投げるものは何ですか

Java.lang.IllegalStateException:このアクティビティには、ウィンドウの装飾によって提供されるアクションバーがすでにあります。 Window.FEATURE_SUPPORT_ACTION_BARを要求せず、テーマでwindowActionBarをfalseに設定して、代わりにツールバーを使用します。

  1. すべてのテーマ(アクションバー/ツールバーが必要)は、Theme.AppCompatから継承する必要があります。利用可能なバリアントがありますLightとNoActionBarを含む

AppCompat に関する公式文書をお読みください

あなたは何をするべきか

  1. parent = "Theme.AppCompat.Light"の代わりにparent="Theme.AppCompat.NoActionBar"を設定してください

  2. 回避重複ライブラリ呼び出し。 support:appcompatbuild.gradleセクションで2回呼び出されました。

同様のタイプの質問は[〜#〜] so [〜#〜]で確認できます。

  1. Window.FEATURE_ACTION_BARおよびwindowActionBarをfalseに設定
  2. AppCompatは現在のテーマ機能をサポートしていません
4
IntelliJ Amiya

OK!有名なツールバーの問題。

見た目から、投稿したコードに少し変更を加えてみてください。

1)これ以外のアクティビティでActionBarが必要な場合は、NoActionBarの新しいスタイルを作成し、そのスタイルをこのアクティビティに追加します

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

ノエインユーAndroidManifest.xml、このテーマを割り当てて、EventsDetailsActivityだけがnotにActionBarを持たせ、残りは持ってもらうようにします。

<activity
        Android:name="EventsDetailsActivity"
        Android:theme="@style/AppTheme.NoActionBar">

2)ScrollViewCoordinatorLayoutではうまく機能しません。したがって、 ‘画像付きの柔軟なスペース‘ を実現するには、NestedScrollViewの代わりにScrollViewを試してください。これにより、適切なアニメーション効果が得られます。

3)ActionBarToolbarEventsDetailsActivityに変更します。

それが役に立てば幸い。

3
Pavitra Kansara