プログラムでビューにカスタム属性を設定する方法

ローマ人:

プログラムでビューにカスタム属性を設定して、検証状態を設定しようとしています。

まず、このレイアウトをテキストフィールド用に作成しました。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <shape>
        <solid android:color="@android:color/transparent" />
    </shape>
</item>

<item android:right="1dp" android:left="1dp">
    <shape>
        <solid android:color="@color/state_color" />
    </shape>
</item>

<!-- main color -->
<item
    android:bottom="1.5dp"
    android:left="2.5dp"
    android:right="2.5dp">
    <shape>
        <solid android:color="@android:color/white" />
    </shape>
</item>

<!-- draw another block to cut-off the left and right bars -->
<item android:bottom="5.0dp">
    <shape>
        <solid android:color="@android:color/white" />
    </shape>
</item>

次に、この属性を定義しました:

<attr name="validation_state" format="enum">
        <enum name="None" value="0"/>
        <enum name="Error" value="1"/>
        <enum name="Warning" value="2"/>
        <enum name="Success" value="3"/>
</attr>

また、これらの色定義state_color.xmlを定義しました。

<selector xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:color="@color/state_error"
    app:validation_state="Error"/>

<item
    android:color="@color/state_warning"
    app:validation_state="Warning"/>

<item
    android:color="@color/state_success"
    app:validation_state="Success"/>

<item
    android:color="@color/state_default"/>

最後に、Androidフレームワークの1つを拡張する独自のEditTextクラスを作成しました

    private static final int[] STATE_MANDATORY = { R.attr.mandatory };
private static final int[] STATE_READONLY = { R.attr.readonly };
private static final int[] STATE_VALIDATION_STATE = { R.attr.validation_state };

private boolean _mandatory = false;
private boolean _readonly = false;
private ValidationState _validationState = ValidationState.NONE;

public mcEditText(Context context, AttributeSet attrs)
{
    super(context, attrs);
}

@Override
public void setMandatory(final boolean mandatory)
{
    _mandatory = mandatory;
    refreshDrawableState();
}

@Override
public void setReadOnly(final boolean readonly)
{
    _readonly = readonly;
    refreshDrawableState();
}

@Override
public void setValidationState(final ValidationState state)
{
    _validationState = state;
    refreshDrawableState();
}

@Override
protected int[] onCreateDrawableState(int extraSpace)
{
    final int[] drawableState = super.onCreateDrawableState(extraSpace + 3);
    if (_mandatory)
    {
        mergeDrawableStates(drawableState, STATE_MANDATORY);
    }
    if (_readonly)
    {
        mergeDrawableStates(drawableState, STATE_READONLY);
    }
    if (_validationState != ValidationState.NONE)
    {
        mergeDrawableStates(drawableState, STATE_VALIDATION_STATE);
    }
    return drawableState;

}

この色の定義をビューに追加しましたが、それも認識しているため、エラー状態が表示されます。しかし、今は異なる状態を切り替える方法がわかりません。プログラムで "validation_state"属性を設定する必要がありますが、それはどのようにして可能ですか?

ライオネル・ブリアン:

Androidはこの種の作業の列挙型属性をサポートしていないようです。ブール属性を使用する必要があります

<attr name="validation_state_none" format="boolean"/>
<attr name="validation_state_error" format="boolean"/>
...

あなたがしようとしていることの最も一般的な例は、フォーカス可能で編集可能な属性のようなものです。そしてそれはアンドロイドソースのアトミックブール属性で処理されます

(テストされていない)あなたに役立つかもしれない別のソリューションは、プログラムで独自のドローアブルを作成することです。見てくださいDrawableContainerStateListDrawableを

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プログラムでビューにカスタム属性を設定する方法

分類Dev

カスタム画像をプログラムでとUIBarButtonItemに設定する方法

分類Dev

Android:プログラムでビュースタイルを設定する

分類Dev

カスタムJavaビュークラスをRelativeLayoutにプログラムでロードする方法

分類Dev

プログラムで設定からカスタムキーボード名を有効にする方法

分類Dev

androidはプログラムでカスタム値をカスタムテキストビューに設定します

分類Dev

カスタムビュークラスの属性ドローアブルを設定する方法

分類Dev

プログラムでテキストビューにテキストの色を設定する方法

分類Dev

Androidはプログラムでカスタムビューの高さと幅を設定します

分類Dev

ビューコントローラの背景にカスタムカラーを設定する方法

分類Dev

WooCommerce製品で設定されたプログラムによるカスタム属性値を更新します

分類Dev

カスタム フォントを使用してテキスト ビューで太字と斜体のスタイルを設定する (プログラムで)

分類Dev

プログラムでビューの重力を設定する

分類Dev

プログラムでビューを設定する

分類Dev

プログラムで画像ビューの向きを設定する方法

分類Dev

プログラムでAndroidビューに「?selectableItemBackground」を設定する

分類Dev

Android:プログラムでカスタムビューを描画する

分類Dev

テキストビューでlayout_toEndOfとlayout_toRightOfをプログラムで設定する方法

分類Dev

プログラム設定をコンピュータに保存する方法は?

分類Dev

カスタムコントロールをプログラムでAutoLayoutビューの中央に配置する

分類Dev

プログラムで制約のあるビューにカスタムボタンを追加する

分類Dev

リストビューの選択色をプログラムで設定する方法

分類Dev

プログラムで追加されたビューのスタイルを設定する

分類Dev

Android:プログラムでURLから画像ビューに画像を設定する方法

分類Dev

ビューをドラッグするときにカスタムアンカーを設定する

分類Dev

ダイアログでgetWindowsにカスタムカラーを設定する方法

分類Dev

プログラムでタイムピッカー値を設定する

分類Dev

カスタム通知テキストビューで値を設定する方法

分類Dev

AndroidカスタムビューでXMLプロパティを設定した後にコールバックを起動する方法は?

Related 関連記事

  1. 1

    プログラムでビューにカスタム属性を設定する方法

  2. 2

    カスタム画像をプログラムでとUIBarButtonItemに設定する方法

  3. 3

    Android:プログラムでビュースタイルを設定する

  4. 4

    カスタムJavaビュークラスをRelativeLayoutにプログラムでロードする方法

  5. 5

    プログラムで設定からカスタムキーボード名を有効にする方法

  6. 6

    androidはプログラムでカスタム値をカスタムテキストビューに設定します

  7. 7

    カスタムビュークラスの属性ドローアブルを設定する方法

  8. 8

    プログラムでテキストビューにテキストの色を設定する方法

  9. 9

    Androidはプログラムでカスタムビューの高さと幅を設定します

  10. 10

    ビューコントローラの背景にカスタムカラーを設定する方法

  11. 11

    WooCommerce製品で設定されたプログラムによるカスタム属性値を更新します

  12. 12

    カスタム フォントを使用してテキスト ビューで太字と斜体のスタイルを設定する (プログラムで)

  13. 13

    プログラムでビューの重力を設定する

  14. 14

    プログラムでビューを設定する

  15. 15

    プログラムで画像ビューの向きを設定する方法

  16. 16

    プログラムでAndroidビューに「?selectableItemBackground」を設定する

  17. 17

    Android:プログラムでカスタムビューを描画する

  18. 18

    テキストビューでlayout_toEndOfとlayout_toRightOfをプログラムで設定する方法

  19. 19

    プログラム設定をコンピュータに保存する方法は?

  20. 20

    カスタムコントロールをプログラムでAutoLayoutビューの中央に配置する

  21. 21

    プログラムで制約のあるビューにカスタムボタンを追加する

  22. 22

    リストビューの選択色をプログラムで設定する方法

  23. 23

    プログラムで追加されたビューのスタイルを設定する

  24. 24

    Android:プログラムでURLから画像ビューに画像を設定する方法

  25. 25

    ビューをドラッグするときにカスタムアンカーを設定する

  26. 26

    ダイアログでgetWindowsにカスタムカラーを設定する方法

  27. 27

    プログラムでタイムピッカー値を設定する

  28. 28

    カスタム通知テキストビューで値を設定する方法

  29. 29

    AndroidカスタムビューでXMLプロパティを設定した後にコールバックを起動する方法は?

ホットタグ

アーカイブ