このチュートリアルを利用して、マテリアルデザインの「画像付きの柔軟な空間」を実装しようとしています。
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>
IllegalStateException
とRuntimeException
がなくなっている間、私はCoordinatorLayout
を再び見ることができません。
false
なぜ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'
Java.lang.IllegalStateException:このアクティビティには、ウィンドウの装飾によって提供されるアクションバーがすでにあります。 Window.FEATURE_SUPPORT_ACTION_BARを要求せず、テーマでwindowActionBarをfalseに設定して、代わりにツールバーを使用します。
AppCompat に関する公式文書をお読みください
parent = "Theme.AppCompat.Light"の代わりにparent="Theme.AppCompat.NoActionBar"
を設定してください
回避重複ライブラリ呼び出し。 support:appcompat
build.gradle
セクションで2回呼び出されました。
同様のタイプの質問は[〜#〜] so [〜#〜]で確認できます。
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)ScrollView
はCoordinatorLayout
ではうまく機能しません。したがって、 ‘画像付きの柔軟なスペース‘ を実現するには、NestedScrollView
の代わりにScrollView
を試してください。これにより、適切なアニメーション効果が得られます。
3)ActionBar
のToolbar
をEventsDetailsActivity
に変更します。
それが役に立てば幸い。