7

Spinner У меня так:андроида вертушка выпадающий флажок

<Spinner 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/spinner1" 
       android:background="@drawable/spinner_bg" 
       android:popupBackground="@drawable/spinner_bg"/> 

это spinner_bg.xml:

<item> 
    <layer-list> 
     <item> 
      <shape> 
       <gradient 
        android:startColor="#ffffff" 
        android:centerColor="#111111" 
        android:endColor="#000000" 
        android:angle="-90" /> 

       <stroke 
        android:width="2dp" 
        android:color="#ffffff" /> 

       <corners 
        android:radius="2dp" /> 

       <padding 
        android:left="10dp" 
        android:right="10dp"/> 
      </shape> 
     </item> 
     <item > 
      <bitmap 
       android:gravity="right" 
       android:src="@android:drawable/arrow_down_float" /> 
     </item> 
    </layer-list> 
</item> 

это мой код пользовательского блесны :

ArrayAdapter<ClassId> adapter = new ArrayAdapter<ClassId>(getActivity(), 
         R.layout.list_id, idList); 
       adapter.setDropDownViewResource(R.layout.list_id_select); 

это расположение list_id.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textAllCaps="true" 
android:singleLine="true" 
android:ellipsize="end" 
android:textColor="#ff0004" 
android:textSize="14sp" 
android:paddingTop="10dp" 
android:paddingBottom="10dp"/> 

это расположение list_id_select.xml:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textAllCaps="true" 
android:singleLine="true" 
android:ellipsize="end" 
android:textColor="#0004ff" 
android:textSize="14sp" 
android:checked="true" 
android:checkMark="@drawable/custom_checkbox" 
android:paddingTop="10dp" 
android:paddingBottom="10dp"/> 

и это custom_checkbox.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_checked="true" 
    android:drawable="@android:drawable/checkbox_on_background" /> 

<item android:state_pressed="true" 
    android:drawable="@android:drawable/checkbox_on_background" /> 

<item android:drawable="@android:drawable/checkbox_off_background" /> 

это мой результат, когда выпадающий вращателя шоу: _________________________________________________
__________________________checkbox_______________
____text_________________________________________

это означает текст и флажок не в строке (флажок выше, чем текст).
как исправить?

ответ

14

Для этого вам необходимо создать Custom Adapter и установить TextView и CheckBox внутри этого ниже.

Spinner Определить в XML

<Spinner 
     android:id="@+id/spinner" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="10dp" /> 

Создать spinner_item.xml файл в папке layout.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="20dp" 
     android:text="text" 
     android:textAlignment="gravity" /> 

    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" /> 
</RelativeLayout> 

Теперь создадим StateVO.java класс, который может содержать значение TextView и CheckBox.

public class StateVO { 
    private String title; 
    private boolean selected; 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public boolean isSelected() { 
     return selected; 
    } 

    public void setSelected(boolean selected) { 
     this.selected = selected; 
    } 
} 

Теперь в вашем Activity inititlize в Spinner и установить CustomAdapter ниже образом.

final String[] select_qualification = { 
       "Select Qualification", "10th/Below", "12th", "Diploma", "UG", 
       "PG", "Phd"}; 
     Spinner spinner = (Spinner) findViewById(R.id.spinner); 

     ArrayList<StateVO> listVOs = new ArrayList<>(); 

     for (int i = 0; i < select_qualification.length; i++) { 
      StateVO stateVO = new StateVO(); 
      stateVO.setTitle(select_qualification[i]); 
      stateVO.setSelected(false); 
      listVOs.add(stateVO); 
     } 
     MyAdapter myAdapter = new MyAdapter(Main2Activity.this, 0, 
       listVOs); 
     spinner.setAdapter(myAdapter); 

И, наконец, создать CustomAdapter класс, как внизу.

MyAdapter.Java

public class MyAdapter extends ArrayAdapter<StateVO> { 
    private Context mContext; 
    private ArrayList<StateVO> listState; 
    private MyAdapter myAdapter; 
    private boolean isFromView = false; 

    public MyAdapter(Context context, int resource, List<StateVO> objects) { 
     super(context, resource, objects); 
     this.mContext = context; 
     this.listState = (ArrayList<StateVO>) objects; 
     this.myAdapter = this; 
    } 

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

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

    public View getCustomView(final int position, View convertView, 
           ViewGroup parent) { 

     final ViewHolder holder; 
     if (convertView == null) { 
      LayoutInflater layoutInflator = LayoutInflater.from(mContext); 
      convertView = layoutInflator.inflate(R.layout.spinner_item, null); 
      holder = new ViewHolder(); 
      holder.mTextView = (TextView) convertView 
        .findViewById(R.id.text); 
      holder.mCheckBox = (CheckBox) convertView 
        .findViewById(R.id.checkbox); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.mTextView.setText(listState.get(position).getTitle()); 

     // To check weather checked event fire from getview() or user input 
     isFromView = true; 
     holder.mCheckBox.setChecked(listState.get(position).isSelected()); 
     isFromView = false; 

     if ((position == 0)) { 
      holder.mCheckBox.setVisibility(View.INVISIBLE); 
     } else { 
      holder.mCheckBox.setVisibility(View.VISIBLE); 
     } 
     holder.mCheckBox.setTag(position); 
     holder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       int getPosition = (Integer) buttonView.getTag(); 


      } 
     }); 
     return convertView; 
    } 

    private class ViewHolder { 
     private TextView mTextView; 
     private CheckBox mCheckBox; 
    } 
} 

Выход:

enter image description here

+0

спасибо большое – 1234abcd

+0

@ 1234abcd рад помочь вам. – Ironman

+0

@ 1234abcd 'Accept Answer' и' upvote' будет 'favour'. – Ironman