[解決済み] Android におけるスタイル指定可能な属性の宣言
質問
に関するドキュメントはほとんどありません。
declare-styleable
タグについてのドキュメントはほとんどありません。私が見つけたのは
このリスト
に対して有効な値の
format
属性の有効な値の一覧です。
attr
タグを使用します。その限りではいいのですが、これらの値のいくつかをどのように使用するかについては説明されていません。ブラウジング
attr.xml
(標準属性の Android ソース) をブラウズしてみると、次のようなことができることがわかりました。
<!-- The most prominent text color. -->
<attr name="textColorPrimary" format="reference|color" />
は
format
属性は明らかに複数の値の組み合わせで設定することができます。おそらくは
format
属性は、パーサーが実際のスタイル値を解釈するのに役立ちます。その後、attr.xml でこれを発見しました。
<!-- Default text typeface. -->
<attr name="typeface">
<enum name="normal" value="0" />
<enum name="sans" value="1" />
<enum name="serif" value="2" />
<enum name="monospace" value="3" />
</attr>
<!-- Default text typeface style. -->
<attr name="textStyle">
<flag name="normal" value="0" />
<flag name="bold" value="1" />
<flag name="italic" value="2" />
</attr>
これらは両方とも、示されたスタイルに対して許容される値のセットを宣言しているように見えます。
そこで、2つの質問があります。
-
のいずれかを取ることができるスタイル属性の違いは何でしょうか?
enum
の値の一つを取ることができるものと、一連のflag
の値を取ることができるものですか? -
誰か、より良いドキュメントを知っていますか?
declare-styleable
がどのように機能するかについて、(Android のソース コードをリバース エンジニアリングする以外に)もっと良いドキュメントをご存知の方はいらっしゃいますか?
どのように解決するのですか?
ここにこんな質問があります。 カスタム属性を定義する と いくつかの を追加しました。
そして、この ポスト . フラグと列挙型についての良い情報があります。
カスタム XML 属性フラグ
フラグは特殊な属性です。 非常に小さな という非常に小さな値のサブセットしか許されないという点です。 の下で定義されたものです。 属性タグの下で定義されているものです。 フラグは次のように指定されます。 name "属性と "value "属性で指定されます。 属性で指定される。 名前は、その属性タイプ内で一意でなければなりません。 一意であることが要求される。 しかし、値は一意である必要はありません。 これは このため、Androidプラットフォームの進化に伴い Androidプラットフォームの進化の過程で 「fill_parent "と "match_parent "の両方が同じ動作に対応する が同じ動作にマッピングされていたのはこのためです。 その 値は同じでした。
name属性は に対応します。 レイアウトXMLで使用される名前に対応し、名前空間接頭辞は必要ありません。 名前空間接頭辞は必要ありません。 したがって、上記の "tilingMode "については、"center "を属性値として選択しました。 を属性値として選びました。 しかし を選択することもできた。 「繰り返し "を選ぶこともできたが、他にはなかった。 ただし 実際の値で代用することさえ は許されなかったでしょう。
value 属性は必ず 整数でなければなりません。 16進数か標準的な数値表現のどちらを選択するかは 標準的な数字表現を選択することができます。 はあなた次第です。 Androidのコードでは、いくつかの箇所で Androidのコードで両方が使われる場所がいくつかあります。 Androidコンパイラはどちらを使ってもかまいません。 Android コンパイラーはどちらを使ってもかまいません。
カスタム XML 属性列挙型
列挙型はフラグとほぼ同じ方法で使用されます。 フラグと同じように使用されますが、1つの規定があります。 と同じように使われます。 整数と同じように使うことができます。 フードの下では、列挙型と は同じデータ型にマッピングされます。 すなわち,整数です。 属性定義に が属性定義に現れる場合 の属性定義に現れるとき、Enum は、常に悪いものである "マジックナンバー" を防ぐのに役立ちます。 "マジックナンバー "を防ぐ役割を果たします。 このため 「android:layout_width "を持つことができます。 次元、整数値、または名前付き文字列 "fill_parent "です。
文脈を理解するために、次のように考えてみましょう。 というカスタム属性を作成したとします。 というカスタム属性を作成したとします。 「layout_scroll_height "というカスタム属性を作成し、それを受け取ったとします。 整数または文字列のどちらか 「scroll_to_top "とします。 これを行うには 「integer" フォーマット属性を追加し、その後に を追加し、それに列挙を加えます。
<attr name="layout_scroll_height" format="integer"> <enum name="scroll_to_top" value="-1"/> </attr>
この方法でEnumを使用する場合の一つの条件は を使用する場合の一つの条件は、開発者が を使用することができることです。 に意図的に"-1″という値を入れることができるということです。 をレイアウトパラメータに設定できることです。 この場合 という特殊なロジックが発生します。 "scroll_to_top "の特別なケースロジックが起動します。 このような予期せぬ(あるいは 予想外の(あるいは予想された)動作により、あなたのライブラリはすぐに レガシーコード "になってしまいます。 レガシーコード "の山に追いやることになります。 に追いやられてしまいます。
私が思うに、属性に現実に追加できる値は、属性から得られるものによって制限されます。を確認してみてください。
AttributeSet
クラス参照
ここに
を参照してください。
入手することができます。
-
ブーリアン(
getAttributeBooleanValue
), -
フロート (
getAttributeFloatValue
), -
ints (
getAttributeIntValue
), -
ints (たとえば
getAttributeUnsignedIntValue
), -
と文字列(
getAttributeValue
)
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] カスタム属性(attrs)の定義
-
[解決済み] android: imageview の画像を画面に合わせて伸縮させる
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio