先看看如下效果图:
这由两部分组成,一个是ListView,一个是PopupWindow(弹出界面)
这里的ListView可以自定义,这个坎个人的需求,PopupWindow也可以自定义。
下面看我的实现:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.my.hman.customspinner.MainActivity"> <LinearLayout android:id="@+id/layout_linner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/frame_color" android:orientation="horizontal" android:padding="10dp"> <TextView android:id="@+id/spinner_content_et" android:layout_width="240dp" android:layout_height="wrap_content" android:background="@null" android:hint="@string/default_input"/> <ImageView android:id="@+id/spinner_arr_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_gravity="center_vertical" android:background="@mipmap/down_arrow_2"/> </LinearLayout> </RelativeLayout>
activity_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/item_tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:layout_marginLeft="10dp"/> </LinearLayout>
activity_popupwindow.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp"> <ListView android:id="@+id/list_view_item" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
MainActivity.class
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView spinner_input_tv;
private ImageView spinner_arrow_img;
private LinearLayout spinner_layout;
private PopupWindow popupWindow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner_arrow_img = (ImageView) findViewById(R.id.spinner_arr_img);
spinner_input_tv = (TextView) findViewById(R.id.spinner_content_et);
spinner_layout = (LinearLayout) findViewById(R.id.layout_linner);
List<String> list = new ArrayList<String>();
list.add("九阴真经");
list.add("太极拳");
list.add("乾坤大挪移");
list.add("降龙十八掌");
list.add("九阳神功");
list.add("无相神功");
// CustomSpinnerAdapter<String> csa = new CustomSpinnerAdapter<String>(list,this);
ArrayAdapter<String> aa = new ArrayAdapter<String>(this,R.layout.activity_item,R.id.item_tv,list);
View popupView = getLayoutInflater().inflate(R.layout.activity_popupwindow,null);
ListView popup_lv = (ListView) popupView.findViewById(R.id.list_view_item);
popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,true);
popupWindow.setTouchable(true);
popupWindow.setOutsideTouchable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(),""));// 这是必须写的
// popup_lv.setAdapter(csa);
popup_lv.setAdapter(aa);
popup_lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = parent.getItemAtPosition(position).toString();
Log.i("---", "item_string" + item );
spinner_input_tv.setText(item);
popupWindow.dismiss();
}
});
spinner_input_tv.setOnClickListener(this);
spinner_arrow_img.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.spinner_arr_img:
showPopupWindow();
break;
case R.id.spinner_content_et:
showPopupWindow();
break;
default:
break;
}
}
private void showPopupWindow() {
popupWindow.dismiss();
popupWindow.setWidth(spinner_layout.getWidth()); // 设置弹窗宽度与spinner_layout一致
popupWindow.showAsDropDown(spinner_layout); // 表示显示在spinner_layout下面
}
}
对于PopupWindow的解释可参考之前的文章。
附上下载地址:http://download.csdn.net/detail/mo_feng_/9717769