仿QQ下拉菜单列表 自定义Spinner
16lz
2021-01-26
Android自带的下拉列表控件功能已经十分强大,但是看起来并不是十分美观,所以用Android的其它控件实现了一个定义的下拉菜单控件,看起来还可以,下面直接贴代码,相信都看得明白!
主界面activity:
package com.grus;import android.app.Activity;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;import android.widget.LinearLayout.LayoutParams;import android.widget.ListView;import android.widget.PopupWindow;//主界面Activitypublic class SelectActivity extends Activity {// 下拉框依附组件private RelativeLayout parent;// 下拉框依附组件宽度,也将作为下拉框的宽度private int pwidth;// 文本框private EditText et, et1;// 下拉箭头图片组件private ImageView image, image1;// 展示所有下拉选项的ListViewprivate ListView listView = null;private String str1[] = { "北京", "上海", "广州" };private String str2[] = { "多媒体播放", "HDMI 1950*780", "北京高视" };// PopupWindow对象private PopupWindow selectPopupWindow = null;private OptionsAdapter optionsAdapter = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.select);}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);initWedget();}/** * 初始化界面控件 */private void initWedget() {// 初始化界面组件parent = (RelativeLayout) findViewById(R.id.parent);et = (EditText) findViewById(R.id.edittext);et1 = (EditText) findViewById(R.id.edittext1);et.setFocusable(false);// 禁止编辑框被编辑et1.setFocusable(false);// 禁止编辑框被编辑image = (ImageView) findViewById(R.id.btn_select);image1 = (ImageView) findViewById(R.id.btn_select1);// 获取下拉框依附的组件宽度pwidth = parent.getWidth();// 设置点击下拉箭头图片事件,点击弹出PopupWindow浮动下拉框image.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {initPopuWindow(et, str1);popupWindwShowing(et);}});image1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 初始化PopupWindowinitPopuWindow(et1, str2);// 显示PopupWindow窗口popupWindwShowing(et1);}});}/** * 初始化PopupWindow */private void initPopuWindow(final EditText et, final String str[]) {View loginwindow = (View) this.getLayoutInflater().inflate(R.layout.options, null);listView = (ListView) loginwindow.findViewById(R.id.list);// 设置自定义AdapteroptionsAdapter = new OptionsAdapter(this, str);listView.setAdapter(optionsAdapter);listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View v, int position,long arg3) {et.setText(str[position]);selectPopupWindow.dismiss();}});selectPopupWindow = new PopupWindow(loginwindow, pwidth,LayoutParams.WRAP_CONTENT, true);selectPopupWindow.setOutsideTouchable(true);//当点击屏幕其他部分及Back键时PopupWindow消失selectPopupWindow.setBackgroundDrawable(new BitmapDrawable());}public void popupWindwShowing(View view) {selectPopupWindow.showAsDropDown(view, 0, -1);}}自定义适配器:
package com.grus;import java.util.ArrayList;import android.app.Activity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;//自定义适配器Adapterpublic class OptionsAdapter extends BaseAdapter { private Activity activity = null; private String str[]; public OptionsAdapter(Activity activity,String str[]){ this.activity = activity; this.str = str; }@Overridepublic int getCount() {return str.length;}@Overridepublic Object getItem(int position) {return str[position];}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); //下拉项布局 convertView = LayoutInflater.from(activity).inflate(R.layout.option_item, null); holder.textView = (TextView) convertView.findViewById(R.id.item_text); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.textView.setText(str[position]); return convertView; }}class ViewHolder { TextView textView; }
布局XML文件:
select.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#EEEED1" ><RelativeLayout android:id="@+id/parent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:layout_marginLeft="30dp"><EditText android:id="@+id/edittext" android:layout_width="200dp" android:singleLine="true" android:layout_height="40dp" android:background="@color/green" android:paddingLeft="3dp"/><ImageView android:id="@+id/btn_select" android:layout_width="30dp" android:layout_height="40dp" android:src="@drawable/select" android:scaleType="fitXY" android:background="@color/green"android:layout_toRightOf="@id/edittext"/><EditText android:id="@+id/edittext1" android:layout_width="200dp" android:singleLine="true" android:layout_height="40dp" android:background="@color/green" android:paddingLeft="3dp" android:layout_below="@id/edittext" android:layout_alignLeft="@id/edittext" android:layout_marginTop="30dp"/><ImageView android:id="@+id/btn_select1" android:layout_width="30dp" android:layout_height="40dp" android:src="@drawable/select" android:scaleType="fitXY" android:background="@color/green"android:layout_toRightOf="@id/edittext1" android:layout_marginTop="30dp"android:layout_below="@id/edittext"/></RelativeLayout></LinearLayout>option_item.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" ><RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:minHeight="40dp" ><TextView android:id="@+id/item_text" android:layout_height="wrap_content"android:layout_width="fill_parent"android:paddingLeft="5dp" android:layout_alignParentLeft="true"></TextView></RelativeLayout></LinearLayout>options.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" ><ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000"></ListView></LinearLayout>
效果图如下:
更多相关文章
- Android(安卓)入门系列文章
- Android的ViewAnimator及其子类ViewSwitcher-android学习之旅(三
- android 学习之listview
- Wifi模块—源码分析Wifi初始化(Android(安卓)P)
- Android(安卓)学习之路 之 第2组UI组件:TextView及其子类(十)
- Android(安卓)实现登录界面和功能实例
- Android(安卓)源码分析之旅3.4--onConfigurationChanged
- Android编译系统环境初始化过程分析
- android基础回顾(三)基础UI组件