Android下拉菜单可以使用Spinner组件实现。Spinner是一种类似于下拉框的控件,但是可以定制化的程度更高。以下是实现步骤:
-
在布局文件中添加Spinner组件。例如:
<Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
-
在Activity中找到Spinner控件,并为其设置数据源。例如:
Spinner spinner = findViewById(R.id.spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter);
这里的数据源是一个字符数组,我们可以在res/values/strings.xml文件中定义该数组:
<resources> <string-array name="planets_array"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> <item>Jupiter</item> <item>Saturn</item> <item>Uranus</item> <item>Neptune</item> </string-array> </resources>
-
为Spinner设置监听器,以便在用户选择列表项时作出响应。例如:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String planet = parent.getItemAtPosition(position).toString(); // TODO 做出响应 } @Override public void onNothingSelected(AdapterView<?> parent) { } });
这里的onItemSelected()方法在用户选择列表项时触发,我们可以在里面获取选中的项并做出响应。
注意:如果Spinner的数据源是动态生成的,而不是在xml文件中声明的,那么就需要使用另一种适配器来设置数据源。具体可以参考官方文档:https://developer.android.com/guide/topics/ui/controls/spinner#Populate
实现思路:
- 在布局文件中添加一个Spinner控件,设置好显示样式和数据源。
- 创建一个数据适配器,将需要显示的数据集合和Spinner控件绑定。
- 在Activity中实现OnItemSelectedListener监听器,重写onItemSelected()和onNothingSelected()方法,分别对应Spinner控件选中项发生变化和没有选中项的情况。
- 在onCreate()方法中获取Spinner控件并设置数据适配器和监听器。
示例代码:
- 布局文件activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:padding="5dp"
android:textSize="18sp" />
<TextView
android:id="@+id/result_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="请选择一个选项:"
android:textSize="18sp" />
</LinearLayout>
- 创建数据适配器MySpinnerAdapter.java
public class MySpinnerAdapter extends BaseAdapter {
private Context mContext;
private List<String> mDataList;
public MySpinnerAdapter(Context context, List<String> dataList) {
mContext = context;
mDataList = dataList;
}
@Override
public int getCount() {
return mDataList.size();
}
@Override
public Object getItem(int position) {
return mDataList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView;
if (convertView == null) {
textView = new TextView(mContext);
textView.setPadding(10, 10, 10, 10);
textView.setTextSize(18);
textView.setTextColor(Color.BLACK);
} else {
textView = (TextView) convertView;
}
textView.setText(mDataList.get(position));
return textView;
}
}
- 在Activity中完成Spinner控件的绑定、数据适配器和监听器的设置
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
private Spinner mSpinner;
private TextView mResultTv;
private List<String> mDataList = new ArrayList<>();
private MySpinnerAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
mSpinner = findViewById(R.id.spinner);
mResultTv = findViewById(R.id.result_tv);
// 初始化数据源
mDataList.add("选项1");
mDataList.add("选项2");
mDataList.add("选项3");
// 初始化适配器
mAdapter = new MySpinnerAdapter(this, mDataList);
mSpinner.setAdapter(mAdapter);
// 设置监听器
mSpinner.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String result = mDataList.get(position);
mResultTv.setText("您选择了:" + result);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
mResultTv.setText("没有选择任何选项");
}
}
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/116183.html