[解決済み] カスタム属性(attrs)の定義
質問
のような独自の属性を実装する必要があります。
com.android.R.attr
公式のドキュメントには何も書かれていないので、これらの attrs をどのように定義し、私のコードからどのように使用するかについての情報が必要です。
どのように解決するのですか?
現在、最も優れたドキュメントはソースです。それを見ることができます こちら (attrs.xml) .
属性を定義するには、一番上の
<resources>
要素の中、または
<declare-styleable>
要素を使用します。もし、あるattrを複数の場所で使用するのであれば、ルート要素に入れます。なお、すべての属性は同じグローバルな名前空間を共有している。つまり、たとえ新しい属性を
<declare-styleable>
要素の外側で使用することができ、同じ名前で別の型の属性を作成することはできません。
を使用します。
<attr>
要素には2つのxml属性があります。
name
と
format
.
name
を使えば、何かを呼び出すことができ、これがコードでそれを参照することになるのです。
R.attr.my_attribute
. その
format
属性は、必要な属性の「タイプ」によって異なる値を持つことができます。
- 参照 - 他のリソースIDを参照している場合(例:"@color/my_color"、"@layout/my_layout")。
- 色
- ブーリアン
- 次元
- フロート
- 整数
- 文字列
- 分数
- enum - 通常は暗黙的に定義されます。
- フラグ - 通常は暗黙的に定義されます。
を使用することで、複数の種類にフォーマットを設定することができます。
|
, 例,
format="reference|color"
.
enum
属性は、以下のように定義できる。
<attr name="my_enum_attr">
<enum name="value1" value="1" />
<enum name="value2" value="2" />
</attr>
flag
属性は、値を定義して一緒にビット化できるようにする必要があることを除いて、似ています。
<attr name="my_flag_attr">
<flag name="fuzzy" value="0x01" />
<flag name="cold" value="0x02" />
</attr>
属性の他に
<declare-styleable>
要素を使用します。これにより、カスタムビューが使用できる属性を定義することができます。これを行うには
<attr>
要素を指定する必要があります。
format
. androidのattr、例えばandroid:gravityを再利用したい場合は、android:gravityの中にある
name
は、以下のようになります。
カスタムビューの例
<declare-styleable>
:
<declare-styleable name="MyCustomView">
<attr name="my_custom_attribute" />
<attr name="android:gravity" />
</declare-styleable>
カスタムビューにXMLでカスタム属性を定義する場合、いくつかのことを行う必要があります。最初に、属性を見つけるための名前空間を宣言する必要があります。これは、ルート・レイアウト要素で行います。通常、ルート・レイアウト要素には
xmlns:android="http://schemas.android.com/apk/res/android"
. ここで、さらに
xmlns:whatever="http://schemas.android.com/apk/res-auto"
.
例
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:whatever="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<org.example.mypackage.MyCustomView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
whatever:my_custom_attribute="Hello, world!" />
</LinearLayout>
最後に、そのカスタム属性にアクセスするには、通常、以下のようにカスタムビューのコンストラクタで行います。
public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyle, 0);
String str = a.getString(R.styleable.MyCustomView_my_custom_attribute);
//do something with str
a.recycle();
}
終わりです :)
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] Android XML drawable ファイルに円形を定義する方法を教えてください。
-
view.getRootView()の本当の意味とテストについて
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] グリッドレイアウトにおけるフリングジェスチャーの検出
-
[解決済み] APKファイルのリバースエンジニアリングを回避する方法
-
[解決済み] Android: ボタンや画像ボタンにテキストと画像を組み合わせて表示する
-
[解決済み] android:onClick XML属性とsetOnClickListenerは具体的にどのように違うのですか?
-
[解決済み】AndroidでTextViewのfontFamilyを変更する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Android端末にADBが接続できない!を解決。理由: デバイスが認証されていない!
-
armeabi-v7a armeabi arm64-v8a パラメータの意味説明
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
エラー:未宣言の識別子(AS)の使用
-
repo: コマンドが見つかりません
-
Androidプロセス生存のためのソリューション
-
問題 ---- Android ---- ActivityManager: Error: アクティビティクラス{xx/xx.MainActivity}が存在しない
-
アンドロイドスタジオソフトウェア使用詳細説明書
-
Android.support.v7.widget.Toolbar が見つかりませんでした。
-
[解決済み] XMLを用いたカスタムandroid UI要素の宣言