반응형
Android NumberPicker : XML에서 최소, 최대, 기본값 설정
XML 레이아웃에서 NumberPicker 의 최소, 최대 및 기본값을 설정하는 방법이 있습니까?
활동 코드 내에서 수행하고 있습니다.
np = (NumberPicker) findViewById(R.id.np);
np.setMaxValue(120);
np.setMinValue(0);
np.setValue(30);
XML은 동작이 아닌 속성을 정의하기 때문에 분명히 더 적절합니다.
XML 레이아웃을 사용하여 설정하는 방법이 있습니까?
나는 같은 문제가 있었는데, 이것이 내가 그것을 해결 한 방법입니다 (MKJParekh의 의견에 따르면).
나만의 NumberPicker-Class를 만들었습니다.
package com.exaple.project; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.util.AttributeSet; import android.widget.NumberPicker; @TargetApi(Build.VERSION_CODES.HONEYCOMB)//For backward-compability public class MyNumberPicker extends NumberPicker { public MyNumberPicker(Context context) { super(context); } public MyNumberPicker(Context context, AttributeSet attrs) { super(context, attrs); processAttributeSet(attrs); } public MyNumberPicker(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); processAttributeSet(attrs); } private void processAttributeSet(AttributeSet attrs) { //This method reads the parameters given in the xml file and sets the properties according to it this.setMinValue(attrs.getAttributeIntValue(null, "min", 0)); this.setMaxValue(attrs.getAttributeIntValue(null, "max", 0)); } }
이제 XML 레이아웃 파일에서이 NumberPicker를 사용할 수 있습니다.
<com.exaple.project.myNumberPicker android:id="@+id/numberPicker1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical" max="100" min="1" />
유용한 의견을 주신 MKJParekh에게 감사드립니다.
다음은 Android 문서 를 따르는 업데이트 된 버전입니다
(따라서 테마 및 Android 스튜디오 디자이너 미리보기 지원).
values / attrs.xml :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="NumberPickerWithXml">
<attr name="maxValue" format="integer" />
<attr name="minValue" format="integer" />
<attr name="defaultValue" format="integer" />
</declare-styleable>
</resources>
NumberPickerWithXml.kt :
package com.example.library.ui
import android.content.Context
import android.util.AttributeSet
import android.widget.NumberPicker
import com.example.library.ui.R
class NumberPickerWithXml : NumberPicker {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
processXmlAttributes(attrs)
}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
processXmlAttributes(attrs, defStyleAttr)
}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {
processXmlAttributes(attrs, defStyleAttr, defStyleRes)
}
private fun processXmlAttributes(attrs: AttributeSet, defStyleAttr: Int = 0, defStyleRes: Int = 0) {
val attributes = context.theme.obtainStyledAttributes(attrs, R.styleable.NumberPickerWithXml, defStyleAttr, defStyleRes)
try {
this.minValue = attributes.getInt(R.styleable.NumberPickerWithXml_minValue, 0)
this.maxValue = attributes.getInt(R.styleable.NumberPickerWithXml_maxValue, 0)
this.value = attributes.getInt(R.styleable.NumberPickerWithXml_defaultValue, 0)
} finally {
attributes.recycle()
}
}
}
... 또는 NumberPickerWithXml.java (테스트되지 않음) :
package com.example.library.ui
import android.content.Context
import android.util.AttributeSet
import android.widget.NumberPicker
import com.example.library.ui.R
public class NumberPickerWithXml extends NumberPicker {
public NumberPickerWithXml(Context context) {
super(context);
}
public NumberPickerWithXml(Context context, AttributeSet: attrs) {
super(context, attrs);
processXmlAttributes(attrs, 0, 0);
}
public NumberPickerWithXml(Context context, AttributeSet: attrs, int: defStyleAttr) {
super(context, attrs, defStyleAttr);
processXmlAttributes(attrs, defStyleAttr, 0);
}
public NumberPickerWithXml(Context context, AttributeSet: attrs, int: defStyleAttr, int: defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
processXmlAttributes(attrs, defStyleAttr, defStyleRes);
}
private void processXmlAttributes(AttributeSet: attrs, int: defStyleAttr, int: defStyleRes) {
TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs, R.styleable.NumberPickerWithXml, defStyleAttr, defStyleRes)
try {
this.minValue = attributes.getInt(R.styleable.NumberPickerWithXml_minValue, 0);
this.maxValue = attributes.getInt(R.styleable.NumberPickerWithXml_maxValue, 0);
this.value = attributes.getInt(R.styleable.NumberPickerWithXml_defaultValue, 0);
} finally {
attributes.recycle();
}
}
}
레이아웃에서의 사용법 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:custom="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<com.example.library.ui.NumberPickerWithXml
android:layout_width="wrap_content"
android:layout_height="wrap_content"
custom:defaultValue="30"
custom:maxValue="120"
custom:minValue="0" />
</LinearLayout>
ReferenceURL : https://stackoverflow.com/questions/12317960/android-numberpicker-set-min-max-default-from-xml
반응형
'programing' 카테고리의 다른 글
'cl'은 내부 또는 외부 명령으로 인식되지 않습니다. (0) | 2021.01.15 |
---|---|
request.user는 SimpleLazyObject를 반환합니다. 어떻게 "깨우기"합니까? (0) | 2021.01.15 |
Play 스토어를 열지 않고 프로그래밍 방식으로 애플리케이션을 설치하는 방법 (Google 드라이브처럼) (0) | 2021.01.15 |
개체의 [[prototype]]을 변경하는 것이 성능에 나쁜 이유는 무엇입니까? (0) | 2021.01.15 |
Java 8의 parallelStream에는 몇 개의 스레드가 생성됩니까? (0) | 2021.01.15 |