下拉列表框也是一种常见的图形组件,它可以为用户提供列表的选择方式,和上两篇说的radiogroup和checkbox相比更加节省界面空间,在Android中可以使用<Spinner>标签来使用此组件,此类定义如下

android studio spinner 用法 array_跑马灯实现

在前面使用组件的时候都是直接用<组件名>这样格式的标签就可以定义出一个可以使用的组件,但是Spinner不一样,定义了之后需要绑定显示数据才可以,下面同样写个例子来看看。

运行效果:

android studio spinner 用法 array_spinner_02

main.xml:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    
	<Spinner
	    android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />

</LinearLayout>



绑定数据部分可以用纯xml实现,也可以在代码中实现,这里是第一次用,我就两种方式都用下,第一种是纯xml实现方式,首先在res->values文件夹下面新建名为spinner_value.xml的文件,代码如下:


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="spinner">
        <item>苹果</item>
        <item>西瓜</item>
        <item>雪梨</item>
    </string-array>
</resources>



main.xml修改后为:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    
	<Spinner
	    android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/spinner"
         />

</LinearLayout>



可以看见其实就是在xml中加入android:entries="@array/spinner"这句代码,运行效果和上面一样,这里就不贴了,下面开始介绍第二种方法,代码实现,main.xml代码就是没加android:entries="@array/spinner"这句的那个xml,首先打开src文件夹下面的包里面的MainActivity.java文件,然后添加如下代码:

package com.example.sinnerdemo;


import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.Spinner;


public class MainActivity extends Activity {
	ArrayAdapter<String> adapter=null;
	Spinner spinner = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();//初始化操作最好单独写个方法,养成良好的代码习惯
	}


	private void init(){
		//初始化要加到spinner里面的数据,即new的那个String数组,第一个参数含义为上下文,第二个为采用的模板(即spinner显示样式,后面自定义spinner时就是修改此layout文件)
		adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, new String[]{"苹果","西瓜","雪梨"});
		spinner = (Spinner)super.findViewById(R.id.spinner);
		//设置弹出框item样式,后面自定义时也是修改此layout
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		//将数据设置进spinner
		spinner.setAdapter(adapter);
	}


}




运行之后效果和第一种方法一样。


又到了今天的自定义组件的时候了,今天的自定义可能比前几次要麻烦些,建立的文件要多些,废话少说,直接开始,和以前自定义时一样的步骤就是准备两张图片

android studio spinner 用法 array_自定义控件_03

drop_middle_down.png和

android studio spinner 用法 array_Android_04

drop_middle_normal.png

然后新建一个selector文件,这个相信都很熟悉了,加入下面的代码

spinner_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_focused="true"
        android:drawable="@drawable/drop_middle_down"></item>
    <item android:state_pressed="true"
        android:drawable="@drawable/drop_middle_down"></item>
    <item android:drawable="@drawable/drop_middle_normal"></item>

</selector>

再将背景选择器放到spinner的背景中,修改后的main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    
	<Spinner
	    android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/spinner"
        android:background="@drawable/spinner_selector"
         />

</LinearLayout>





然后在layout文件夹下面新建item.xml和item2.xml两个xml文件

item.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    android:gravity="center"
    android:textStyle="bold"
    android:textColor="#FFFFFF"
    android:textSize="30sp"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee" />



item2.xml:

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinner_drop_item_text"
    style="?android:attr/spinnerDropDownItemStyle"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:checkMark="@drawable/radio_selector"
    android:singleLine="true"
    android:textSize="20sp"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:textColor="#6fa9ff" />



解释下上面的item.xml和item2.xml中没看过的属性,首先是item.xml中的android:singleLine="true"这是设置是否为单行显示,android:ellipsize="marquee"是文字显示不下时,设置文字跑马灯显示,所以我们常看见的跑马灯效果就是设置了几个textview的属性实现的,既然说到了,这里就说下设置什么属性可以实现跑马灯,下面给出循环滚动的示例,只要加到textview中就能实现(注意字符长度要超出textview所能显示的长度才能实现滚动)。

android:ellipsize="marquee"
        android:focusable= "true"
        android:focusableInTouchMode="true"
        android:gravity= "center"
        android:marqueeRepeatLimit="marquee_forever"




好,上面说完了item.xml再来说下item2.xml中的一个重要属性android:checkMark这个就是单选的图标,我这里是把前天radiobutton的选择器和资源文件拿过来用了,所以是android:checkMark="@drawable/radio_selector"。


弄完了上面两个xml文件,就开始写代码了,直接贴出代码文件

MainActivity.java:


package com.example.sinnerdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class MainActivity extends Activity {
	ArrayAdapter<String> adapter=null;
	Spinner spinner = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();//初始化操作最好单独写个方法,养成良好的代码习惯
	}

	private void init(){
		//将第二个layout替换掉,换成item.xml
		adapter = new ArrayAdapter<String>(this, R.layout.item, new String[]{"苹果","西瓜","雪梨"});
		spinner = (Spinner)super.findViewById(R.id.spinner);
		//替换掉资源文件,换成item2.xml
		adapter.setDropDownViewResource(R.layout.item2);
		//将数据设置进spinner
		spinner.setAdapter(adapter);
	}

}

然后运行,效果如下:

android studio spinner 用法 array_Android_05


今天就说到这里了。。。