프로그래밍/안드로이드

안드로이드 - NumberPicker를 이용한 숫자 선택하는 위젯 만들기

가카리 2015. 8. 16. 16:26
반응형

 

넘버 피커는 일정한 범위에 있는 숫자 값 중에 하나를 선택해주는 위젯이다.

 

날짜나 시간 선택기와 비슷한 모양을 하고 있고 입력 필드를 롱터치해서 직접 값을 입력할 수도 있다.

 

    void setMinValue(int minValue)

    void setMaxValue(int maxValue)

    void setValue(int value)

 

setMinValue로 범위의 최소값을 지정하고 setMaxValue로 최대값을 지정한다. 그리고 setValue에서 최대값을 넘어가는 것을 지정했다면 자동적으로 최대값이 바뀌게 된다.

 

    void setWrapSelectorWheel(boolean wrapSelectorWheel)

 

위 메소드는 범위가 1에서 10일 때 10을 초과하면 다시 1로 갈껀지 아니면 10에서 멈출건지를 나타내는 메소드이다.

 

    void setOnLongPressUpdateInterval(long intervalMillis)

 

디폴트는 0.3초로 0.3초마다 한번씩 값이 증가한다.

 

    void setDisplayedValues(String[] displayedValues)

 

범위의 각 값에 해당하는 문자열을 배열로 지정한다.

값 변경 시나 스크롤 시에 이벤트를 받고 싶다면 다음 메소드로 이벤트를 등록한다.

 

    void setOnValueChangedListener(NumberPicker.OnValueChangeListener onValueChangedListener)

    void setOnScrollListener(NumberPicker.OnScrollListener onScrollListener)

 

변경 즉시 어떤 처리를 할 필요가 있을 때만 리스너를 등록한다.

 

다음은 예제이다.

 

activity_number_picker_test.xml

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

 

<NumberPicker

android:id="@+id/picker1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginRight="2dp"

/>

<NumberPicker

android:id="@+id/picker2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginRight="2dp"

/>

    <NumberPicker

     android:id="@+id/picker3"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:layout_marginRight="2dp"

     />

    <NumberPicker

     android:id="@+id/picker4"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:layout_marginRight="2dp"

     />

    <NumberPicker

     android:id="@+id/picker5"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:layout_marginRight="2dp"

     />

 

    

</LinearLayout>

 

 

NumberPickerTest.java

 

package com.example.ch13_numberpicker;

 

import android.app.Activity;

import android.os.Bundle;

import android.widget.NumberPicker;

import android.widget.NumberPicker.OnValueChangeListener;

import android.widget.Toast;

 

 

public class NumberPickerTest extends Activity {

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_number_picker_test);

 

        //기본적으로 0~5까지 넘버피커를 만들고

        //5까지 올리면 더이상 올라가지 않게 하기

        NumberPicker picker1 = (NumberPicker)findViewById(R.id.picker1);

        picker1.setMinValue(0);

        picker1.setMaxValue(5);

        picker1.setWrapSelectorWheel(false);

        

        //0~20까지만들고 길게 누르면 빨리 값이 바뀌게 하기

        NumberPicker picker2 = (NumberPicker)findViewById(R.id.picker2);

        picker2.setMinValue(0);

        picker2.setMaxValue(20);

        picker2.setOnLongPressUpdateInterval(100);

        

        //0~6으로 하고 ~일요일로 하기

        NumberPicker picker3 = (NumberPicker)findViewById(R.id.picker3);

        picker3.setMinValue(0);

        picker3.setMaxValue(6);

        picker3.setDisplayedValues(new String[]{

                "일요일", "월요일", "화요일", "수요일", "목요일", "금요일",

                 "토요일"});

 

        //0~3으로 하고 값별로 텍스트로 바꿔 출력하기

        NumberPicker.Formatter mFormatter = new NumberPicker.Formatter() {

            

            @Override

            public String format(int value) {

                // TODO Auto-generated method stub

                switch(value){

                case 0:

                    return "zero";

                case 1:

                    return "one";

                case 2:

                    return "two";

                

                }

                

                return null;

            }

        };

 

        //0~2로하고 텍스트로 바꿔 출력하기

        NumberPicker picker4 = (NumberPicker)findViewById(R.id.picker4);

        picker4.setMinValue(0);

        picker4.setMaxValue(2);

        picker4.setFormatter(mFormatter);

        

        //100~200으로 하고 값이 바뀔때마다 토스트 메시지 띄우기

        NumberPicker picker5 = (NumberPicker)findViewById(R.id.picker5);

        picker5.setMinValue(100);

        picker5.setMaxValue(200);

        picker5.setOnValueChangedListener(new OnValueChangeListener() {

            

            @Override

            public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

                // TODO Auto-generated method stub

                Toast.makeText(NumberPickerTest.this, "Value : " + newVal, Toast.LENGTH_SHORT).show();

            }

        });

        

        

    }

 

 

}

 

출력 화면