Android2012. 2. 4. 08:23

Spinner 컴퍼넌트는 xml을 이용하여 height 사이즈를 변경 시킬 수 있는데 어느 정도 줄이다 보면 글자 크기가 너무 커서 글자가 잘리는 경우가 생기더군요. 이럴 경우엔 TextView 레이아웃을 만들어 사용될 Spinner가 임의로 생성한 TextView 레이아웃을 참조하게 만들면 손쉽게 글자 Size는 물론 Color/Align 등을 변경 시킬 수 있습니다.

 
<!-- spinner_item.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/tv_spitem"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:textSize="12pt"         
         android:textColor="#F00"
         android:gravity="center"
/>
/** Android-8 , 미리설정된 TextView 레이아웃을 참조 */
ArrayAdapter<?> a8Adapter = ArrayAdapter.createFromResource(
        this, R.array.spinner_arr_a8, R.layout.spinner_item);
a8Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp_a8.setAdapter(a8Adapter);

ArrayAdapter 설정에서 spinner_item.xml 을 연결 시켜 사용하면 됩니다.



Spinner의 배열이 고정되어 있으면 value/string.xml 에 string-array 를 이용하여 사용하면 되지만 배열의 값이 유동적으로 변해야 한다면 string-array를 사용하기엔 무리가 있더라구요.(string-array의 값을 유동적으로 바꾸는 방법은 찾아보지 않았습니다.)

java에서 string[] 배열을 만들어 spinner에 연결시키는 방법과 Custom ArrayAdapter를 만들어 TextView 설정도 할 수 있게끔 만들어 보았습니다.

/** Android-13 , Custom Adapter 참조 , 임의의 String[] 배열 사용*/
String[] a13s = {"Android-13","레이아웃#1","레이아웃#2"};
SpinnerAdapter a13Adapter = new SpinnerAdapter(this,
        android.R.layout.simple_spinner_item, a13s);
sp_a13.setAdapter(a13Adapter);
public class SpinnerAdapter extends ArrayAdapter<String> {
    Context context;
    String[] items = new String[] {};
 
    public SpinnerAdapter(final Context context,
            final int textViewResourceId, final String[] objects) {
        super(context, textViewResourceId, objects);
        this.items = objects;
        this.context = context;
    }
 
    /**
     * 스피너 클릭시 보여지는 View의 정의
     */
    @Override
    public View getDropDownView(int position, View convertView,
            ViewGroup parent) {
 
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(context);
            convertView = inflater.inflate(
                    android.R.layout.simple_spinner_dropdown_item, parent, false);
        }
 
        TextView tv = (TextView) convertView
                .findViewById(android.R.id.text1);
        tv.setText(items[position]);
        tv.setTextColor(Color.RED);
        tv.setTextSize(25);
        return convertView;
    }
 
    /**
     * 기본 스피너 View 정의
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(context);
            convertView = inflater.inflate(
                    android.R.layout.simple_spinner_item, parent, false);
        }
 
        TextView tv = (TextView) convertView
                .findViewById(android.R.id.text1);
        tv.setText(items[position]);
        tv.setTextColor(Color.BLUE);
        tv.setTextSize(12);
        return convertView;
    }
}

Custom ArrayAdapter를 이용해 spinner에 보여지는 font 설정과 spinner 클릭 시 보여지게 되는 view들의 속성까지 설정이 가능 합니다.

- Android-8은 spinner_item.xml 을 지정한 레이아웃
- Android-13은 임의의 배열과 Custom ArrayAdapter를
이용한 레이아웃입니다.
- Android-13 스피너 클릭 시 보여지게 되는 레이아웃.
(Custom ArrayAdapter의 getDropDownView에서 TextView의 속성을 변경하여 사용함.)



'Android' 카테고리의 다른 글

#Android EditText에서 SoftKeyboard 처리  (0) 2012.02.16
#Android ViewPager  (2) 2012.02.07
#Android Device별 기본 UI (Spinner)  (0) 2012.02.03
#Android 이미지 다운로드  (0) 2012.01.19
#Android 파일 다운로드  (0) 2012.01.18
Posted by ™설야