0

私の問題を解決する解決策で似たような質問がありましたが、誰かが私にそれを説明できるかどうか疑問に思っていました。Googleの材料設計に関する指示が間違っているのはなぜですか?

私は、Googleデベロッパーのウェブサイトの指示に従って、hereにあるマテリアルデザインテーマを適用しています。しかし、エミュレータでアプリケーションを実行しようとするとIllegalStateExceptionが表示されます。私のテーマは、Googleが提供する手順に従って指定されたparent="android:Theme.Material"から継承されています。

Theme.AppCompatを使用して問題を解決しました。 Googleが提供する指示が間違いにつながるのはなぜですか? Theme.AppCompatTheme.Materialに拡張されていると読んでいますが、それが本当かどうかわかりません。なぜTheme.Materialは使用できないのですか?

Theme.AppCompatの延長線に沿って試してみましたが、どこでもTheme.Materialから継承していませんでした。

+0

スタックトレースを提供できますか?あるいは、あなたがあなたの活動にどのような親を使用しているのか教えてください。 –

+0

コンテンツが誤解を招き、間違っていると思われる場合は、代わりにそのウェブサイトにチケットを提出する必要があります。あなたは間違ったウェブサイトで私の友人を求めています。 – Enzokie

+0

'Theme.Material'(APIレベル21)を導入したものよりも低い' minSdkVersion'のために 'Theme.AppCompat'を使用する必要があります:[このページ](https:// developer.android.com/training/material/theme.html) –

答えて

2

Googleが提供する指示が間違いにつながるのはなぜですか?

この手順では、アクティビティの基本クラスとしてではなく、Activityを使用していることを前提としています。あなたの場合、AppCompatActivityを使用しています。

Theme.AppCompatはTheme.Materialを拡張していますが、それが本当かどうかわかりません。

これは正しくありません。

Android 5.0以降のデバイスでは、Theme.AppCompatは間接的にTheme.Materialになります。古いデバイスでは、Theme.Materialが存在しないため、そうではありません。あなたのエラーはAppCompatActivityから来ています。これは、Theme.AppCompatに基づいているテーマを使用していることを確認するため、Theme.Materialを受け付けません。

+0

彼らは正直言っておくべきです。それを変更すると、間違いなくエラーが取り除かれます。では、Activityのほかに2つの違いは何ですか?アプリケーションにマテリアルデザインを適用する正しい方法は何ですか。 AppCompatActivityでMaterial Designウィジェットを使用できるようです。 – Courtney

+0

@Courtney:「彼らは正直言ってそれを述べたはずです」 - 文書の品質は様々です。 "それでは、Activity以外の2つの違いは基本クラスですか?" - 'Theme.Material'はAndroid 5.0+のネイティブであり、古いデバイスには存在しません。 'appcompat-v7'(' AppCompatActivity'、 'Theme.AppCompat'など)はアクションバーのバックポートであり、APIレベル7(Android 2.1)に戻るMaterial Design Aestheticです。 「マテリアルデザインをアプリに適用する正しい方法は何か」 - 美しさのような「正しい」は、見る人の目の中にあります。いずれの方法でも動作可能です。 – CommonsWare

+0

Android 5.0以降のデバイスでTheme.AppCompatテーマとAppCompatActivityアクティビティを使用して、機能、ウィジェット、またはビューのプロパティを失ったことがわかりましたか? – Courtney

1

は、おそらく次の2つのこれらの問題の1つ(またはすべてを)持っている:

1)あなたは、あなたのようなものを書いただけで1つのxmlファイルのstyle.xml、使用:

<style name="AppTheme" parent="Theme.Material"> 

をそしてあなたが実行アプリが21より低いAPIを持つデバイスのためにアプリになりました。 次に、api < 21のデバイスはあなたのマテリアルテーマについて知らないという問題があります。

2)api> = 21の場合はマテリアルテーマを使用し、<の場合はAppCompatを使用しますが、アクティビティはAppCompatActivityを拡張するため、問題が発生します。サポートライブラリアクションバーの機能を使用する活動のための

基本クラス:AppCompatActivityは材料

してください、APPCOMPATのテーマを必要としないので、AppCompatActivityに関する公式ドキュメントpageからも詳細 ためthis answerに見ています。

アクティビティに対してこのクラスを拡張し、アクティビティテーマをTheme.AppCompatまたは同様のテーマに設定することで、APIレベル7以上で実行している場合、アクティビティにActionBarを追加できます。

+0

リンクをありがとう、私は彼らがやろうとしていることを理解していると思う。なぜ彼らが私たちにThemeへのインターフェースを与えたのか分かりません。彼らはappcompatライブラリを使ってAppCompatActivityを私たちに公開し、私が何を意味しているのか理解していれば、それをMaterial Designに足取りすることができました。とにかくありがとう:) – Courtney

+0

これは "後方互換性"です。それはapiのこれらすべての変更のための主なアンカーです。それはあなたや私にとっては愚かなようです:)それは主な理由です。なぜアンドロイドには9000以上の "サポート"がありますか? –

関連する問題