[解決済み] XMLを用いたカスタムandroid UI要素の宣言
質問
XMLを使用してAndroid UI要素を宣言するにはどうすればよいですか?
どのように解決するのですか?
Android Developer Guide には、以下のようなセクションがあります。 カスタムコンポーネントの構築 . 残念ながら XML属性の議論 は、レイアウト・ファイル内でのコントロールの宣言のみをカバーし、クラスの初期化で実際に値を処理することはしません。手順は以下の通りです。
1. 属性を
values\attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCustomView">
<attr name="android:text"/>
<attr name="android:textColor"/>
<attr name="extraInformation" format="string" />
</declare-styleable>
</resources>
で修飾されていない名前を使っていることに注意してください。
declare-styleable
タグを使用します。のような非標準のアンドロイド属性は
extraInformation
は、その型を宣言する必要があります。スーパークラスで宣言されたタグは、サブクラスでも再宣言することなく使用することができます。
2. コンストラクタの作成
を使用するコンストラクタが2つあるので
AttributeSet
を初期化するために、 コンストラクタが呼び出す初期化メソッドを別に作成するのが便利です。
private void init(AttributeSet attrs) {
TypedArray a=getContext().obtainStyledAttributes(
attrs,
R.styleable.MyCustomView);
//Use a
Log.i("test",a.getString(
R.styleable.MyCustomView_android_text));
Log.i("test",""+a.getColor(
R.styleable.MyCustomView_android_textColor, Color.BLACK));
Log.i("test",a.getString(
R.styleable.MyCustomView_extraInformation));
//Don't forget this
a.recycle();
}
R.styleable.MyCustomView
は、自動生成された
int[]
リソースで、各要素は属性のIDである。属性は、XMLの各プロパティに対して、要素名に属性名を付加して生成されます。例えば
R.styleable.MyCustomView_android_text
には
android_text
属性は
MyCustomView
. 属性は、このように
TypedArray
を使用して、様々な
get
関数を使用します。もし、その属性がXMLで定義されていない場合は
null
が返されます。もちろん、戻り値の型がプリミティブの場合は例外で、その場合は第2引数が返される。
すべての属性を取得したくない場合は、この配列を手動で作成することが可能です。標準的なアンドロイドの属性のIDは
android.R.attr
一方、このプロジェクトで使用する属性は
R.attr
.
int attrsWanted[]=new int[]{android.R.attr.text, R.attr.textColor};
ご注意ください
ではなく
での使用は
android.R.styleable
のように
このスレッド
は、今後変更される可能性があります。これらの定数を一度に見ることができるのは便利なので、まだドキュメントに残っています。
3. などのレイアウトファイルで使用します。
layout\main.xml
名前空間宣言を含める
xmlns:app="http://schemas.android.com/apk/res-auto"
をトップレベルのxml要素に追加します。名前空間は、異なるスキーマが同じ要素名を使用した場合に発生する衝突を回避する方法を提供します (
本論文
をご覧ください。) URLは、スキーマを一意に識別するための単なる方法です。
実際にそのURLでホストされる必要はありません。
. もしこれが何もしていないように見えるなら、衝突を解決する必要がない限り、実際には名前空間接頭辞を追加する必要がないからです。
<com.mycompany.projectname.MyCustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:text="Test text"
android:textColor="#FFFFFF"
app:extraInformation="My extra information"
/>
完全修飾名を使用してカスタムビューを参照します。
Android LabelViewサンプル
完全な例が必要な場合は、android label view のサンプルを見てください。
TypedArray a=context.obtainStyledAttributes(attrs, R.styleable.LabelView);
CharSequences=a.getString(R.styleable.LabelView_text);
<declare-styleable name="LabelView">
<attr name="text"format="string"/>
<attr name="textColor"format="color"/>
<attr name="textSize"format="dimension"/>
</declare-styleable>
<com.example.android.apis.view.LabelView
android:background="@drawable/blue"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:text="Blue" app:textSize="20dp"/>
に含まれています。
LinearLayout
をnamespace属性で指定します。
xmlns:app="http://schemas.android.com/apk/res-auto"
リンク
関連
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] foo "を含む属性を選択するための正しいXPathは何ですか?
-
[解決済み] XPath: select text node
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] XMLでタグのブロックをコメントアウトするにはどうすればよいですか?
-
[解決済み] カスタム属性(attrs)の定義
-
[解決済み] DTDやXSDからサンプルXMLドキュメントを生成する方法は?
-
[解決済み] T-SQLでXML文字列の属性にある二重引用符をエスケープするにはどうすればよいですか?
-
[解決済み] XML インスタンスドキュメントから XSD スキーマを生成するためのツールはありますか?[クローズド]。
-
[解決済み] nuget 'packages' 要素が宣言されていない警告
-
[解決済み] Vim で一致する XML タグにジャンプする
-
[解決済み] XMLサイトマップのContent-Typeはどのような値ですか?
-
[解決済み] Eclipse で XML の検証を無効にする
-
[解決済み] XSD - 要素を何度でも好きな順番で並べられるようにするには?