spinner的使用

layout.xml:

 <Spinner
            android:layout_width="30dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="150dp"
            android:layout_gravity="center_vertical"
            android:id="@+id/spinner"
            android:entries="@array/timeChoose"
            android:gravity="center"
            android:textSize="20sp"
            android:theme="@style/SpnStyle"
            android:layout_weight="0.08"
            />

静态设置下拉列表中值的方法:在value/arrays.xml中加入想要显示的值

<resources>
    <string-array name="timeChoose">                  这里的name一定要定义,后面会用到
            <item>当天</item>
            <item>最近一周</item>
             <item>最近一月</item>
     </string-array>
</resources>

创建MainActivity

public class MainActivity extends BaseActivity{
    private Spinner spinner;
    private ArrayAdapter dateAdapter;//
    
    public void onCreate(Bundle saveInstaceState){
        super.onCreate(saveInstaceState);
        setContentView(R.layout.testSpinner.xml);
        spinner = (Spinner)findViewById(R.id.spinner);
        /**
        *    createFromResource()中的三个参数:
        *    this:当前上下文
        *    R.array.timeChoose:之前定义的arrays.xml中的string-array,目的是将静态列表内容填充到spinner下拉列表中
        *            simple_spinner_item:下拉列表的一种表现形式
        *    还有一个simple_spinner_dropdown_item
        *    详细了解https://blog.csdn.net/buaaroid/article/details/49332845
        *    文章给出了这两种风格的源码,知识点两个:
        *    TextView中属性:android:ellipsize/android:textAlignmentStyle
        *    详细了解https://blog.csdn.net/qq_26296197/article/details/48209305
        *            https://blog.csdn.net/yihonglvyu1/article/details/53321417
        *    结论:我们可以自定义我们想要的风格
        */
        //填充值
        dateAdapter = ArrayAdapter.createFromResource(this,R.array.timeChoose,android.R.layout.simple_spinner_item);
        dateAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(dateAdapter);
        //设置点击事件
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()){
            
            public void onItemSelected(AdapterView<?>parent,View view,int posiition,long id){
            try{
                //设置重复点击列表中的内容,每次都会有响应
                Field field = AdapterView.class.getDeclaredField("mOldselectedPosition");
                field.setAccessible(true);
                field.setInt(spinner,AdapterView.INVALID_POSITION);
            }catch(Exception e){
                e.printStackTrace();
            }
            ........
            }
            public void onNothingSelected(AdapterView<?>parent){
                //该方法当R.array.timeChoose中为空的时候(也就是下拉列表中没有填充数据时),会响应
                //https://blog.csdn.net/u012702547/article/details/50598673
                
            }
        }
        
    }
}
原文地址:https://www.cnblogs.com/yfafa/p/8880915.html