簡體   English   中英

Android創建自定義NumberPicker小部件

[英]Android create custom NumberPicker widget

我在應用程序中使用了一些simvot數字選擇器,我想為它創建自定義小部件並在所有項目中使用,現在我創建了這些文件,但我無法為自定義小部件設置任何值。

我的屬性:

<declare-styleable name="CNumberPicker">
    <attr name="maxValue"               format="string" />
    <attr name="minValue"               format="string" />
    <attr name="value"                  format="string" />
</declare-styleable>

我的自定義NumberPicker小部件:

public class CNumberPicker extends net.simonvt.numberpicker.NumberPicker implements OnClickListener {

    private int maxValue;
    private int minValue;
    private int value;

    public CNumberPicker(Context context) {
        super(context);
    }

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

    public CNumberPicker(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CNumberPicker, defStyle, 0);
        processAttributeSet(attrs);

        maxValue = Integer.parseInt(a.getString(R.styleable.CNumberPicker_maxValue));
        minValue = Integer.parseInt(a.getString(R.styleable.CNumberPicker_minValue));

        a.recycle();
        setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {

    }


    private void processAttributeSet(AttributeSet attrs) {
        this.setMaxValue(attrs.getAttributeIntValue(null, "maxValue", 0));
    }

}

我定義的小部件進入xml:

<com.sample.widget.CNumberPicker
    android:id="@+id/np_choose_hour"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginLeft="10dp"
    android:layout_weight="0.20"
    android:gravity="center_horizontal"
    app:maxValue="10"
    app:minValue="1"
    app:value="5">
</com.sample.widget.CNumberPicker>

如何在布局中將值定義為xml?

你必須在代碼中誇大布局。

public CNumberPicker(Context context) {
    super(context);
    LayoutInflater.from(context).inflate(R.layout.cnumberpicker, this);
}

假設布局文件是cnumberpicker.xml

編輯:這3個函數是構造函數。 可以調用其中任何一個來構造對象。 通過使用this而不是super我們可以強制所有構造函數最終調用3參數構造函數。 你需要一些凝聚力。 每次進行一次更改時,您都不希望復制粘貼代碼。

public CNumberPicker(Context context) {
    this(context, null);
}

public CNumberPicker(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public CNumberPicker(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CNumberPicker, defStyle, 0);
    processAttributeSet(attrs);

    // this method allows a default value if no attributes are given. You should use them.
    maxValue = Integer.parseInt(a.getString(R.styleable.CNumberPicker_maxValue,"10"));
    minValue = Integer.parseInt(a.getString(R.styleable.CNumberPicker_minValue,"0"));
    a.recycle();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM