android:Spinner组件代码
前言:实现的功能为界面显示两个spinner组件,点击下拉框内的选项之后,弹出toast提示选中了哪个选项。界面如下:
1、先在xml文件中定义spinner组件。因为用到了两种实现方式,所以定义两个spinner。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:paddingTop="20dp"> <TextView android:id="@+id/tView_1" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="spinner1" /> <Spinner android:id="@+id/spinner_1" android:layout_width="wrap_content" android:layout_height="match_parent" android:entries="@array/spinner1_array" /> </LinearLayout> <LinearLayout android:id="@+id/linearLayout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/linearLayout1" android:paddingTop="30dp"> <TextView android:id="@+id/tView_2" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="spinner2" /> <Spinner android:id="@+id/spinner_2" android:layout_width="wrap_content" android:layout_height="match_parent" android:dropDownWidth="100dp" android:popupBackground="@drawable/background" android:dropDownSelector="@color/colorPrimary" /> </LinearLayout> </RelativeLayout>
2、接着我们还得在string.xml中设置一下需要显示的数据,spinner1的数据直接显示,spinner2的数据通过Adapter传递显示。
还可以通过代码赋值,然后用Adapter传递显示,但是我有点懒,就没有写这种。
<resources> <string name="app_name">Spinner_activity</string> <string-array name="spinner1_array"> <item>Toast1</item> <item>Toast2</item> <item>Toast3</item> <item>Toast4</item> <item>Toast5</item> <item>Toast6</item> </string-array> <string-array name="spinner2_array"> <item>Toast1</item> <item>Toast2</item> <item>Toast3</item> <item>Toast4</item> <item>Toast5</item> <item>Toast6</item> </string-array> </resources>
3、然后是在MainActivity中进行spinner的绑定、监听、点击事件的设置。
package com.example.yonghu.spinner_activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; import static android.widget.Toast.*; public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //method 1: //绑定组件,然后监听,以及new一个监听的响应事件 Spinner spinner1 = (Spinner) findViewById(R.id.spinner_1); spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(MainActivity.this, adapterView.getItemAtPosition(i).toString()+" select by spinner1", LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); //method 2: //定义叫adapter的ArrayAdapter适配器(spinner视图与array-string的加工厂) // 给adapter传递数据,参数可以理解为(MainActivity.this , 数据原料来源, 数据加工方式:数组中的一个元素就是一个spinner选项) //将adapter的数据传递出去给spinner视图(加工完了,卖给spinner视图) //定义名字叫spinnner2的Spinner,顺便绑定到视图(spinner2找到了名字) //将adapter绑定到spinner2(spinner2找到了数据) //监听,以及new一个监听的响应事件 ArrayAdapter<CharSequence> adapter; adapter=ArrayAdapter.createFromResource(this, R.array.spinner2_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinner spinner2 = (Spinner) findViewById(R.id.spinner_2); spinner2.setAdapter(adapter); spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int positon, long id) { Toast.makeText(MainActivity.this, parent.getItemAtPosition(positon).toString()+"select by spinner2", LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); } }
最后本文的android studio版本为3.1.2、gradle运行版本为4.6、gradle插件版本为3.2.0。如果环境不匹配可能会有很多令人诧异的报错。
下面附上github: https://github.com/caesura-k/spinner_activity.git