下拉列表(Spinner)介绍与应用

Spinner提供一种下拉列表选择,这种输入方式也是很常见的.比如选择语言,屏幕灭屏时间选择等.

按照之前介绍的其他组件一样,Spinner的实现也是首先在main.xml文件中添加一个按钮,单击此按钮会跳转到这个SpinnerActivity文件.

添加Button的代码如下所示:

<Button android:id = "@+/spinner_button"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "Spinner"
/>
代码解释:

定义一个id为"Spinner_button"的按钮,并设定其宽度和高度是自适应,并指定其显示文字为"Spinner".

其对应的响应方法代码如下:

/*在activity中*/
private Button spinner_button;
spinner_button.setonClickListener(new onClickListener()
{
    public onClick(View v)
    {
        Intent it = new Intent(MainActivity.this,SpinnerActivity.class);/*在activity中context可以用MainActivity.this */
        startActivity(it);
    }
});
=========-========
/*在fragment中*/
package com.example.spinner;

import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.content.Context;

public class MainActivity extends Activity {

    private static Button spinner_button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            //liwei add
            spinner_button = (Button)rootView.findViewById(R.id.spinner_button);
            spinner_button.setOnClickListener(new OnClickListener()
                {
                    public void onClick(View v)
                    {
                        //Intent it = new Intent();
                        //it.setClass(getActivity(), SpinnerActivity.class);
                        Intent it = new Intent(getActivity(),SpinnerActivity.class);/*在fragment中context用getActivity()得到*/
                        startActivity(it);
                    }
                }
            );
            
            return rootView;
        }
        
    }

}
代码解释:

在该Button被单击的时候,启动SpinnerActivity,这个SpinnerActivity就是用来展示Spinner组件的界面.

先创建SpinnerActivity这个Activity,然后修改其onCreate方法,设定其对应的模板为spinner.xml

实现代码如下:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setTitle("SpinnerActivity");
    setContentView(R.layout.spinner);
}
代码解释:

首先使用setTile方法将其标题设置为"SpinnerActivity",并将Spinner.xml绑定为其模板文件.

新建其对应的模板文件spinner.xml,在其中添加一个TextView和一个Spinner组件,

实现代码如下:

<TextView
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:text = "Spinner_1"
/>
<Spinner 
android:id = "@+id/spinner_1"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:drawSelectorOnTop = "false"
/>
这个模板文件中定义了一个TextView组件和一个Spinner组件.

接着在AndroidManifest.xml中添加如下代码:

<activity android:name = "SpinnerActivity"></activity>
代码解释:

这里定义的Spinner组件的id为spinner_1,宽度是占满其父元素(也就是LinearLayout)的宽,高度为自适应.

运行这个例子,可以看到如下图示.


可以看出界面已经显示了一个下拉组件,但是其中还没有任何数据.

下面就是实现往里面填一些数据,以便可以在列表数据中选择需要的数据.

给Spinner组件装填数据比较常见的有两种方式.

1)在编程的时候载入列表数据.

2)在xml文件中预先定义数据.

下面分别介绍两个方式:

1)在编程的时候载入列表数据

首先定义一下需要载入的数据,

具体代码如下:

private static final String[] mCountries = {"China","Russia","Germany","Ukraine","Belarus","USA"};
这里是提供了几个国家名称供选择,然后在onCreate中调用find_and_modify_view()来载入数据,

find_and_modify_view()的代码如下:

package com.example.spinner;

import java.util.ArrayList;

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

public class SpinnerActivity extends Activity {
    private static final String[] mCountries = {"China","Russia","Germany","Ukraine","Belarus","USA"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setTitle("SpinnerActivity");
        setContentView(R.layout.spinner);
        find_and_modify_view();
    }
    
    private void find_and_modify_view()
    {
        Spinner spinner_choose = (Spinner)findViewById(R.id.spinner_sp);
        ArrayList<String> allcountries = new ArrayList<String>();
        for(int i=0;i<mCountries.length;i++)
        {
            allcountries.add(mCountries[i]);
        }
        ArrayAdapter<String> aspnCountries = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, allcountries);
        aspnCountries.setDropDownViewResource(android.R.layout.simple_spinner_item);
        spinner_choose.setAdapter(aspnCountries);
    }

}
代码解释:

上述代码实现将定义的mCountries数据装载在Spinner 组件中,运行一下实例,可以看到如下效果.

2)在xml文件中预先定义数据.

除了上面那种在代码中指定Spinner 内容的方法外,还可以在xml文件中预先定义数据.

为了说明这个用法,在spinner.xml这个模板中在添加一个Spinner组件,实现代码如下:

<TextView  android:layout_width = "wrap_content"
           android:layout_height = "wrap_content"
           android:text = "Spinner_2 from arrays xml file"
/>
<Spinner android:id = "@+id/spinner_2"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content"
         android:drawSelectorOnTop = "false"
/>
然后在SpinnerActivity.java中可以这样来初始化其值,实现代码如下:

spinner_2 = (Spinner)findViewById(R.id.spinner_2);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource {this,R.array.countries,android.R.layout.simple_spinner_item};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_2.setAdapter(adapter);
代码解释:

上述代码是将R.array.countries对应的值载入到Spinner_2中,而R.array.countries对应的值是在xml文件中预先定义的,其方法是在res/values/目录下新建一个名为array.xml的文件.

输入如下内容:

<?xml version="1.0" encoding="utf-8">
<resource>
    <string-array name="countries">
         <item>China2</item>
         <item>Russia2</item>
         <item>Germany2</item>
         <item>Ukraine2</item>
         <item>Belarus2</item>
         <item>USA2</item>
     </sting-array>    
</resources>
代码解释:

在此文件中预先定义了一组名字为countries的数字(array),最后使用setDropDonnViewResource将其设置为Spinner_2的内容,运行程序可以看到如下效果.



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值