[解決済み] Android - カスタムUIとカスタムアトリビュート
2022-09-15 20:37:28
質問
カスタム UI 要素を作成できることは知っています (ビューまたは特定の UI 要素の拡張機能によって)。しかし、新しく作成された UI 要素に新しいプロパティまたは属性を定義することは可能ですか (継承ではなく、デフォルトのプロパティまたは属性で処理できない特定の動作を定義するための新しいプロパティを意味します)。
例: 私のカスタム要素の要素。
<com.tryout.myCustomElement
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Element..."
android:myCustomValue=<someValue>
/>
では マイカスタムバリュー ?
Thx
どのように解決するのですか?
はい、簡単に説明します。
1. 属性XMLを作成する
の中に新しいXMLファイルを作成します。
/res/values/attrs.xml
に、属性とその型
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
基本的には、1つの
<declare-styleable />
を設定する必要があります。私は可能なタイプの完全なリストを見つけられなかったので、あなたは1つのソースを見る必要があると思います。私が知っているタイプは
参照(他のリソースへの)、色、ブーリアン、次元、浮動小数点数、整数、および文字列です。
. これらはかなり自明である
2. レイアウトで属性を使用する
これは上でやったのと同じように動作しますが、1つだけ例外があります。カスタム属性は、それ自身のXML名前空間が必要です。
<com.example.yourpackage.MyCustomElement
xmlns:customNS="http://schemas.android.com/apk/res/com.example.yourpackage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Element..."
customNS:distanceExample="12dp"
/>
かなりわかりやすい。
3. 渡された値を利用する
カスタムビューのコンストラクタを修正して、値をパースするようにします。
public MyCustomElement(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomElement, 0, 0);
try {
distanceExample = ta.getDimension(R.styleable.MyCustomElement_distanceExample, 100.0f);
} finally {
ta.recycle();
}
// ...
}
distanceExample
はこの例ではプライベートメンバー変数です。
TypedArray
は、他のタイプの値をパースするために、他の多くのものを得ました。
で終わりです。パースされた値を
View
で使うなどして、修正することができます。
onDraw()
を使って、それに応じて外観を変更することができます。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio
最新
-
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)の定義
-
[解決済み] XMLを用いたカスタムandroid UI要素の宣言
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] WhatsAppでメッセージを送信する