Spinner控件的学习
Spinner是AbsSpinner的子类
该控件由选中显示区和一个下拉列表构成
下拉列表中的被选中项将显示在显示区
自定义适配器使用Spinner:
item.xml布局:
该控件由选中显示区和一个下拉列表构成
下拉列表中的被选中项将显示在显示区
可以使用自定义的Adapter
Spinner使用案例:
package com.example.spinner;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class MainActivity extends Activity {
private String[] colors = {"赤","橙","黄","绿","青","蓝","紫"};
private Spinner spi;
private ArrayAdapter<String> adapter;
private void setupView(){
spi = (Spinner)findViewById(R.id.spinner1);
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,colors);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spi.setAdapter(adapter);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupView();
}
}
布局:
<LinearLayout 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"
android:id="@+id/container"
android:orientation="vertical"
>
<Spinner
android:id="@+id/spinner1"
android:layout_width="fill_parent"
android:layout_height="40dp"/>
</LinearLayout>
自定义适配器使用Spinner:
布局:
<LinearLayout 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"
android:id="@+id/container"
android:orientation="vertical"
>
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="50dp"/>
</LinearLayout>
item.xml布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ic_launcher"
android:scaleType="fitCenter"
android:layout_marginRight="20dp"
/>
<TextView
android:id="@+id/tvColor_CN"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_gravity="center_vertical"
android:textSize="18sp"/>
<TextView
android:id="@+id/tvColor_EN"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_gravity="center_vertical"
android:textSize="18sp"/>
</LinearLayout>
对象:
package com.example.spinner1;
public class ColorName {
private String name_cn;
private String name_en;
public String getName_cn() {
return name_cn;
}
public void setName_cn(String name_cn) {
this.name_cn = name_cn;
}
public String getName_en() {
return name_en;
}
public void setName_en(String name_en) {
this.name_en = name_en;
}
}
自定义适配器:
package com.example.spinner1;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter {
private List<ColorName> mList;
private Context mContext;
public MyAdapter(Context mContext, List<ColorName> mList) {
this.mList = mList;
this.mContext = mContext;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if(convertView == null){
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.tvName_CN = (TextView)convertView.findViewById(R.id.tvColor_CN);
holder.tvName_EN = (TextView)convertView.findViewById(R.id.tvColor_EN);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
ColorName c= mList.get(position);
holder.tvName_CN.setText(c.getName_cn());
holder.tvName_EN.setText(c.getName_en());
return convertView;
}
class ViewHolder{
private TextView tvName_CN;
private TextView tvName_EN;
}
}
主界面:
package com.example.spinner1;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Spinner;
public class MainActivity extends Activity {
private Spinner spinner1;
private MyAdapter adapter;
private ArrayList<ColorName> getColorNames(){
ArrayList<ColorName> names = new ArrayList<ColorName>();
String[] color_name_cn = {"赤","橙","黄","绿","青","蓝","紫"};
String[] color_name_en = {"Red","Orange","Yellow","Green","Cyan","Blue","Violet"};
for(int i=0;i<7;i++){
ColorName name = new ColorName();
name.setName_cn(color_name_cn[i]);
name.setName_en(color_name_en[i]);
names.add(name);
}
return names;
}
private void setupView(){
spinner1 = (Spinner)findViewById(R.id.spinner1);
adapter = new MyAdapter(this,getColorNames());
spinner1.setAdapter(adapter);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupView();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理