2011-07-26 3 views
1

스피너에 표시된 선택한 항목의 텍스트 크기와 방향을 변경해야하지만 스피너의 기본 레이아웃 인 android.R을 계속 사용해야합니다. layout.simple_spinner_item스피너의 텍스트 크기와 방향을 변경하는 방법

왜? 맞춤 레이아웃을 사용하면 동적으로 생성 된 문자열 배열을 회 전자에로드 할 수 없기 때문입니다. 그것은 안드로이드의 실패입니다 : S

나를 좀 도와 줄래?

+0

, 당신이 제대로 스피너를 사용하는 방법을 이해하는 데 충분한 시간을 투자하지 않았다고 생각 예를 들면 다음과 같습니다로에서 검증되지 않은 최초의 균열은 . 사용자 정의 항목 레이아웃을 사용하는 경우에도 동적으로 추가 된 항목과 함께 잘 작동합니다. – inazaruk

+0

inazaruk, 그것은 말하기 좋다 : "그것은"작동하지만, 만약 당신이 내가 그것을 tryed 이해 stackoverflow와 구글을 많이 검색하고 내가 길을 찾지 못했습니다 내 게시물을 읽을 시간이 걸릴 왜냐하면,이 질문을하기 때문입니다. 그럼, 어떻게 해야할지 안다면 ... 어떻게 해야할지 ... – NullPointerException

답변

1

좋습니다. 너무 까다 롭지 만 너무 어렵지는 않습니다.

  1. SimpleAdapter 사용자 지정 어댑터를 만듭니다.
  2. SpinnerAdapter을이 새 어댑터에 구현했는지 확인하십시오. (Eclipse를 사용하는 경우 구현되지 않은 메소드를 작성하여 도움을 제공하십시오)
  3. SpinnerAdapter을 구현하면 드롭 다운보기 자원 xml 객체를 추가해야합니다. 정적으로 추가하거나 설정자를 정의하십시오.
  4. public View getView(int position, View convertView, ViewGroup parent) (사용자 정의보기를 회 전자에 반환하는 곳)에 parent.getSelectedItem()으로 전화하여 목록에있는 position의 항목과 같은지 확인하십시오.
  5. 글꼴이 더 큰 경우 글꼴을 크게 설정하십시오. 그렇지 않다면, 평소대로 설정하십시오 (회자가보기를 재활용하므로 큰 글꼴을 제자리에 남겨 둡니다). ,

    MyCustomSpinnerAdapter adapter = new MyCustomSpinnerAdapter(this, myListOfItems); 
    adapter.setDropDownViewResource(R.layout.my_dropdown_view_resource); 
    mySpinner.setAdapter(adapter); 
    

    는 구글이 그것을 수행하는 방법을 보려면 구글 codesearch here에서 살펴보고 "안드로이드 ArrayAdapter.java"를 검색 - :

은 활동에서이 같은 전화 어댑터를 사용하려면 코어/java/android/widget 링크를 클릭하면 나머지 다양한 것을 파악하는 데 필요한 다양한 어댑터, 인터페이스 및 위젯이있는 패키지로 이동합니다.

행운을 비네.

편집 : 나는 안드로이드의 실패라고 생각하지 않습니다

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Spinner; 
import android.widget.SpinnerAdapter; 
import android.widget.TextView; 

import com.beget.consumer.R; 

public class MyCustomSpinnerAdapter extends BaseAdapter implements SpinnerAdapter { 

    private String[] list; 
    private Context context; 

    public MyCustomSpinnerAdapter(Context context, String[] list) { 
     super(); 
     this.list = list; 
     this.context = context; 
     // TODO Auto-generated constructor stub 
    } 

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

    @Override 
    public Object getItem(int position) { 
     //you need to add index safety here - make sure that position is a valid index 
     return list[position]; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder; 

     if (convertView == null) { 
      convertView = context.inflate(R.layout.my_view_item, null); 
      holder = new ViewHolder(); 
      holder.myView = (TextView) convertView.findViewById(R.id.beget_box_description); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 

     } 

     if (list[position] == ((Spinner) parent).getSelectedItem()) { 
      holder.myView.setTextSize(25); 
     } else { 
      holder.myView.setTextSize(15); 
     } 

     holder.myView.setText(list[position]); 

     return convertView; 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     //change this if you want a different view for your dropdown list. It's the same as above, except you could 
     //inflate a different view if you wanted. 
     return getView(position, convertView, parent); 
    } 

    static class ViewHolder { 
     TextView myView; 
    } 

} 
+0

나는이 일을하는 법을 이해하지 못한다. 내 기술에 너무 어려워. 나는 구글에서 예제와 도움을 찾으려고 노력하고 있지만 찾을 수는 없다. 이 대답은 올바르게 구현되고 작동하는 것이 불가능하다고 생각합니다. – NullPointerException

+0

(테스트되지 않은) 예제를 추가했습니다. 그것은 당신이 원하는 것을 거의해야합니다. 그러나 보장은 없습니다! –

관련 문제