초기 텍스트“Select One”으로 Android Spinner를 만드는 방법은 무엇입니까?
처음에 (사용자가 아직 선택하지 않은 경우) 텍스트 "Select One"을 표시하는 Spinner를 사용하고 싶습니다. 사용자가 스피너를 클릭하면 항목 목록이 표시되고 옵션 중 하나를 선택합니다. 사용자가 선택하면 선택한 항목이 "하나 선택"대신 스피너에 표시됩니다.Spinner를 만드는 다음 코드가 있습니다.
String[] items = new String[] {"One", "Two", "Three"}; Spinner spinner = (Spinner) findViewById(R.id.mySpinner); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter);
이 코드를 사용하면 처음에 "One"항목이 표시됩니다. 새 항목 "Select One"을 항목에 추가 할 수 있지만 드롭 다운 목록에 "Select One"도 첫 번째 항목으로 표시됩니다.이 문제를 어떻게 해결할 수 있습니까?
다음은
Spinner
뷰 를 재정의하는 일반적인 솔루션입니다 .
setAdapter()
초기 위치를 -1로 설정하도록 대체 하고 제공된 프록시
SpinnerAdapter
가 0보다 작은 위치에 대한 프롬프트 문자열을 표시하도록 프록시합니다 .이것은 안드로이드 1.5에서 4.2까지 테스트되었지만 구매자는 조심하십시오! 이 솔루션은 반사에 의존하기 때문에 개인을 호출
AdapterView.setNextSelectedPositionInt()
하고
AdapterView.setSelectedPositionInt()
그것은 미래의 OS 업데이트에서 작동하지 않을 수 있어요. 그럴 것 같지만 결코 보장되지는 않습니다.일반적으로 나는 이와 같은 것을 용납하지 않을 것이지만,이 질문은 충분한 시간을 요구 받았으며 솔루션을 게시 할 것이라고 생각한 합리적인 요청처럼 보입니다.
/** * A modified Spinner that doesn't automatically select the first entry in the list. * * Shows the prompt if nothing is selected. * * Limitations: does not display prompt if the entry list is empty. */ public class NoDefaultSpinner extends Spinner { public NoDefaultSpinner(Context context) { super(context); } public NoDefaultSpinner(Context context, AttributeSet attrs) { super(context, attrs); } public NoDefaultSpinner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setAdapter(SpinnerAdapter orig ) { final SpinnerAdapter adapter = newProxy(orig); super.setAdapter(adapter); try { final Method m = AdapterView.class.getDeclaredMethod( "setNextSelectedPositionInt",int.class); m.setAccessible(true); m.invoke(this,-1); final Method n = AdapterView.class.getDeclaredMethod( "setSelectedPositionInt",int.class); n.setAccessible(true); n.invoke(this,-1); } catch( Exception e ) { throw new RuntimeException(e); } } protected SpinnerAdapter newProxy(SpinnerAdapter obj) { return (SpinnerAdapter) java.lang.reflect.Proxy.newProxyInstance( obj.getClass().getClassLoader(), new Class[], new SpinnerAdapterProxy(obj)); } /** * Intercepts getView() to display the prompt if position < 0 */ protected class SpinnerAdapterProxy implements InvocationHandler { protected SpinnerAdapter obj; protected Method getView; protected SpinnerAdapterProxy(SpinnerAdapter obj) { this.obj = obj; try { this.getView = SpinnerAdapter.class.getMethod( "getView",int.class,View.class,ViewGroup.class); } catch( Exception e ) { throw new RuntimeException(e); } } public Object invoke(Object proxy, Method m, Object[] args) throws Throwable { try { return m.equals(getView) && (Integer)(args[0])<0 ? getView((Integer)args[0],(View)args[1],(ViewGroup)args[2]) : m.invoke(obj, args); } catch (InvocationTargetException e) { throw e.getTargetException(); } catch (Exception e) { throw new RuntimeException(e); } } protected View getView(int position, View convertView, ViewGroup parent) throws IllegalAccessException { if( position<0 ) { final TextView v = (TextView) ((LayoutInflater)getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE)).inflate( android.R.layout.simple_spinner_item,parent,false); v.setText(getPrompt()); return v; } return obj.getView(position,convertView,parent); } } }
당신이 할 수있는 것은
SpinnerAdapter
스피너가 아무것도 선택하지 않고 표시 할 수 있는 '옵션 선택 ...'보기를 나타내는 것으로 장식하는 것 입니다.다음은 Android 2.3 및 4.0에서 테스트 된 작동 예제입니다 (호환성 라이브러리에서는 아무것도 사용하지 않으므로 잠시 괜찮습니다). 데코레이터이기 때문에 기존 코드를 쉽게 수정할 수 있으며
CursorLoader
s에서도 잘 작동합니다 . (
cursorAdapter
물론 랩핑 된 커서를 바꾸십시오 ...)뷰를 재사용하기가 조금 더 어려워지는 Android 버그가 있습니다. (따라서 정확한지
setTag
확인하기 위해 또는 다른 것을 사용해야합니다
convertView
.)
코드 노트 : 2 개의 생성자이를 통해 표준 프롬프트를 사용하거나 자신이 선택한 '아무것도 없음'을 첫 번째 행으로 또는 둘 다로 정의하거나 모두 정의 할 수 없습니다. (참고 : 일부 테마는 대화 상자 대신 스피너의 드롭 다운을 표시합니다. 드롭 다운에는 일반적으로 프롬프트가 표시되지 않습니다)프롬프트처럼 보이도록 레이아웃을 정의합니다 (예 : 회색으로 표시됨).
표준 프롬프트 사용 (아무 것도 선택되지 않음에 유의) :
또는 프롬프트와 동적으로 (프롬프트가 없었을 수도 있음)
위의 예에서 사용법
Spinner spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setPrompt("Select your favorite Planet!"); spinner.setAdapter( new NothingSelectedSpinnerAdapter( adapter, R.layout.contact_spinner_row_nothing_selected, // R.layout.contact_spinner_nothing_selected_dropdown, // Optional this));
contact_spinner_row_nothing_selected.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerItemStyle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:textSize="18sp" android:textColor="#808080" android:text="[Select a Planet...]" />
NothingSelectedSpinnerAdapter.java
import android.content.Context; import android.database.DataSetObserver; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.SpinnerAdapter; /** * Decorator Adapter to allow a Spinner to show a 'Nothing Selected...' initially * displayed instead of the first choice in the Adapter. */ public class NothingSelectedSpinnerAdapter implements SpinnerAdapter, ListAdapter { protected static final int EXTRA = 1; protected SpinnerAdapter adapter; protected Context context; protected int nothingSelectedLayout; protected int nothingSelectedDropdownLayout; protected LayoutInflater layoutInflater; /** * Use this constructor to have NO 'Select One...' item, instead use * the standard prompt or nothing at all. * @param spinnerAdapter wrapped Adapter. * @param nothingSelectedLayout layout for nothing selected, perhaps * you want text grayed out like a prompt... * @param context */ public NothingSelectedSpinnerAdapter( SpinnerAdapter spinnerAdapter, int nothingSelectedLayout, Context context) { this(spinnerAdapter, nothingSelectedLayout, -1, context); } /** * Use this constructor to Define your 'Select One...' layout as the first * row in the returned choices. * If you do this, you probably don't want a prompt on your spinner or it'll * have two 'Select' rows. * @param spinnerAdapter wrapped Adapter. Should probably return false for isEnabled(0) * @param nothingSelectedLayout layout for nothing selected, perhaps you want * text grayed out like a prompt... * @param nothingSelectedDropdownLayout layout for your 'Select an Item...' in * the dropdown. * @param context */ public NothingSelectedSpinnerAdapter(SpinnerAdapter spinnerAdapter, int nothingSelectedLayout, int nothingSelectedDropdownLayout, Context context) { this.adapter = spinnerAdapter; this.context = context; this.nothingSelectedLayout = nothingSelectedLayout; this.nothingSelectedDropdownLayout = nothingSelectedDropdownLayout; layoutInflater = LayoutInflater.from(context); } @Override public final View getView(int position, View convertView, ViewGroup parent) { // This provides the View for the Selected Item in the Spinner, not // the dropdown (unless dropdownView is not set). if (position == 0) { return getNothingSelectedView(parent); } return adapter.getView(position - EXTRA, null, parent); // Could re-use // the convertView if possible. } /** * View to show in Spinner with Nothing Selected * Override this to do something dynamic... e.g. "37 Options Found" * @param parent * @return */ protected View getNothingSelectedView(ViewGroup parent) { return layoutInflater.inflate(nothingSelectedLayout, parent, false); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { // Android BUG! http://code.google.com/p/android/issues/detail?id=17128 - // Spinner does not support multiple view types if (position == 0) { return nothingSelectedDropdownLayout == -1 ? new View(context) : getNothingSelectedDropdownView(parent); } // Could re-use the convertView if possible, use setTag... return adapter.getDropDownView(position - EXTRA, null, parent); } /** * Override this to do something dynamic... For example, "Pick your favorite * of these 37". * @param parent * @return */ protected View getNothingSelectedDropdownView(ViewGroup parent) { return layoutInflater.inflate(nothingSelectedDropdownLayout, parent, false); } @Override public int getCount() { int count = adapter.getCount(); return count == 0 ? 0 : count + EXTRA; } @Override public Object getItem(int position) { return position == 0 ? null : adapter.getItem(position - EXTRA); } @Override public int getItemViewType(int position) { return 0; } @Override public int getViewTypeCount() { return 1; } @Override public long getItemId(int position) { return position >= EXTRA ? adapter.getItemId(position - EXTRA) : position - EXTRA; } @Override public boolean hasStableIds() { return adapter.hasStableIds(); } @Override public boolean isEmpty() { return adapter.isEmpty(); } @Override public void registerDataSetObserver(DataSetObserver observer) { adapter.registerDataSetObserver(observer); } @Override public void unregisterDataSetObserver(DataSetObserver observer) { adapter.unregisterDataSetObserver(observer); } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { return position != 0; // Don't allow the 'nothing selected' // item to be picked. } }
나는
Button
대신에 사용했다 . a
Button
가 아닌 동안
Spinner
동작을 쉽게 사용자 지정할 수 있습니다.먼저 평소와 같이 어댑터를 작성하십시오.
String[] items = new String[] {"One", "Two", "Three"}; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, items);
simple_spinner_dropdown_item
레이아웃 ID로를 사용하고 있습니다. 이렇게하면 경고 대화 상자를 만들 때 더 잘 보일 수 있습니다.내 버튼의 onClick 핸들러에는 다음이 있습니다.
public void onClick(View w) { new AlertDialog.Builder(this) .setTitle("the prompt") .setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO: user specific action dialog.dismiss(); } }).create().show(); }
그리고 그게 다야!
나는이 질문에 많은 답변이 있다는 것을 알고 있지만 가장 간단하고 쉬운 방법을 찾았습니다.
이 솔루션 은 API 레벨과 무관하며 모든 API 레벨에서 작동합니다
.아이디어는 스피너의 마지막 항목을 기본 항목으로 설정하는 것입니다.
spinner.setSelection(lastIndex);//index starts from 0.so if spinner has 5 item the lastIndex is 4
마지막 색인의 항목은 "국가 선택"과 같은 스피너 제목이어야합니다.그리고 스피너를 채우는 동안 항목 수를 하나씩 줄입니다. // 카운트는 1에서 총 항목으로 시작합니다.
@Override public int getCount() { // don't display last item. It is used as hint. int count = super.getCount(); return count > 0 ? count - 1 : count; }
따라서 코드 흐름은 다음과 같습니다
List<String> objects = new ArrayList<String>(); objects.add("India"); objects.add("Pakistan"); objects.add("China"); // add hint as last item objects.add("Select Country"); HintAdapter adapter = new HintAdapter(context, objects, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinner spinnerFilmType = (Spinner) findViewById(R.id.spinner); spinner.setAdapter(adapter); // show hint spinner.setSelection(adapter.getCount());
HintAdapter.java
public class HintAdapter extends ArrayAdapter<Objects> { public HintAdapter(Context theContext, List<Object> objects, int theLayoutResId) { super(theContext, theLayoutResId, objects); } @Override public int getCount() { // don't display last item. It is used as hint. int count = super.getCount(); return count > 0 ? count - 1 : count; } }
스피너 제목
스피너 아이템
먼저, 클래스 의
prompt
속성에 관심이있을 수 있습니다
Spinner
. 아래 그림을 참조하십시오. "행성 선택"은 XML에서로 설정할 수있는 프롬프트입니다
android:prompt=""
.
Spinner
내부적으로 두 개의 어댑터를 유지 관리 할 수있는 서브 클래 싱을 제안하려고했습니다 . "하나 선택"옵션이있는 하나의 어댑터와 다른
실제
어댑터 (실제 옵션 포함)를 사용한 다음
OnClickListener
선택 대화 상자가 표시되기 전에 를 사용 하여 어댑터를 전환하십시오. 그러나 그 아이디어를 구현 한 후에
OnClick
는 위젯 자체에 대한 이벤트를 수신 할 수 없다는 결론에 도달 했습니다.스피너를 다른보기로 감싸고보기를 클릭 한 다음 가로 채서
CustomSpinner
어댑터를 전환하도록 지시 할 수는 있지만 끔찍한 해킹처럼 보입니다."하나만 선택"을 표시해야합니까?
이 코드는 테스트되었으며 Android 4.4에서 작동합니다
Spinner spinner = (Spinner) activity.findViewById(R.id.spinner); ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity, android.R.layout.simple_spinner_dropdown_item) { @Override public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); if (position == getCount()) { ((TextView)v.findViewById(android.R.id.text1)).setText(""); ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed" } return v; } @Override public int getCount() { return super.getCount()-1; // you dont display last item. It is used as hint. } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); adapter.add("Daily"); adapter.add("Two Days"); adapter.add("Weekly"); adapter.add("Monthly"); adapter.add("Three Months"); adapter.add("HINT_TEXT_HERE"); //This is the text that will be displayed as hint. spinner.setAdapter(adapter); spinner.setSelection(adapter.getCount()); //set the hint the default selection so it appears on launch. spinner.setOnItemSelectedListener(this);
이 솔루션을 찾았습니다.
String[] items = new String[] {"Select One", "Two", "Three"}; Spinner spinner = (Spinner) findViewById(R.id.mySpinner); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) { items[0] = "One"; selectedItem = items[position]; } @Override public void onNothingSelected(AdapterView<?> arg0) { } });
"Select One"으로 배열 [0]을 변경 한 다음 onItemSelected에서 "One"으로 이름을 바꿉니다.고급 솔루션은 아니지만 작동합니다. : D
Spinner에 힌트를 설정하는 기본 API가 없습니다. 추가하려면 안전 반영 구현이 아닌 작은 해결 방법이 필요합니다.
List<Object> objects = new ArrayList<Object>(); objects.add(firstItem); objects.add(secondItem); // add hint as last item objects.add(hint); HintAdapter adapter = new HintAdapter(context, objects, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinner spinnerFilmType = (Spinner) findViewById(R.id.spinner); spinner.setAdapter(adapter); // show hint spinner.setSelection(adapter.getCount());
어댑터 소스 :
public class HintAdapter extends ArrayAdapter<Objects> { public HintAdapter(Context theContext, List<Object> objects) { super(theContext, android.R.id.text1, android.R.id.text1, objects); } public HintAdapter(Context theContext, List<Object> objects, int theLayoutResId) { super(theContext, theLayoutResId, android.R.id.text1, objects); } @Override public int getCount() { // don't display last item. It is used as hint. int count = super.getCount(); return count > 0 ? count - 1 : count; } }
여기에 많은 답변이 있지만 아무도 간단한 해결책을 제안하지 않은 것에 놀랐습니다. Spinner 위에 TextView를 배치하십시오. TextView에 Spinner를 표시하고 spinner.performClick ()을 호출하는 클릭 리스너를 TextView에 설정하십시오.
빈 선택으로 스피너에 대해 동일한 문제가 발생하여 더 나은 솔루션을 찾았습니다. 이 간단한 코드를 살펴보십시오.
Spinner lCreditOrDebit = (Spinner)lCardPayView.findViewById(R.id.CARD_TYPE); spinneradapter lAdapter = new spinneradapter( BillPayScreen.this, ndroid.R.layout.simple_spinner_item,getResources().getStringArray(R.array.creditordebit)); lAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); lCreditOrDebit.setAdapter(lAdapter);
여기서 spinneradapter는 arrayadapter를위한 작은 사용자 정의입니다. 다음과 같이 보입니다 :
import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; public class spinneradapter extends ArrayAdapter<String>{ private Context m_cContext; public spinneradapter(Context context,int textViewResourceId, String[] objects) { super(context, textViewResourceId, objects); this.m_cContext = context; } boolean firsttime = true; @Override public View getView(int position, View convertView, ViewGroup parent) { if(firsttime){ firsttime = false; //Just return some empty view return new ImageView(m_cContext); } //Let the array adapter take care of it this time. return super.getView(position, convertView, parent); } }
텍스트보기로 변경하고 이것을 사용할 수 있습니다 :
android:style="@android:style/Widget.DeviceDefault.Light.Spinner"
그런 다음
android:text
속성 을 정의하십시오 .
XML 파일 :
<Spinner android:id="@+id/locationSpinner" android:layout_width="fill_parent" android:layout_height="wrap_content" android:prompt="@string/select_location" />
활동:
private Spinner featuresSelection; private ArrayAdapter<CharSequence> featuresAdapter; private List<CharSequence> featuresList;
onCreate :
featuresList = new ArrayList<CharSequence>(); featuresAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, featuresList); featuresAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); featuresSelection = ((Spinner) yourActivity.this .findViewById(R.id.locationSpinner)); featuresSelection.setAdapter(featuresAdapter); featuresSelection.setOnItemSelectedListener( new MyOnItemSelectedListener());
일부 기능 (프로그래밍 방식으로 어댑터에 항목 추가)>
featuresAdapter.add("some string");
이제 빈 스피너가 있으며 비어있는 경우 대화 상자를 열지 않는 코드를 작성할 수 있습니다. 또는 그들은 다시 누를 수 있습니다. 그러나 런타임 중에 함수 나 다른 목록으로 채 웁니다.
나는 다음과 같이 시도했다. 버튼을 클릭하여 클릭 이벤트를 제공하십시오. 버튼 배경을 변경하면 스피너처럼 보입니다.전역 변수 alertdialog 및 기본값으로 선언하십시오.
AlertDialog d; static int default_value = 0; final Button btn = (Button) findViewById(R.id.button1); btn .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //c.show(); final CharSequence str[] = {"Android","Black Berry","Iphone"}; AlertDialog.Builder builder = new AlertDialog.Builder(TestGalleryActivity.this).setSingleChoiceItems( str, default_value,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int position) { Toast.makeText(TestGalleryActivity.this, "" + position, Toast.LENGTH_SHORT).show(); default_value = position; btn.setText(str[position]); if(d.isShowing()) d.dismiss(); } }).setTitle("Select Any"); d = builder.create(); d.show(); } });
이게 내 방법이야:
List<String> list = new ArrayList<String>(); list.add("string1"); list.add("string2"); list.add("string3"); list.add("[Select one]"); final int listsize = list.size() - 1; ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list) { @Override public int getCount() { return(listsize); // Truncate the list } }; dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mySpinner.setAdapter(dataAdapter); mySpinner.setSelection(listsize); // Hidden item to appear in the spinner
목록 상단에 요소를 추가하는 일반적인 솔루션은 iosched 앱을 살펴보십시오. 특히, 당신은에서 CursorAdapter, 모양 사용하는 경우
상단에 별도의 항목을 처리 할 수있는 목록 수를 관리 할 수있는 "setHasAllItem"방법과 관련된 코드를 제공하기 위해 그 정의를 확장합니다.사용자 정의 어댑터를 사용하여 텍스트를 "하나 선택"으로 설정하거나 최상위 항목에 대해 말할 수있는 다른 항목을 설정할 수 있습니다.
내 main.xml에 스피너가 있고 그 ID는
@+id/spinner1
이것은 내 OnCreate 함수에서 쓰는 것입니다.
spinner1 = (Spinner)this.findViewById(R.id.spinner1); final String[] groupes = new String[] {"A", "B", "C", "D", "E", "F", "G", "H"}; ArrayAdapter<CharSequence> featuresAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, new ArrayList<CharSequence>()); featuresAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(featuresAdapter); for (String s : groupes) featuresAdapter.add(s); spinner1.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) { // Here go your instructions when the user chose something Toast.makeText(getBaseContext(), groupes[position], 0).show(); } public void onNothingSelected(AdapterView<?> arg0) { } });
클래스에서 구현할 필요는 없습니다.
나는 이것에 대한 많은 좋은 해결책을 찾았습니다. 대부분은 어댑터 끝에 항목을 추가하여 작동하며 드롭 다운 목록에 마지막 항목을 표시하지 않습니다. 나에게 가장 큰 문제는 스피너 드롭 다운 목록이 목록 맨 아래에서 시작된다는 것입니다. 따라서 사용자는 처음 스피너를 터치 한 후 첫 번째 항목 (표시 할 항목이 많은 경우) 대신 마지막 항목을 볼 수 있습니다.그래서 힌트 항목을 목록의 시작 부분에 넣었습니다. 드롭 다운 목록에서 첫 번째 항목을 숨 깁니다.
private void loadSpinner(){ HintArrayAdapter hintAdapter = new HintArrayAdapter<String>(context, 0); hintAdapter.add("Hint to be displayed"); hintAdapter.add("Item 1"); hintAdapter.add("Item 2"); . . hintAdapter.add("Item 30"); spinner1.setAdapter(hintAdapter); //spinner1.setSelection(0); //display hint. Actually you can ignore it, because the default is already 0 //spinner1.setSelection(0, false); //use this if don't want to onItemClick called for the hint spinner1.setOnItemSelectedListener(yourListener); } private class HintArrayAdapter<T> extends ArrayAdapter<T> { Context mContext; public HintArrayAdapter(Context context, int resource) { super(context, resource); this.mContext = context } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(android.R.layout.simple_spinner_item, parent, false); TextView texview = (TextView) view.findViewById(android.R.id.text1); if(position == 0) { texview.setText(""); texview.setHint(getItem(position).toString()); //"Hint to be displayed" } else { texview.setText(getItem(position).toString()); } return view; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); View view; if(position == 0){ view = inflater.inflate(R.layout.spinner_hint_list_item_layout, parent, false); // Hide first row } else { view = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false); TextView texview = (TextView) view.findViewById(android.R.id.text1); texview.setText(getItem(position).toString()); } return view; } }
첫 번째 힌트 행을 숨기려면 위치가 0 일 때 @Override getDropDownView ()에서 아래 레이아웃을 설정하십시오.R.layout.spinner_hint_list_item_layout :
<?xml version="1.0" encoding="utf-8"?> <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="wrap_content" > </LinearLayout>
가장 쉬운 방법은 인덱스 0에 "select one"이라는 더미 항목을 만든 다음 저장하면 선택 항목이 0이 아닌지 확인하는 것입니다.
이것이 버튼 스피너에 대한 나의 마지막 예제 "올인"입니다에서
activity_my_form.xml
<Button android:id="@+id/btnSpinnerPlanets" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="left|center_vertical" android:singleLine="true" android:text="@string/selectAPlanet" android:textSize="10sp" android:background="@android:drawable/btn_dropdown"> </Button>
에서
strings.xml의
<string name="selectAPlanet">Select planet…</string> <string-array name="planets__entries"> <item>The Sun with a name very long so long long long long longThe Sun with a name very long so long long long long longThe Sun with a name very long so long long long long long</item> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> <item>Jupiter</item> <item>Saturn</item> <item>Uranus</item> <item>Neptune</item> </string-array>
에서
MyFormActivity.java
public class MyFormActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { ((Button) findViewById(R.id.btnSpinnerPlanets)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final String[] items = view.getResources().getStringArray(R.array.planets__entries); ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyFormActivity.this, android.R.layout.simple_spinner_dropdown_item, items); new AlertDialog.Builder(MyFormActivity.this).setTitle("the prompt").setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ((Button) findViewById(R.id.btnSpinnerPlanets)).setText(items[which]); dialog.dismiss(); } }).create().show(); } }); } }
마지막으로 글꼴 크기를 구성하여 첫 번째 항목을 선택할 수있는 버튼 스피너를 구성하지 못했습니다 !!!
HRJ 덕분에
또한 기본값을 표시하는 간단한 트릭이 있습니다.목록에 기본값을 추가 한 다음 다음을 사용하여 모든 컬렉션을 추가 할 수 있습니다
list.addAll(yourCollection);
실행 가능한 샘플 코드는 다음과 같습니다.
List<FuelName> fuelList = new ArrayList<FuelName>(); fuelList.add(new FuelName(0,"Select One")); fuelList.addAll(response.body()); ArrayAdapter adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, fuelList); //fuelName.setPrompt("Select Fuel"); fuelName.setAdapter(adapter);
그것이 당신의 복잡성을 회복하기를 바랍니다. 행복한 코딩!
확장 할 때
SpinnerAdapter
, 당신은이 무시
View
-producing 방법을,
getView(int, View, ViewGroup)
하고
getDropDownView(int, View, ViewGroup)
. 첫 번째는
View
삽입물을
Spinner
자체에 공급합니다 . 두 번째
View
는 이름에서 알 수 있듯이 드롭 다운 목록에를 제공합니다.
getView(...)
항목을 선택할 때까지
TextView
프롬프트 가 포함 된 메시지를 표시하도록 재정의 할 수 있습니다 . 그런 다음 항목이 선택되었음을 감지하면 해당 항목을 표시하도록 변경합니다
TextView
.
public class PromptingAdapter extends SpinnerAdapter { //... various code ... private boolean selectionmade = false; //call this method from the OnItemSelectedListener for your Spinner public setSelectionState(boolean b) { selectionmade = b; } @Override public View getView(int position, View recycle, ViewGroup container) { if(selectionmade) { //your existing code to supply a View for the Spinner //you could even put "return getDropDownView(position, recycle, container);" } else { View output; if(recycle instanceof TextView) { output = recycle; } else { output = new TextView(); //and layout stuff } output.setText(R.string.please_select_one); //put a string "please_select_one" in res/values/strings.xml return output; } } //... }
Xamarin을 사용하는 사람들에게는 위의 aaronvargas의 답변과 동등한 C #이 있습니다.
using Android.Content; using Android.Database; using Android.Views; using Android.Widget; using Java.Lang; namespace MyNamespace.Droid { public class NothingSelectedSpinnerAdapter : BaseAdapter, ISpinnerAdapter, IListAdapter { protected static readonly int EXTRA = 1; protected ISpinnerAdapter adapter; protected Context context; protected int nothingSelectedLayout; protected int nothingSelectedDropdownLayout; protected LayoutInflater layoutInflater; public NothingSelectedSpinnerAdapter(ISpinnerAdapter spinnerAdapter, int nothingSelectedLayout, Context context) : this(spinnerAdapter, nothingSelectedLayout, -1, context) { } public NothingSelectedSpinnerAdapter(ISpinnerAdapter spinnerAdapter, int nothingSelectedLayout, int nothingSelectedDropdownLayout, Context context) { this.adapter = spinnerAdapter; this.context = context; this.nothingSelectedLayout = nothingSelectedLayout; this.nothingSelectedDropdownLayout = nothingSelectedDropdownLayout; layoutInflater = LayoutInflater.From(context); } protected View GetNothingSelectedView(ViewGroup parent) { return layoutInflater.Inflate(nothingSelectedLayout, parent, false); } protected View GetNothingSelectedDropdownView(ViewGroup parent) { return layoutInflater.Inflate(nothingSelectedDropdownLayout, parent, false); } public override Object GetItem(int position) { return position == 0 ? null : adapter.GetItem(position - EXTRA); } public override long GetItemId(int position) { return position >= EXTRA ? adapter.GetItemId(position - EXTRA) : position - EXTRA; } public override View GetView(int position, View convertView, ViewGroup parent) { // This provides the View for the Selected Item in the Spinner, not // the dropdown (unless dropdownView is not set). if (position == 0) { return GetNothingSelectedView(parent); } // Could re-use the convertView if possible. return this.adapter.GetView(position - EXTRA, null, parent); } public override int Count { get { int count = this.adapter.Count; return count == 0 ? 0 : count + EXTRA; } } public override View GetDropDownView(int position, View convertView, ViewGroup parent) { // Android BUG! http://code.google.com/p/android/issues/detail?id=17128 - // Spinner does not support multiple view types if (position == 0) { return nothingSelectedDropdownLayout == -1 ? new View(context) : GetNothingSelectedDropdownView(parent); } // Could re-use the convertView if possible, use setTag... return adapter.GetDropDownView(position - EXTRA, null, parent); } public override int GetItemViewType(int position) { return 0; } public override int ViewTypeCount => 1; public override bool HasStableIds => this.adapter.HasStableIds; public override bool IsEmpty => this.adapter.IsEmpty; public override void RegisterDataSetObserver(DataSetObserver observer) { adapter.RegisterDataSetObserver(observer); } public override void UnregisterDataSetObserver(DataSetObserver observer) { adapter.UnregisterDataSetObserver(observer); } public override bool AreAllItemsEnabled() { return false; } public override bool IsEnabled(int position) { return position > 0; } } }
또한 다음 코드를 사용하여이 문제를 해결했습니다. 예를 들어 품목 목록이 있다고 가정하십시오.
ArrayList<Item> itemsArrayList = new ArrayList<Item>(); Item item1 = new Item(); item1.setId(1); item1.setData("First Element"); Item item2 = new Item(); item2.setId(2); Item2.setData("Second Element"); itemsArrayList.add(item1); itemsArrayList.add(item2);
이제 스피너가 객체를 이해할 수 없기 때문에 스피너에 문자열을 제공해야합니다. 그래서 우리는 다음과 같은 문자열 항목으로 새로운 배열 목록을 만들 것입니다->
ArrayList<String> itemStringArrayList = new ArrayList<String>(); for(Item item : itemsArrayList) { itemStringArrayList.add(item.getData()); }
이제
itemStringArrayList
두 개의 문자열 항목 이있는 배열 목록이 있습니다. 그리고 "항목 선택"텍스트를 첫 번째 항목으로 표시해야합니다. 따라서에 새 문자열을 삽입해야합니다
itemStringArrayList
.
itemStringArrayList.add("Select Item");
이제 배열 목록이
itemsArrayList
있고 드롭 다운에 두 개의 요소를 표시하려고합니다. 그러나 여기서 조건은 ... 우리가 아무것도 선택하지 않으면
Select Item
활성화되지 않는 첫 번째 요소로 표시되어야합니다.따라서이 기능을 이와 같이 구현할 수 있습니다. 배열 목록 항목을 Android 스피너에로드해야하는 경우 따라서 일부 어댑터를 사용해야합니다. 여기에을 사용하겠습니다
ArrayAdapter
. 사용자 정의 어댑터도 사용할 수 있습니다.
ArrayAdapter<String> itemsArrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.spinner_item, itemsArrayList){ @Override public boolean isEnabled(int position) { if(position == 0) { return false; } else { return true; } } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View view = super.getDropDownView(position, convertView, parent); TextView tv = (TextView) view; if(position == 0){ // Set the hint text color gray tv.setTextColor(Color.GRAY); } else { tv.setTextColor(Color.BLACK); } return view; } }; itemsArrayAdapter.setDropDownViewResource(R.layout.spinner_item); your_spinner_name.setAdapter(itemsArrayAdapter);
이 코드는 여기에 있습니다. 우리는 맞춤형 스피너 레이아웃을 사용하고 있습니다
R.layout.spinner_item
. 간단한 텍스트보기입니다
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:textStyle="italic" android:fontFamily="sans-serif-medium" />
스피너의 첫 번째 텍스트를 비활성화해야합니다. 따라서 위치 0의 경우 텍스트를 비활성화합니다. 또한 색상은 getDropDownView 메소드를 재정 의하여 설정할 수 있습니다. 이런 식으로 우리는 예상 스피너를 얻을 것입니다.
세 가지 중에서 선택해야하는 경우 RadioButtons와 함께 RadioGroup을 사용하면 처음에 모두 선택 해제 할 수 있습니다.
이전에 제출 한 답변 중 어느 것도 실제로이 문제를 해결하려는 방식으로 작동하지 않았습니다. 나에게 이상적인 해결책은 스피너가 처음 표시 될 때“하나 선택”(또는 초기 텍스트)을 제공하는 것입니다. 사용자가 스피너를 누를 때 초기 텍스트는 표시되는 드롭 다운의 일부가되어서는 안됩니다.내 특정 상황을 더 복잡하게하기 위해 내 Spinner 데이터가 LoaderManager 콜백을 통해로드되는 커서에서오고 있습니다.상당한 실험 끝에 다음 해결책을 찾았습니다.
public class MyFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>{ private static final String SPINNER_INIT_VALUE = "Select A Widget"; private Spinner mSpinner; private int mSpinnerPosition; private boolean mSpinnerDropDownShowing = false; private View mSpinnerDropDown; private MyCursorAdapter mCursorAdapter; ... @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ ... mCursorAdapter = new MyCursorAdapter(getActivity()); mSpinner = (Spinner) rootView.findViewById(R.id.theSpinner); mSpinner.setOnTouchListener(mSpinnerTouchListener); mSpinner.setAdapter(mCursorAdapter); ... } //Capture the touch events to toggle the spinner's dropdown visibility private OnTouchListener mSpinnerTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if(mSpinnerDropDown != null && mSpinnerDropDownShowing == false){ mSpinnerDropDownShowing = true; mSpinnerDropDown.setVisibility(View.VISIBLE); } return false; } }; //Capture the click event on the spinner drop down items protected OnClickListener spinnerItemClick = new OnClickListener(){ @Override public void onClick(View view) { String widget = ((TextView) view.findViewById(android.R.id.text1)).getText().toString(); if(!widget.equals(SPINNER_INIT_VALUE)){ if(mCursorAdapter != null){ Cursor cursor = mCursorAdapter.getCursor(); if(cursor.moveToFirst()){ while(!cursor.isAfterLast()){ if(widget.equals(cursor.getString(WidgetQuery.WIDGET_NAME))){ ... //Set the spinner to the correct item mSpinnerPosition = cursor.getPosition() + 1; mSpinner.setSelection(mSpinnerPosition); break; } cursor.moveToNext(); } } } } //Hide the drop down. Not the most elegent solution but it is the only way I could hide/dismiss the drop down mSpinnerDropDown = view.getRootView(); mSpinnerDropDownShowing = false; mSpinnerDropDown.setVisibility(View.GONE); } }; private class MyCursorAdapter extends CursorAdapter { private final int DISPLACEMENT = 1; private final int DEFAULT_ITEM_ID = Integer.MAX_VALUE; private Activity mActivity; public MyCursorAdapter(Activity activity) { super(activity, null, false); mActivity = activity; } //When loading the regular views, inject the defualt item @Override public View getView(int position, View convertView, ViewGroup parent) { if(position == 0){ if(convertView == null){ convertView = mActivity.getLayoutInflater().inflate(R.layout.list_item_widget, parent, false); } return getDefaultItem(convertView); } return super.getView(position - DISPLACEMENT, convertView, parent); } //When loading the drop down views, set the onClickListener for each view @Override public View getDropDownView(int position, View convertView, ViewGroup parent){ View view = super.getDropDownView(position, convertView, parent); view.setOnClickListener(spinnerItemClick); return view; } //The special default item that is being injected private View getDefaultItem(View convertView){ TextView text = (TextView) convertView.findViewById(android.R.id.text1); text.setText(SPINNER_INIT_VALUE); return convertView; } @Override public long getItemId(int position) { if (position == 0) { return DEFAULT_ITEM_ID; } return super.getItemId(position - DISPLACEMENT); } @Override public boolean isEnabled(int position) { return position == 0 ? true : super.isEnabled(position - DISPLACEMENT); } @Override public int getViewTypeCount() { return super.getViewTypeCount() + DISPLACEMENT; } @Override public int getItemViewType(int position) { if (position == 0) { return super.getViewTypeCount(); } return super.getItemViewType(position - DISPLACEMENT); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return mActivity.getLayoutInflater().inflate(R.layout.list_item_widget, parent, false); } @Override public void bindView(View view, Context context, Cursor cursor){ if(cursor.isAfterLast()){ return; } TextView text = (TextView) view.findViewById(android.R.id.text1); String WidgetName = cursor.getString(WidgetQuery.WIDGET_NAME); text.setText(WidgetName); } } }
Spinner 대신 버튼을 사용하여이를 처리합니다.
프로젝트에서 스피너와 버튼을 모두 표시하여 실제로 동일하게 보이도록 표시합니다. 버튼을 제외하고 원하는대로 초기 텍스트를 설정할 수 있습니다.활동은 다음과 같습니다.
package com.stevebergamini.spinnerbutton; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Spinner; public class MainActivity extends Activity { Spinner spinner1; Button button1; AlertDialog ad; String[] countries; int selected = -1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner1 = (Spinner) findViewById(R.id.spinner1); button1 = (Button) findViewById(R.id.button1); countries = getResources().getStringArray(R.array.country_names); // You can also use an adapter for the allert dialog if you'd like // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, countries); ad = new AlertDialog.Builder(MainActivity.this).setSingleChoiceItems(countries, selected, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { button1.setText(countries[which]); selected = which; ad.dismiss(); }}).setTitle(R.string.select_country).create(); button1.setOnClickListener( new OnClickListener(){ @Override public void onClick(View v) { ad.getListView().setSelection(selected); ad.show(); }}); } }
참고 :
예, 적용된 테마에 따라 다르며 Theme.Holo를 사용하면 모양이 약간 다를 수 있습니다. 그러나 Theme.Black과 같은 레거시 테마 중 하나를 사용하는 경우 좋습니다.
이 문제에 직면하는 경우
항목은 데이터베이스 커서에서 채워집니다이 때
,
SO 답변 에서 찾은 가장 간단한 솔루션 :
커서 어댑터 쿼리에서 UNION을 사용
하고 실제로 DB에 추가하지 않고 id = -1 인 추가 항목을 쿼리 결과에 추가하십시오.같은 :
db.rawQuery ( "_ id로 iWorkerId를 선택하고, 작업자에서 이름으로 nvLastName을 선택하십시오. w UNION SELECT -1을 _id로, ''를 이름으로", null);
선택한 항목이 -1이면 기본값입니다. 그렇지 않으면 테이블의 레코드입니다.
단순한 해결책 인 것 같지만 보통 스피너 앞에 TextView를 넣습니다. 전체 Xml은 다음과 같습니다. (이봐들, 날 쏘지 마라. 나는 너희 중 누군가가 이런 종류의 결혼을 좋아하지 않는다는 것을 안다) :
<FrameLayout android:id="@+id/selectTypesLinear" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <Spinner android:id="@+id/spinnerExercises" android:layout_width="match_parent" android:layout_height="match_parent" android:entries="@array/exercise_spinner_entries" android:prompt="@string/exercise_spinner_prompt" /> <TextView android:id="@+id/spinnerSelectText" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Hey! Select this guy!" android:gravity="center" android:background="#FF000000" /> </FrameLayout>
그런 다음 항목을 선택할 때 TextView를 숨 깁니다. 분명히 TextView의 배경색은 Spinner와 같아야합니다. 안드로이드 4.0에서 작동합니다. 이전 버전에서는 모릅니다.예. Spinner는 처음에 setOnItemSelectedListener를 호출하기 때문에 textview를 숨기는 것이 약간 까다로울 수 있지만 다음과 같이 할 수 있습니다.
Boolean controlTouched; exerciseSpinner.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { controlTouched = true; // I touched it but but not yet selected an Item. return false; } }); exerciseSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if (controlTouched) { // Are you sure that I touched it with my fingers and not someone else ? spinnerSelText.setVisibility(View.GONE); } } @Override public void onNothingSelected(AdapterView<?> arg0) { } });
나를 위해 그것은 이런 식으로 일했습니다. 일부 옵션의 텍스트 만 변경하는 기능이 향상되었습니다.먼저 스피너의 이름을 사용하여 사용자 정의보기로 arrayadapter를 만들지 만 지금은 중요하지 않습니다. 키가 getView를 재정의하고 내부 변경 해야하는 값을 변경하십시오. 내 경우에는 첫 번째 사건이었고 나머지는 원본을 남겼습니다.
public void rellenarSpinnerCompeticiones(){ spinnerArrayCompeticiones = new ArrayList<String>(); for(Competicion c: ((Controlador)getApplication()).getCompeticiones()){ spinnerArrayCompeticiones.add(c.getNombre()); } //ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,R.layout.spinner_item_competicion,spinnerArrayCompeticiones); ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, R.layout.spinner_item_competicion, spinnerArrayCompeticiones){ @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View v = vi.inflate(R.layout.spinner_item_competicion, null); final TextView t = (TextView)v.findViewById(R.id.tvCompeticion); if(spinnerCompeticion.getSelectedItemPosition()>0){ t.setText(spinnerArrayCompeticiones.get(spinnerCompeticion.getSelectedItemPosition())); }else{ t.setText("Competiciones"); } return v; } }; spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerCompeticion.setAdapter(spinnerArrayAdapter); }
여기 간단한 것이 있습니다
private boolean isFirst = true; private void setAdapter() { final ArrayList<String> spinnerArray = new ArrayList<String>(); spinnerArray.add("Select your option"); spinnerArray.add("Option 1"); spinnerArray.add("Option 2"); spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { TextView tv = (TextView)selectedItemView; String res = tv.getText().toString().trim(); if (res.equals("Option 1")) { //do Something } else if (res.equals("Option 2")) { //do Something else } } @Override public void onNothingSelected(AdapterView<?> parentView) { } }); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.my_spinner_style,spinnerArray) { public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 25, getResources().getDisplayMetrics()); ((TextView) v).setTypeface(tf2); ((TextView) v).getLayoutParams().height = height; ((TextView) v).setGravity(Gravity.CENTER); ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_SP, 19); ((TextView) v).setTextColor(Color.WHITE); return v; } public View getDropDownView(int position, View convertView, ViewGroup parent) { if (isFirst) { isFirst = false; spinnerArray.remove(0); } View v = super.getDropDownView(position, convertView, parent); ((TextView) v).setTextColor(Color.argb(255, 70, 70, 70)); ((TextView) v).setTypeface(tf2); ((TextView) v).setGravity(Gravity.CENTER); return v; } }; spin.setAdapter(adapter); }
참고 URL :
도움이 되겠다면 ↓↓↓ 배너 한번만 클릭 해주시면 감사합니다 ^^
'programing' 카테고리의 다른 글
브라우저 창이 현재 활성화되어 있지 않은지를 감지하는 방법이 있습니까? (0) | 2020.02.09 |
---|---|
명령 줄에서 추가 변수를 전달하여 작성 (0) | 2020.02.09 |
jQuery.fn은 무슨 뜻인가요? (0) | 2020.02.09 |
Google Maps API로 마우스 스크롤 휠 스케일링을 비활성화하는 방법 (0) | 2020.02.09 |
Visual Studio Code의 세로 눈금자? (0) | 2020.02.09 |