2013-07-26 2 views
1

2 요청 미만의 스피너를 구현하고 싶습니다.
1. 표시된 항목 목록을 표시하는 동안 텍스트 정렬은 아래 그림 4와 같이 남았습니다.
2. 하나의 항목을 선택한 후, 아래의 그림 1과 같이 선택한 항목을 오른쪽 정렬 할 수 있습니다. 아래
내 스피너 레이아웃 회 레이아웃 :
안드로이드에서 스피너 사용

     <Spinner 
          android:id="@+id/spinner1" 
          android:layout_width="wrap_content" 
          android:layout_height="match_parent" 
          android:layout_alignParentRight="true" 
          android:layout_centerVertical="true" 
          android:textColor="#000000" 
          android:gravity="right" 
          android:textAppearance="?android:attr/textAppearanceMedium" /> 

        </RelativeLayout> 

그리고 어댑터의의 getView 아래로는 :

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewTag viewTag; 
    if(convertView == null) { 
     convertView = myInflater.inflate(R.layout.row_spinner, null); 
     viewTag = new ViewTag((TextView)convertView.findViewById(R.id.textView1)); 
     convertView.setTag(viewTag); 
    } 
    else { 
     viewTag = (ViewTag)convertView.getTag(); 
    } 

    viewTag.line1.setText(gd.Lang.get(position)); 
    viewTag.line1.setTextColor(Color.BLACK); 
    viewTag.line1.setSelected(true); 
    viewTag.line1.setPadding(0, 0, 40, 0); 
    viewTag.line1.setGravity(Gravity.RIGHT); 

    return convertView; 
} 

그러나 Picture.1 및 Picture.2로 표시됩니다.
viewTag.line1.setGravity(Gravity.RIGHT);viewTag.line1.setGravity(Gravity.LEFT);으로 변경하면
그림 3과 그림 4로 표시됩니다.
그림 1과 그림 4가 동시에 도착하도록 수정하려면 어떻게해야합니까?

Picture.1
enter image description here
Picture.2는
enter image description here
는 Picture.3
enter image description here
Picture.4는
enter image description here

답변

2

어댑터에 getView() 및 getDropDownView()을 설정해야합니다.

의 getView() 사진 1의 레이아웃을 설정하고 getDropDownView()는 -as 설정 이름은 사진보기 드롭 다운 says- 것 4.

확인 this well written answer

1

당신은에, 어댑터 클래스에서 이러한 논리를 모두 처리 getView 함수는 리턴 한 뷰에 필요한 텍스트 정렬을 갖습니다. 항목을 클릭하면 어댑터 클래스에 해당 위치를 저장할 때 기본 어댑터와 함수를 사용하십시오. 위치에 기반한 getview에서 정렬을위한 논리를 가질 수 있습니다.

+0

getView 함수에서 항목 목록이나 선택한 항목을 감지하는 방법에 대한 자세한 내용을 제공 할 수 있습니까? spinner_itemClick 함수에서 – brian

+0

을 클릭하면 클릭 한 항목 위치가 표시됩니다. 이 함수 안에서 this adapter.setPosition (position)을 호출하십시오. 어댑터 클래스에서 개인 변수 selPos를 만듭니다. selPos 설정 = 위치; (이것은 setPosition() 함수의 내용입니다.) getView에서 selPos를 사용하여 logice를 수행하십시오. 전화에서 작성하는 것처럼 코드를 작성하기가 어렵습니다. 예를 들어 getView 함수에서 다음과 같이하십시오. if (selPos == 1) // 오른쪽 정렬 if (selPos == 2), 왼쪽 맞춤 –

1

우리가 보면 다음 코드에서는 getView()getDropDownView()에 이름 및 값 배열이 있습니다.

private void initView() { 
    SpinnerDropDownAdapter sddadapter = new SpinnerDropDownAdapter(this); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, sddadapter.name); 

    Spinner getViewSP = (Spinner) findViewById(R.id.getview_sp); 
    getViewSP.setAdapter(adapter); 

    Spinner getViewWDropDownSP = (Spinner) findViewById(R.id.getview_w_drop_down_sp); 
    getViewWDropDownSP.setAdapter(sddadapter); 
} 

static class SpinnerDropDownAdapter extends BaseAdapter implements 
     SpinnerAdapter { 
    Context context; 

    SpinnerDropDownAdapter(Context ctx) { 
     context = ctx; 
    } 

    String[] name = { " One", " Two", " Three", " Four", " Five", " Six", 
      " Seven", " Eight" }; 
    String[] value = { " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8" }; 

    @Override 
    public int getCount() { 
     return name.length; 
    } 

    @Override 
    public String getItem(int pos) { 
     // TODO Auto-generated method stub 
     return name[pos]; 
    } 

    @Override 
    public long getItemId(int arg0) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     TextView text = new TextView(context); 
     text.setTextColor(Color.BLACK); 
     text.setText(name[position]); 
     return text; 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, 
      ViewGroup parent) { 
     TextView text = new TextView(context); 
     text.setTextColor(Color.BLACK); 
     text.setText(value[position]); 
     return text; 
    } 
} 
관련 문제