首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

spinner自定义,成效如腾讯QQ账号选择时候的下拉列表

2013-10-30 
spinner自定义,效果如腾讯QQ账号选择时候的下拉列表下拉列表在android中自带spinner的有时候不太适合我们

spinner自定义,效果如腾讯QQ账号选择时候的下拉列表

     下拉列表在android中自带spinner的有时候不太适合我们的界面,我们希望有自己的一种显示方法,那怎么办?自定义Spinner.效果如QQ账号选择一样。如图所以。

spinner自定义,成效如腾讯QQ账号选择时候的下拉列表spinner自定义,成效如腾讯QQ账号选择时候的下拉列表

这种效果,如果你喜欢,你可以往下接着看。

这里我们使用listView配合TextView实现的。

1 布局文件                                                     

activity_main.xml

package com.example.testspinner2;import java.util.ArrayList;import android.app.Activity;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.PopupWindow.OnDismissListener;import android.widget.TextView;public class MainActivity extends Activity {private ArrayList<String> list;private ImageView imgView;private TextView textView;private LinearLayout layout;private ListView listView;private MyspinnerAdapter adapter;private PopupWindow popupWindow;private LinearLayout spinnerlayout;int width;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.textView2);imgView = (ImageView) findViewById(R.id.imageView1);// 实例化一个List,添加数据list = new ArrayList<String>();list.add("第一展厅");list.add("4展厅");list.add("第三展厅");adapter = new MyspinnerAdapter(this, list);textView.setText((CharSequence) adapter.getItem(0));spinnerlayout = (LinearLayout) findViewById(R.id.spinnerid);// 点击右侧按钮,弹出下拉框imgView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if(list.size()>0){spinnerlayout.setBackgroundResource(R.drawable.preference_first_item);}showWindow(spinnerlayout, textView);}});}protected void onResume(){super.onResume();}public void showWindow(View position, final TextView txt) {layout = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.mypinner_dropdown, null);listView = (ListView) layout.findViewById(R.id.listView);listView.setAdapter(adapter);popupWindow = new PopupWindow(position);// 设置弹框的宽度为布局文件的宽popupWindow.setWidth(spinnerlayout.getWidth());popupWindow.setHeight(LayoutParams.WRAP_CONTENT);// 设置一个透明的背景,不然无法实现点击弹框外,弹框消失popupWindow.setBackgroundDrawable(new BitmapDrawable());// 设置点击弹框外部,弹框消失popupWindow.setOutsideTouchable(true);popupWindow.setFocusable(true);popupWindow.setContentView(layout);// 设置弹框出现的位置,在v的正下方横轴偏移textview的宽度,为了对齐~纵轴不偏移popupWindow.showAsDropDown(position, 0, 0);popupWindow.setOnDismissListener(new OnDismissListener(){@Overridepublic void onDismiss() {// TODO Auto-generated method stubspinnerlayout.setBackgroundResource(R.drawable.preference_single_item);}});// listView的item点击事件listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {// TODO Auto-generated method stubtxt.setText(list.get(arg2));// 设置所选的item作为下拉框的标题// 弹框消失popupWindow.dismiss();popupWindow = null;}});}@Overridepublic 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;}}

这里前段和我们常用的没什么区别,只是监听imageView,关键的是showWindows做出了点击更多按钮弹出已存信息。在popupWindow消失的时候,背景变回没有弹出下拉菜单的背景样式。

可能大家没有图片资源,今天我传不上去,可以留下邮箱!



     


热点排行