問題タブ [android-attributes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - テーマを使用して Android スタイルを変更する
私はいくつかの異なるアプリを持っていますActivities
。さまざまなアクティビティには、さまざまなスタイルのボタン、テキストなどがあります。場所/アクティビティに基づいてさまざまなスタイルを持つように、すべてのコンポーネントを設定しました。(例: style="@style/MainMenuActionBarTitle
、またはstyle="@style/MainMenuActionBarTagLine
)。これらのスタイルはbackground
( Drawable
、MipMap
、またはColor
)、textColor
などを設定します...
アプリは、アプリケーション全体でこれらのさまざまなコンポーネントの色を変更するいくつかのテーマ パックを提供する予定です。同じ名前で、アプリの設定Styles
に基づいて異なる値を持つ方法があることを望んでいました。Theme
このようにして、ユーザーが選択したテーマに が読み込まTheme
れるたびにを変更できます。Activity
テーマを使用して標準のウィジェットのルック アンド フィールを変更する方法については、ここにいくつかの良い情報がありますが、それは標準の非スタイル ウィジェットのルック アンド フィールを変更します。
テーマを使用してこれを達成する方法はありますか、またはこれは完全に間違った方向ですか? より良い/より簡単なルートはありますか?
編集:より多くの調査とより多くの操作を行った後、私がやりたいことは、これを達成する方法とそう遠くないことに気付きました。私がしたいのは、 の を設定するときに実際にコンポーネントを変更することStyles
です。Theme
Activity
android - selectableItemBackground 使用時の android.view.InflateException
レイアウトを拡張すると、次の例外が発生します。
ログに「Caused by」はありませんが、例外をキャッチしてgetCause()
null が返されるまで呼び出すコードを追加しました。イベントのシーケンスは次のとおりです。
0x7f020096 はselectable_list_background
(以下を参照) であり、それが参照する TypedValue は です?selectableItemBackground
。
の使用に例外を絞り込みました?selectableItemBackground
。具体的には、CardView を使用しています。
そして、これはの関連部分ですdrawable/selectable_list_background
:
このアクティビティは私自身のテーマを使用しています。その親はTheme.AppCompat.Light.NoActionBar
です。
このコードは以前は機能していましたが、数か月後にこのコードを掘り下げたところ、例外が発生してクラッシュします。私の推測では、これはサポート ライブラリを 23.0.1 にアップグレードし、SDK を 23 にアップグレードすることに関連していると思われますが、それを確認するためにまだ 22 に戻していません。
を参照する1行を削除すると、すべて正常に機能します?selectableItemBackground
。?attr/selectableItemBackground
とも試し?android:attr/selectableItemBackground
ましたが、同じ結果が得られました。(後者は、サポートライブラリの問題ではないかもしれないと私に信じさせます)。
編集:
デバッガーでそれを調べたところandroid.content.res.Resources
、 内のこのコードである疑いがありloadDrawable()
ます。
この関数はテーマを受け取りますが、loadDrawableForCookie()
最終的に最初の例外をトリガーするメソッドである を呼び出すときにそれを渡さないことに注意してください。
このコードは Android 6.0 の新しいコードのようです。5.0 のコードはかなり異なりますが、ドローアブルをロードするときにテーマが渡されます。そしてテーマは必要です AFAICT - 問題の属性は の一部でAppCompat
あるため、それを解決するにはアクティビティのテーマが必要です。
しかし、それはあからさまなバグのように思えるので、ここで正しい軌道に乗っているとは確信していません。何か案は?
android - Android でクラス Button をインフレート中にエラーが発生しました
min sdk 16 から 23 までのアプリケーションがあります。できるだけマテリアル デザインを使用したいと考えています。また、フルスクリーンアプリである必要があります。AppCompat サポート ライブラリが含まれています。これで、いくつかのボタンを使用したログオン アクティビティができました。
スタイルは次のとおりです (values/styles.xml):
そして値/属性で:
属性font_mediumは、ここで説明されているように定義されています。私が理解できない動作は、Logon アクティビティが開かれると、すべてが正常で、例外がないということです。しかし、フラグメントが内部にある Logon アクティビティから別のアクティビティを開いて、フラグメントにこのスタイルのボタンがあると、「クラス ボタンの膨張エラー」という例外が発生します。ButtonDefault スタイルからtextSize属性を削除すると、すべてが機能します。なぜどこかで機能し、どこかで機能しないのですか? カスタム属性に何か問題がありますか?
そのスタイルで values-v21/styles.xml を作成しようとしましたが、効果がありませんでした。
次の親スタイル定義の違いについても説明していただけますか? 道に迷います。
ありがとうございました。
編集 1 - 例外:
android - このカスタム ビュー属性が無視されるのはなぜですか?
この Android Developers postで説明されているように、 Data Binding Libraryを使用して任意のビューの属性を定義しようとしています。
<layout>
そのためには、最初にタグを囲むレイアウトが必要であると投稿は述べています。
この時点で、レイアウトはClassNotFoundException
when inflatedを引き起こしました。それを取り除く唯一の方法は、<data></data>
ノードを追加することでした。たとえ Android 開発者の投稿にはなかったとしてもです。
(投稿では言及されていませんが、ビルドする前に、ガイドで推奨されdataBinding
ているように有効にする必要がありました。)build.gradle
BindingAdapter
この投稿では、属性を処理するメソッドの書き方について説明しています。
ただし、bindAttribute
メソッドが呼び出されることはありません。ビルド フォルダーにレイアウト用に生成されたコードが表示されますが、他に何も起こりません。