2012-09-17 5 views
0

색상 선택을위한 회 전자를 만들려고합니다. 색상은 Spinner 헤더에 표시되어야합니다. 여기에 스크린 샷입니다 :맞춤형 회 전자 배경

Sceenshot

그러나 당신이 볼 수 있듯이, 색상 내 9 패치 스피너 배경 (헤더)를 기입하지 않습니다. 여기에 9 패치 배경입니다 : 여기

spinner = (Spinner) findViewById(R.id.spinner); 
ArrayAdapter<String> adapter = new MyArrayAdapter(this, R.layout.spinner_row, R.id.textView1, items); 
spinner.setAdapter(adapter); 

private class MyArrayAdapter extends ArrayAdapter<String>{ 

    public MyArrayAdapter(Context context, int resource, int textViewResourceId, String[] objects) { 
     super(context, resource, textViewResourceId, objects); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     return getCustomViewSmall(position, convertView, parent); 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     return getCustomView(position, convertView, parent); 
    } 

    public View getCustomView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = getLayoutInflater(); 
     View row = inflater.inflate(R.layout.spinner_row, parent, false); 
     View v = (View) row.findViewById(R.id.spinnerFrame); 
     v.setBackgroundColor(getColor(position)); 
     return row; 
    } 

    public View getCustomViewSmall(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = getLayoutInflater(); 
     View row = inflater.inflate(R.layout.spinner_row_small, parent, false);  
     row.setBackgroundColor(getColor(position));  
     return row; 
    } 

    private int getColor(int pos) { 
     switch(pos) { 
     case 0: 
      return colors[0]; // Blue 
     case 1: 
      return colors[1]; // Purple 
     case 2: 
      return colors[2]; // Orange 
     case 3: 
      return colors[3]; // Yellow 
     case 4: 
      return colors[4]; // Cyan 
     } 
     return colors[5]; 
    } 
} 

그리고 :

Background

는 그러나
내가 정의 ArrayAdapter와 구현 왜 ... 난 이해가 안 돼요, 여기에 코드입니다 레이아웃의 코드 :

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/spinnerFrameSmall" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_gravity="center" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</FrameLayout> 
:
spinner_row_small.xml (즉, 상기 헤더의 배치도이다)

spinner_row.xml (행의 레이아웃) :

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/FrameLayout1" 
android:layout_width="match_parent" 
android:layout_height="50dp" 
android:layout_gravity="center" 
android:background="@color/white" > 

<FrameLayout 
    android:id="@+id/spinnerFrame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:layout_marginBottom="1dp" 
    android:layout_marginTop="1dp" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" /> 
</FrameLayout> 
</FrameLayout> 

그리고 main.xml에는 : 누군가가 내 도움이 될 수있는 경우

 <Spinner 
      android:id="@+id/spinner" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/textview" 
      android:spinnerMode="dropdown"  
      android:popupBackground="@drawable/spinner_background"   
      android:layout_marginBottom="30dp" /> 

나는 매우 기뻐할 것입니다.
감사합니다.

+2

이미지에 대한 나쁜 링크. 무결성을 위해 SO 자신의 업로드 기능 사용 –

답변

1

코드에 아무 것도 표시되지 않지만 nine patch image의 문제는 표시된 공간 만 확대되고 실제로 표시된 공간 만 표시됩니다. 그래서 모든면에 공간을 확보하고 있습니다 (표시가없는 채로 남음). 나는 9 개의 패치 이미지가 많은 색상 복잡성없이 간단한 배경에 유용하다고 생각합니다.

+0

나는 당신이 옳은지 모르겠다. 9 패치 이미지를 수정했지만 그 결과는 같습니다. [new nine-patch] (https://dl.dropbox.com/u/61662712/textview_spinner2.9.png) 새로운 9 패치 이미지를 사용하면 패치, 색상은 전체 영역을 채워야합니다. 그러나 그 결과는 여전히 같습니다. 그래서 내 문제가 내 배경 이미지가 아니라고 생각합니다. 감사합니다. – Namenlos

+0

한 번 깨끗한 프로젝트 n 다시 실행 – Braj

+0

아니요, 변경하지 마십시오. 하지만 이제는 "minHeigt"속성으로 처리합니다. 문제를 가져 주셔서 감사합니다! – Namenlos