問題タブ [declare-styleable]
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 - 宣言スタイル可能で整数の配列を定義する方法は?
<declare-styleable>
カスタム ビュー用に独自のものを実装しています (こちらの手順に従ってください)。可能な XML 属性の 1 つとして整数の配列を指定できるようにしたいと考えています。方法:
attrs.xml
?に XML 属性として整数配列を指定します。- カスタム ビューを呼び出した後、 TypedArrayから取得しますか?
obtainStyledAttributes()
java - コードから XML 列挙値にアクセスする
次のように、列挙値を使用してスタイル可能な属性を宣言しました。
switch
ここで、コード内、できればステートメント内でそれらを参照したいと思います。
列挙型にある値をコードにハードコーディングする以外に、これを行う方法を見つけることができません(そもそも列挙型の目的の半分を無効にします)。
誰もこれを行う方法を知っていますか?
編集
@CommonsWareの答えに従って、これを試しました:
リソース.xml:
attrs.xml:
これによりtop
、 の値が受け入れられなくなりましたrotation
。
android - 宣言可能な名前は、その属性を使用するビューにどのようにリンクされていますか?
通常、カスタム属性の例は次の形式です。
とその使用法:
したがって、カスタム ビューには、スタイル可能な属性と同じ名前が付けられます。
しかし、この例 (クリックすると完全なコードが表示されます) では、次のようになります。
によって使われた:
ColorOptionsView
name で定義された属性にどのようにリンクされているのOptions
か疑問に思いました。
android - XML からカスタム ビューに静的フィールドを設定する
これはカスタム ビューです
この XML は MyView を数回インスタンス化します
color
XML から静的を初期化する適切な方法を知りたいです。
私はすでに1つの解決策を知っています(しかし、別の推奨される方法があるのだろうか):
- カスタム属性を定義する
- いずれかのインスタンス化でカスタム属性を使用します
MyView
- MyView コンストラクター中に静的フィールドを設定する
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, defStyle, 0);
int c = a.getInteger(R.styleable.MyView_color, -1);
if( c != -1 ) 色 = c;
このソリューションについて私が気に入らない唯一のことは、MyView
インスタンス化に依存していることです。通常、コードでは、静的フィールドとメソッドに個別にアクセスできます。 static フィールドも、MyView
実際のインスタンス化とは無関係です。
android - スタイル可能を解決できません
私が使用しているコードは次のとおりです。
attrs.xml ファイルは次のとおりです (values フォルダーに追加されます)。
これらの質問の回答では、問題を解決できませんでした。私の質問を重複と見なさないでください。
更新: 間違った R クラスをインポートしていたようです。アプリケーションのR
クラスではありませんandroid.R
。
java - 異なるタグに対して同じ名前のいくつかのスタイル可能な属性を宣言する方法は?
ViewA と ViewB の両方に「タイトル」タグを付けたい。しかし、これを入れることはできませんattrs.xml
:
エラーのためAttribute "title" has already been defined . 別の質問は、この解決策を示しています。
ただし、その場合、R.styleable.ViewA_title
andR.styleable.ViewB_title
は生成されません。次のコードを使用して AttributeSet から属性を読み取るために必要です。
どうすればこれを解決できますか?
java - TypedArray#getTextArray() 中にスローされる例外
カスタム ビューを作成するのはこれが初めてで、Spinner と同様の方法で、XML 経由でエントリを入力しようとしています。ここでは明らかに何か間違ったことをしていますが、Spinner の後にアプローチをスタイルしているので、何が間違っているのかわかりません。
このコードの意図を説明するために、カスタム設定リストを作成しています。MultiChooserOption は、ユーザーがオプションのリストから複数のものを選択できるようにするアイテムです。TextOption は、リストに表示されるビューを定義するだけです。つまり、キャプションとその他の要素があり、TextOption のサブクラスの場合、その他の要素はウィジェット (チェックボックスなど) ではなくテキストになります。
以下は、これを構築した方法と logcat 出力に影響を与えるすべてのソースです。
attrs.xml
MultiChooserOption.java
TextOption.java
options_fragment.xml
配列.xml
文字列.xml
OptionsFragment.java
logcat出力
CharSequence[] optionsArray = attributesArray.getTextArray( R.styleable.MultiChooserOption_options );
そのため、MultiChooserOptionの行が実行されると、例外がスローされ、シバン全体が崩壊します。私が知る限り、私は重要な限り Spinner をフォローしています。
ここで私が間違ったことを学ぶのを手伝ってください。
android - Android 4.4 のカスタム スタイル設定は利用できません
だから私はAndroid 4.4でカスタムスタイル可能に問題があります。
Android 4.4 で何が問題なのか、何が余分なのかを誰かが知っていれば、カスタム スタイル可能オブジェクトが起動しません。助けてください。
これが私が使用するコードで、Android 2.2から4.3までで完全に動作します(電話とシミュレーターでテスト済み)。
レイアウト :
クラス:
java - 値からスタイル可能な列挙名を取得する
これは、列挙型について何百万回も尋ねられる質問ではありません。
列挙型をスタイル可能な属性の一部として定義します (カスタム ウィジェットの場合)
次に、次のように使用します。
設定コンストラクターで「RGB」という名前を取得したいと思います。
しかし、これは機能せず、「RGB」の値をa.getString(...)
返し、スローされた例外が割り当てられます。"1"
mColorMode
null
それ以外の
注: ColorMode は問題の原因ではないことを強調したいと思いenum
ます。名前を取得する必要がある列挙型は、XML で宣言された質問の上部にある列挙型です。はい、名前は同じですが、数値が同じであるとは言えません。