Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
2013-12-24 09:20
676 查看
分类: android android
UI教程2013-03-26 21:00 1554人阅读 评论(4) 收藏 举报
UI系列教程第七课:自定义spinner下拉框实现的实现
说道android下拉框spineer,框架中虽有现成的控件,但实际效果可能并不是我们所需要的那种,如下图:
![](http://img.my.csdn.net/uploads/201303/26/1364301946_2970.gif)
其实我们更需要的是像WEB那种风格,如图所示:
![](http://img.my.csdn.net/uploads/201303/26/1364301690_4179.png)
其实实现也很简单,就是自定义个popwindow就可以了
下面贴上代码片段:
[java] view
plaincopy
public class SpinerPopWindow extends PopupWindow implements OnItemClickListener{
private Context mContext;
private ListView mListView;
private NormalSpinerAdapter mAdapter;
private IOnItemSelectListener mItemSelectListener;
public SpinerPopWindow(Context context)
{
super(context);
mContext = context;
init();
}
public void setItemListener(IOnItemSelectListener listener){
mItemSelectListener = listener;
}
private void init()
{
View view = LayoutInflater.from(mContext).inflate(R.layout.spiner_window_layout, null);
setContentView(view);
setWidth(LayoutParams.WRAP_CONTENT);
setHeight(LayoutParams.WRAP_CONTENT);
setFocusable(true);
ColorDrawable dw = new ColorDrawable(0x00);
setBackgroundDrawable(dw);
mListView = (ListView) view.findViewById(R.id.listview);
mAdapter = new NormalSpinerAdapter(mContext);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
}
public void refreshData(List<String> list, int selIndex)
{
if (list != null && selIndex != -1)
{
mAdapter.refreshData(list, selIndex);
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {
dismiss();
if (mItemSelectListener != null){
mItemSelectListener.onItemClick(pos);
}
}
}
主界面调用代码:
[java] view
plaincopy
public class SpinerWindowDemoActivity extends Activity implements OnClickListener, AbstractSpinerAdapter.IOnItemSelectListener{
/** Called when the activity is first created. */
private View mRootView;
private TextView mTView;
private ImageButton mBtnDropDown;
private List<String> nameList = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
private void setupViews(){
mRootView = findViewById(R.id.rootView);
mTView = (TextView) findViewById(R.id.tv_value);
mBtnDropDown = (ImageButton) findViewById(R.id.bt_dropdown);
mBtnDropDown.setOnClickListener(this);
String[] names = getResources().getStringArray(R.array.hero_name);
for(int i = 0; i < names.length; i++){
nameList.add(names[i]);
}
mSpinerPopWindow = new SpinerPopWindow(this);
mSpinerPopWindow.refreshData(nameList, 0);
mSpinerPopWindow.setItemListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.bt_dropdown:
showSpinWindow();
break;
}
}
private void setHero(int pos){
if (pos >= 0 && pos <= nameList.size()){
String value = nameList.get(pos);
mTView.setText(value);
}
}
private SpinerPopWindow mSpinerPopWindow;
private void showSpinWindow(){
Log.e("", "showSpinWindow");
mSpinerPopWindow.setWidth(mTView.getWidth());
mSpinerPopWindow.showAsDropDown(mTView);
}
@Override
public void onItemClick(int pos) {
setHero(pos);
}
}
就这么简单,具体UI美化大家再修改下xml就可以了
下面附上工程链接:
http://download.csdn.net/detail/geniuseoe2012/5184664
welcome to join android-develop group:298044305
more brilliant,Please pay attention to my CSDN blog -->http://blog.csdn.net/geniuseoe2012
上一课:Lance老师UI系列教程第六课->微信聊天气泡界面的实现
/*=============================================================================*/
为使SpinerPopWindow更为通用,特修改或增加以下几个类
AbstractSpinerAdapter
[java] view
plaincopy
<span style="color:#3366ff;">public abstract class AbstractSpinerAdapter<T> extends BaseAdapter {
public static interface IOnItemSelectListener{
public void onItemClick(int pos);
};
private Context mContext;
private List<T> mObjects = new ArrayList<T>();
private int mSelectItem = 0;
private LayoutInflater mInflater;
public AbstractSpinerAdapter(Context context){
init(context);
}
public void refreshData(List<T> objects, int selIndex){
mObjects = objects;
if (selIndex < 0){
selIndex = 0;
}
if (selIndex >= mObjects.size()){
selIndex = mObjects.size() - 1;
}
mSelectItem = selIndex;
}
private void init(Context context) {
mContext = context;
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return mObjects.size();
}
@Override
public Object getItem(int pos) {
return mObjects.get(pos).toString();
}
@Override
public long getItemId(int pos) {
return pos;
}
@Override
public View getView(int pos, View convertView, ViewGroup arg2) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.spiner_item_layout, null);
viewHolder = new ViewHolder();
viewHolder.mTextView = (TextView) convertView.findViewById(R.id.textView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Object item = getItem(pos);
viewHolder.mTextView.setText(item.toString());
return convertView;
}
public static class ViewHolder
{
public TextView mTextView;
}
}</span>
SpinerPopWindow
[java] view
plaincopy
public class SpinerPopWindow extends PopupWindow implements OnItemClickListener{
private Context mContext;
private ListView mListView;
private AbstractSpinerAdapter mAdapter;
private IOnItemSelectListener mItemSelectListener;
public SpinerPopWindow(Context context)
{
super(context);
mContext = context;
init();
}
public void setItemListener(IOnItemSelectListener listener){
mItemSelectListener = listener;
}
public void setAdatper(AbstractSpinerAdapter adapter){
mAdapter = adapter;
mListView.setAdapter(mAdapter);
}
private void init()
{
View view = LayoutInflater.from(mContext).inflate(R.layout.spiner_window_layout, null);
setContentView(view);
setWidth(LayoutParams.WRAP_CONTENT);
setHeight(LayoutParams.WRAP_CONTENT);
setFocusable(true);
ColorDrawable dw = new ColorDrawable(0x00);
setBackgroundDrawable(dw);
mListView = (ListView) view.findViewById(R.id.listview);
mListView.setOnItemClickListener(this);
}
public <T> void refreshData(List<T> list, int selIndex)
{
if (list != null && selIndex != -1)
{
if (mAdapter != null){
mAdapter.refreshData(list, selIndex);
}
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {
dismiss();
if (mItemSelectListener != null){
mItemSelectListener.onItemClick(pos);
}
}
}
CustemObject
[java] view
plaincopy
<span style="color:#3366ff;">public class CustemObject {
public String data = "";
@Override
public String toString() {
// TODO Auto-generated method stub
return data;
}
}</span>
CustemSpinerAdapter
[java] view
plaincopy
public class CustemSpinerAdapter extends AbstractSpinerAdapter<CustemObject>{
public CustemSpinerAdapter(Context context) {
super(context);
}
}
SpinerWindowDemoActivity
[java] view
plaincopy
public class SpinerWindowDemoActivity extends Activity implements OnClickListener, AbstractSpinerAdapter.IOnItemSelectListener{
/** Called when the activity is first created. */
private View mRootView;
private TextView mTView;
private ImageButton mBtnDropDown;
private List<CustemObject> nameList = new ArrayList<CustemObject>();
private AbstractSpinerAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
private void setupViews(){
mRootView = findViewById(R.id.rootView);
mTView = (TextView) findViewById(R.id.tv_value);
mBtnDropDown = (ImageButton) findViewById(R.id.bt_dropdown);
mBtnDropDown.setOnClickListener(this);
String[] names = getResources().getStringArray(R.array.hero_name);
for(int i = 0; i < names.length; i++){
CustemObject object = new CustemObject();
object.data = names[i];
nameList.add(object);
}
mAdapter = new CustemSpinerAdapter(this);
mAdapter.refreshData(nameList, 0);
mSpinerPopWindow = new SpinerPopWindow(this);
mSpinerPopWindow.setAdatper(mAdapter);
mSpinerPopWindow.setItemListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.bt_dropdown:
showSpinWindow();
break;
}
}
private void setHero(int pos){
if (pos >= 0 && pos <= nameList.size()){
CustemObject value = nameList.get(pos);
mTView.setText(value.toString());
}
}
private SpinerPopWindow mSpinerPopWindow;
private void showSpinWindow(){
Log.e("", "showSpinWindow");
mSpinerPopWindow.setWidth(mTView.getWidth());
mSpinerPopWindow.showAsDropDown(mTView);
}
@Override
public void onItemClick(int pos) {
setHero(pos);
}
}
自定义一个类重写toString方法(CustemObject),自定义一个继承自AbstractSpinerAdapter的类确定对象类型(CustemSpinerAdapter)
构造具体的AbstractSpinerAdapter类对象(CustemSpinerAdapter)
通过refreshData填充数据,然后调用SpinerPopWindow的setAdatper设置数据源,OK大功告成!
新工程链接如下:http://download.csdn.net/detail/geniuseoe2012/5412647
OK,本节课到此为止!欲知更多Android-UI技巧,请关注窝的下一堂课~
更多精彩尽在http://blog.csdn.net/geniuseoe2012
welcome to join android develop group:298044305
上一课:Lance老师UI系列教程第六课->微信聊天气泡界面的实现
下一课: Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
UI教程2013-03-26 21:00 1554人阅读 评论(4) 收藏 举报
UI系列教程第七课:自定义spinner下拉框实现的实现
说道android下拉框spineer,框架中虽有现成的控件,但实际效果可能并不是我们所需要的那种,如下图:
![](http://img.my.csdn.net/uploads/201303/26/1364301946_2970.gif)
其实我们更需要的是像WEB那种风格,如图所示:
![](http://img.my.csdn.net/uploads/201303/26/1364301690_4179.png)
其实实现也很简单,就是自定义个popwindow就可以了
下面贴上代码片段:
[java] view
plaincopy
public class SpinerPopWindow extends PopupWindow implements OnItemClickListener{
private Context mContext;
private ListView mListView;
private NormalSpinerAdapter mAdapter;
private IOnItemSelectListener mItemSelectListener;
public SpinerPopWindow(Context context)
{
super(context);
mContext = context;
init();
}
public void setItemListener(IOnItemSelectListener listener){
mItemSelectListener = listener;
}
private void init()
{
View view = LayoutInflater.from(mContext).inflate(R.layout.spiner_window_layout, null);
setContentView(view);
setWidth(LayoutParams.WRAP_CONTENT);
setHeight(LayoutParams.WRAP_CONTENT);
setFocusable(true);
ColorDrawable dw = new ColorDrawable(0x00);
setBackgroundDrawable(dw);
mListView = (ListView) view.findViewById(R.id.listview);
mAdapter = new NormalSpinerAdapter(mContext);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
}
public void refreshData(List<String> list, int selIndex)
{
if (list != null && selIndex != -1)
{
mAdapter.refreshData(list, selIndex);
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {
dismiss();
if (mItemSelectListener != null){
mItemSelectListener.onItemClick(pos);
}
}
}
主界面调用代码:
[java] view
plaincopy
public class SpinerWindowDemoActivity extends Activity implements OnClickListener, AbstractSpinerAdapter.IOnItemSelectListener{
/** Called when the activity is first created. */
private View mRootView;
private TextView mTView;
private ImageButton mBtnDropDown;
private List<String> nameList = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
private void setupViews(){
mRootView = findViewById(R.id.rootView);
mTView = (TextView) findViewById(R.id.tv_value);
mBtnDropDown = (ImageButton) findViewById(R.id.bt_dropdown);
mBtnDropDown.setOnClickListener(this);
String[] names = getResources().getStringArray(R.array.hero_name);
for(int i = 0; i < names.length; i++){
nameList.add(names[i]);
}
mSpinerPopWindow = new SpinerPopWindow(this);
mSpinerPopWindow.refreshData(nameList, 0);
mSpinerPopWindow.setItemListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.bt_dropdown:
showSpinWindow();
break;
}
}
private void setHero(int pos){
if (pos >= 0 && pos <= nameList.size()){
String value = nameList.get(pos);
mTView.setText(value);
}
}
private SpinerPopWindow mSpinerPopWindow;
private void showSpinWindow(){
Log.e("", "showSpinWindow");
mSpinerPopWindow.setWidth(mTView.getWidth());
mSpinerPopWindow.showAsDropDown(mTView);
}
@Override
public void onItemClick(int pos) {
setHero(pos);
}
}
就这么简单,具体UI美化大家再修改下xml就可以了
下面附上工程链接:
http://download.csdn.net/detail/geniuseoe2012/5184664
welcome to join android-develop group:298044305
more brilliant,Please pay attention to my CSDN blog -->http://blog.csdn.net/geniuseoe2012
上一课:Lance老师UI系列教程第六课->微信聊天气泡界面的实现
/*=============================================================================*/
为使SpinerPopWindow更为通用,特修改或增加以下几个类
AbstractSpinerAdapter
[java] view
plaincopy
<span style="color:#3366ff;">public abstract class AbstractSpinerAdapter<T> extends BaseAdapter {
public static interface IOnItemSelectListener{
public void onItemClick(int pos);
};
private Context mContext;
private List<T> mObjects = new ArrayList<T>();
private int mSelectItem = 0;
private LayoutInflater mInflater;
public AbstractSpinerAdapter(Context context){
init(context);
}
public void refreshData(List<T> objects, int selIndex){
mObjects = objects;
if (selIndex < 0){
selIndex = 0;
}
if (selIndex >= mObjects.size()){
selIndex = mObjects.size() - 1;
}
mSelectItem = selIndex;
}
private void init(Context context) {
mContext = context;
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return mObjects.size();
}
@Override
public Object getItem(int pos) {
return mObjects.get(pos).toString();
}
@Override
public long getItemId(int pos) {
return pos;
}
@Override
public View getView(int pos, View convertView, ViewGroup arg2) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.spiner_item_layout, null);
viewHolder = new ViewHolder();
viewHolder.mTextView = (TextView) convertView.findViewById(R.id.textView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Object item = getItem(pos);
viewHolder.mTextView.setText(item.toString());
return convertView;
}
public static class ViewHolder
{
public TextView mTextView;
}
}</span>
SpinerPopWindow
[java] view
plaincopy
public class SpinerPopWindow extends PopupWindow implements OnItemClickListener{
private Context mContext;
private ListView mListView;
private AbstractSpinerAdapter mAdapter;
private IOnItemSelectListener mItemSelectListener;
public SpinerPopWindow(Context context)
{
super(context);
mContext = context;
init();
}
public void setItemListener(IOnItemSelectListener listener){
mItemSelectListener = listener;
}
public void setAdatper(AbstractSpinerAdapter adapter){
mAdapter = adapter;
mListView.setAdapter(mAdapter);
}
private void init()
{
View view = LayoutInflater.from(mContext).inflate(R.layout.spiner_window_layout, null);
setContentView(view);
setWidth(LayoutParams.WRAP_CONTENT);
setHeight(LayoutParams.WRAP_CONTENT);
setFocusable(true);
ColorDrawable dw = new ColorDrawable(0x00);
setBackgroundDrawable(dw);
mListView = (ListView) view.findViewById(R.id.listview);
mListView.setOnItemClickListener(this);
}
public <T> void refreshData(List<T> list, int selIndex)
{
if (list != null && selIndex != -1)
{
if (mAdapter != null){
mAdapter.refreshData(list, selIndex);
}
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {
dismiss();
if (mItemSelectListener != null){
mItemSelectListener.onItemClick(pos);
}
}
}
CustemObject
[java] view
plaincopy
<span style="color:#3366ff;">public class CustemObject {
public String data = "";
@Override
public String toString() {
// TODO Auto-generated method stub
return data;
}
}</span>
CustemSpinerAdapter
[java] view
plaincopy
public class CustemSpinerAdapter extends AbstractSpinerAdapter<CustemObject>{
public CustemSpinerAdapter(Context context) {
super(context);
}
}
SpinerWindowDemoActivity
[java] view
plaincopy
public class SpinerWindowDemoActivity extends Activity implements OnClickListener, AbstractSpinerAdapter.IOnItemSelectListener{
/** Called when the activity is first created. */
private View mRootView;
private TextView mTView;
private ImageButton mBtnDropDown;
private List<CustemObject> nameList = new ArrayList<CustemObject>();
private AbstractSpinerAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
private void setupViews(){
mRootView = findViewById(R.id.rootView);
mTView = (TextView) findViewById(R.id.tv_value);
mBtnDropDown = (ImageButton) findViewById(R.id.bt_dropdown);
mBtnDropDown.setOnClickListener(this);
String[] names = getResources().getStringArray(R.array.hero_name);
for(int i = 0; i < names.length; i++){
CustemObject object = new CustemObject();
object.data = names[i];
nameList.add(object);
}
mAdapter = new CustemSpinerAdapter(this);
mAdapter.refreshData(nameList, 0);
mSpinerPopWindow = new SpinerPopWindow(this);
mSpinerPopWindow.setAdatper(mAdapter);
mSpinerPopWindow.setItemListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.bt_dropdown:
showSpinWindow();
break;
}
}
private void setHero(int pos){
if (pos >= 0 && pos <= nameList.size()){
CustemObject value = nameList.get(pos);
mTView.setText(value.toString());
}
}
private SpinerPopWindow mSpinerPopWindow;
private void showSpinWindow(){
Log.e("", "showSpinWindow");
mSpinerPopWindow.setWidth(mTView.getWidth());
mSpinerPopWindow.showAsDropDown(mTView);
}
@Override
public void onItemClick(int pos) {
setHero(pos);
}
}
自定义一个类重写toString方法(CustemObject),自定义一个继承自AbstractSpinerAdapter的类确定对象类型(CustemSpinerAdapter)
构造具体的AbstractSpinerAdapter类对象(CustemSpinerAdapter)
通过refreshData填充数据,然后调用SpinerPopWindow的setAdatper设置数据源,OK大功告成!
新工程链接如下:http://download.csdn.net/detail/geniuseoe2012/5412647
OK,本节课到此为止!欲知更多Android-UI技巧,请关注窝的下一堂课~
更多精彩尽在http://blog.csdn.net/geniuseoe2012
welcome to join android develop group:298044305
上一课:Lance老师UI系列教程第六课->微信聊天气泡界面的实现
下一课: Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
相关文章推荐
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第五课->自定义风格单选多选对话框的实现
- Lance老师UI系列教程第五课->自定义风格单选多选对话框的实现
- Lance老师UI系列教程第五课->自定义风格单选多选对话框的实现
- Lance老师UI系列教程第五课->自定义风格单选多选对话框的实现
- Lance老师UI系列教程第一课->QQ设置界面的实现(android)
- Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
- Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
- Lance老师UI系列教程第二课->腾讯微博(下拉刷新+点击更多)listview的实现 (android)
- Lance老师UI系列教程第三课->QQ登录注册界面的实现(android-2012最新版)
- Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
- Lance老师UI系列教程第一课->QQ设置界面的实现(android)
- Lance老师UI系列教程第三课->QQ登录注册界面的实现(android-2012最新版)
- Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
- Lance老师UI系列教程第一课->QQ设置界面的实现(android)
- Lance老师UI系列教程第三课->QQ登录注册界面的实现(android-2012最新版)
- Lance老师UI系列教程第二课->腾讯微博(下拉刷新+点击更多)listview的实现 (android)