精华内容
下载资源
问答
  • android完美下拉框控件

    2017-10-02 19:55:34
    android完美下拉框控件android完美下拉框控件android完美下拉框控件android完美下拉框控件
  • Android Spinner下拉列表控件(上) Spinner 提供下拉列表式的输入方式,该方法可以有效节省手机屏幕上的显示空间。下面用一个简单的实例讲解 Spinner 的使用方法。在工程 WidgetDemo 的布局文件 main.xml 中添加一个...

    Android Spinner 下拉列表控件()

    Spinner 提供下拉列表式的输入方式,该方法可以有效节省手机屏幕上的显示空间。
    下面用一个简单的实例讲解 Spinner 的使用方法。在工程 WidgetDemo 的布局文件 main.xml 中添加一个 Button,用以启动 SpinnerActivity。
    在 main.xml 中添加代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingRight="10dp"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity">
    <Button
    android:id="@+id/button4"
    android:text="完成"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="SpinnerDemo" />
    
    </LinearLayout>

    单击 Button 并启动 SpinnerActivity 的代码如下

    package introduction.android.widgetdemo;
    
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.TextView;
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
    Button spinnerbtn = (Button) this.findViewById(R.id.button4);
    spinnerbtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent intent = new Intent(MainActivity.this, SpinnerActivity.class);
    startActivity(intent);
                }
            });
        }
    }

     

    同时在 AndroidManifest.xml 文件中声明该 Activity:

    <activity android:name=".SpinnerActivity "></activity>

    SpinnerActivity 的运行效果如图所示。

     

    展开全文
  • Android自定义的下拉列表控件

    万次阅读 2017-10-20 13:49:40
    Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类似下图这样的: 这个时候只有自己动手...

    一、概述

    Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求,

    比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类似下图这样的:

     

     

     

    这个时候只有自己动手写一个了。其实实现起来不算很难,

    本文实现的方案是采用TextView +ImageView+PopupWindow的组合方案。

    先来看看我们的自己写的控件效果图吧:(源码在文章下面最后给出哈!)

     

    二、自定义下拉列表框控件的实现

    1. 自定义控件用到的布局文件和资源:

    结果框的布局页面:dropdownlist_view.xml:


     

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:id="@+id/compound"
        android:background="@drawable/dropdown_bg_selector" >
        
        <TextView
            android:id="@+id/text"
            android:layout_width="250dp"
            android:layout_height="40dp"
            android:paddingLeft="10dp"
            android:text="文本文字"
            android:gravity="center_vertical"
            android:textSize="14sp"
            android:padding="5dp"
            android:singleLine="true" />
        <ImageView 
            android:id="@+id/btn"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_toRightOf="@+id/text"
            android:src="@drawable/dropdown"
            android:padding="5dp"
            android:layout_centerVertical="true"
            android:gravity="center"/>
    </RelativeLayout>
    复制代码

     

    下拉弹窗列表布局页面:dropdownlist_popupwindow.xml:

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
        <ListView
            android:id="@+id/listView"
            android:layout_width="280dp"
            android:layout_height="wrap_content"
            android:divider="#666666"
            android:dividerHeight="1dp"
             ></ListView>
    
    </LinearLayout>
    复制代码

    selector资源文件:

    dropdown_list_selector.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@color/dropdownlist_item_press"/>
        <item android:drawable="@color/dropdownlist_item"/>
    </selector>

    dropdown_bg_selector.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@color/dropdownlist_press"/>
        <item android:drawable="@color/dropdownlist_bg"/>
    </selector>

     

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:id="@+id/compound"
        android:background="@drawable/dropdown_bg_selector" >
        
        <TextView
            android:id="@+id/text"
            android:layout_width="250dp"
            android:layout_height="40dp"
            android:paddingLeft="10dp"
            android:text="文本文字"
            android:gravity="center_vertical"
            android:textSize="14sp"
            android:padding="5dp"
            android:singleLine="true" />
        <ImageView 
            android:id="@+id/btn"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_toRightOf="@+id/text"
            android:src="@drawable/dropdown"
            android:padding="5dp"
            android:layout_centerVertical="true"
            android:gravity="center"/>
    </RelativeLayout>
    复制代码

     

    下拉弹窗列表布局页面:dropdownlist_popupwindow.xml:

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
        <ListView
            android:id="@+id/listView"
            android:layout_width="280dp"
            android:layout_height="wrap_content"
            android:divider="#666666"
            android:dividerHeight="1dp"
             ></ListView>
    
    </LinearLayout>
    复制代码

    selector资源文件:

    dropdown_list_selector.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@color/dropdownlist_item_press"/>
        <item android:drawable="@color/dropdownlist_item"/>
    </selector>

    dropdown_bg_selector.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@color/dropdownlist_press"/>
        <item android:drawable="@color/dropdownlist_bg"/>
    </selector>

     

     

    2. 自定义下拉列表框控件类的实现:

     

    我们采用了TextView+ImageView+PopupWindow的组合方案,所以我的自定义控件需要重写ViewGroup,由于我们已经知道了,布局方向为竖直方向,所以这里,

    我直接继承LinearLayout来写这个控件。具体实现代码如下:

    复制代码
    package com.czm.xcdropdownlistview;
    
    import java.util.ArrayList;
    
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.PopupWindow;
    import android.widget.TextView;
    
    @SuppressLint("NewApi")
    /**
     * 下拉列表框控件
     * @author caizhiming
     *
     */
    public class XCDropDownListView extends LinearLayout{
    
        private TextView editText;
        private ImageView imageView;
        private PopupWindow popupWindow = null;
        private ArrayList<String> dataList =  new ArrayList<String>();
        private View mView;
        public XCDropDownListView(Context context) {
            this(context,null);
            // TODO Auto-generated constructor stub
        }
        public XCDropDownListView(Context context, AttributeSet attrs) {
            this(context, attrs,0);
            // TODO Auto-generated constructor stub
        }
        public XCDropDownListView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            // TODO Auto-generated constructor stub
            initView();
        }
    
        public void initView(){
            String infServie = Context.LAYOUT_INFLATER_SERVICE;
            LayoutInflater layoutInflater;
            layoutInflater =  (LayoutInflater) getContext().getSystemService(infServie);
            View view  = layoutInflater.inflate(R.layout.dropdownlist_view, this,true);
            editText= (TextView)findViewById(R.id.text);
            imageView = (ImageView)findViewById(R.id.btn);
            this.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if(popupWindow == null ){
                        showPopWindow();
                    }else{
                        closePopWindow();
                    }
                }
            });
        }
        /**
         * 打开下拉列表弹窗
         */
        private void showPopWindow() {  
            // 加载popupWindow的布局文件  
            String infServie = Context.LAYOUT_INFLATER_SERVICE;
            LayoutInflater layoutInflater;
            layoutInflater =  (LayoutInflater) getContext().getSystemService(infServie);
            View contentView  = layoutInflater.inflate(R.layout.dropdownlist_popupwindow, null,false);
            ListView listView = (ListView)contentView.findViewById(R.id.listView);
            
            listView.setAdapter(new XCDropDownListAdapter(getContext(), dataList));
            popupWindow = new PopupWindow(contentView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
            popupWindow.setBackgroundDrawable(getResources().getDrawable(R.color.transparent));
            popupWindow.setOutsideTouchable(true);
            popupWindow.showAsDropDown(this);
        }
        /**
         * 关闭下拉列表弹窗
         */
        private void closePopWindow(){
            popupWindow.dismiss();
            popupWindow = null;
        }
        /**
         * 设置数据
         * @param list
         */
        public void setItemsData(ArrayList<String> list){
            dataList = list;
            editText.setText(list.get(0).toString());
        }
        /**
         * 数据适配器
         * @author caizhiming
         *
         */
        class XCDropDownListAdapter extends BaseAdapter{
    
            Context mContext;
            ArrayList<String> mData;
            LayoutInflater inflater;
            public XCDropDownListAdapter(Context ctx,ArrayList<String> data){
                mContext  = ctx;
                mData = data;
                inflater = LayoutInflater.from(mContext);
            }
            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return mData.size();
            }
    
            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return null;
            }
    
            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                // 自定义视图
                ListItemView listItemView = null;
                if (convertView == null) {
                    // 获取list_item布局文件的视图
                    convertView = inflater.inflate(R.layout.dropdown_list_item, null);
                    
                    listItemView = new ListItemView();
                    // 获取控件对象
                    listItemView.tv = (TextView) convertView
                            .findViewById(R.id.tv);
    
                    listItemView.layout = (LinearLayout) convertView.findViewById(R.id.layout_container);
                    // 设置控件集到convertView
                    convertView.setTag(listItemView);
                } else {
                    listItemView = (ListItemView) convertView.getTag();
                }
                
                // 设置数据
                listItemView.tv.setText(mData.get(position).toString());
                final String text = mData.get(position).toString();
                listItemView.layout.setOnClickListener(new OnClickListener() {
                    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        editText.setText(text);
                        closePopWindow();
                    }
                });
                return convertView;
            }
        
        }
        private static class ListItemView{
            TextView tv;
            LinearLayout layout;
        }
    
    }
    复制代码

     

    三、如何使用该自定义下拉列表框控件

    使用该控件和使用普通的自带的控件一样,首先需要在布局文件中引用该控件:

    复制代码
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.czm.xcdropdownlistview.MainActivity"
        tools:ignore="MergeRootFrame" >
        
        
        <com.czm.xcdropdownlistview.XCDropDownListView
            android:id="@+id/drop_down_list_view"
            android:layout_marginTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true" />
        
        </RelativeLayout>
    复制代码

    其次,就是在代码中使用该控件:

    复制代码
    package com.czm.xcdropdownlistview;
    
    import java.util.ArrayList;
    
    import android.app.Activity;
    import android.os.Bundle;
    /**
     * 使用下拉列表框控件 示例
     * @author caizhiming
     *
     */
    public class MainActivity extends Activity {
    
        XCDropDownListView dropDownListView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            dropDownListView = (XCDropDownListView)findViewById(R.id.drop_down_list_view);
            ArrayList<String> list = new ArrayList<String>();
            for(int i = 0;i< 6;i++){
                list.add("下拉列表项"+(i+1));
            }
            dropDownListView.setItemsData(list);
    
        }
    
    }
    复制代码

    对了,这个控件中,我没有实现点击item项回调接口,这个可能对有些写惯了回调的可能觉得少了写什么的感觉,有兴趣的你可以自己添加相关回调操作哈,这个大家应该都会把。

    四、源码下载

    最后给出源码的下载:
    http://download.csdn.net/download/u013068887/10031736

    本文参考:
    http://www.cnblogs.com/JczmDeveloper/p/4425010.html

     

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:id="@+id/compound"
        android:background="@drawable/dropdown_bg_selector" >
        
        <TextView
            android:id="@+id/text"
            android:layout_width="250dp"
            android:layout_height="40dp"
            android:paddingLeft="10dp"
            android:text="文本文字"
            android:gravity="center_vertical"
            android:textSize="14sp"
            android:padding="5dp"
            android:singleLine="true" />
        <ImageView 
            android:id="@+id/btn"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_toRightOf="@+id/text"
            android:src="@drawable/dropdown"
            android:padding="5dp"
            android:layout_centerVertical="true"
            android:gravity="center"/>
    </RelativeLayout>
    复制代码

    下拉弹窗列表布局页面:dropdownlist_popupwindow.xml:

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
        <ListView
            android:id="@+id/listView"
            android:layout_width="280dp"
            android:layout_height="wrap_content"
            android:divider="#666666"
            android:dividerHeight="1dp"
             ></ListView>
    
    </LinearLayout>
    复制代码

    selector资源文件:

    dropdown_list_selector.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@color/dropdownlist_item_press"/>
        <item android:drawable="@color/dropdownlist_item"/>
    </selector>

    dropdown_bg_selector.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@color/dropdownlist_press"/>
        <item android:drawable="@color/dropdownlist_bg"/>
    </selector>

     

     

    展开全文
  • Android Spinner:下拉列表控件

    千次阅读 2019-07-14 21:25:03
    Spinner 提供下拉列表式的输入方式,该方法可以有效节省手机屏幕上的显示空间。 下面用一个简单的实例讲解 Spinner 的使用方法。在工程 WidgetDemo 的布局文件 main.xml 中添加一个 Button,用以启动 ...

    Spinner 提供下拉列表式的输入方式,该方法可以有效节省手机屏幕上的显示空间。

    下面用一个简单的实例讲解 Spinner 的使用方法。在工程 WidgetDemo 的布局文件 main.xml 中添加一个 Button,用以启动 SpinnerActivity。

    在 main.xml 中添加代码如下:

     
    1. <Button
    2. android:id="@+id/button4"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:text="SpinnerDemo"/>

    单击 Button 并启动 SpinnerActivity 的代码如下

     
    1. Button spinnerbtn = (Button) this.findViewById(R.id.button4);
    2. spinnerbtn.setOnClickListener(new View.OnClickListener() {
    3. @Override
    4. public void onClick(View v) {
    5. Intent intent = new Intent(MainActivity.this, SpinnerActivity.class);
    6. startActivity(intent);
    7. }
    8. });

    同时在 AndroidManifest.xml 文件中声明该 Activity:

    <activity android:name=".SpinnerActivity "></activity>

    SpinnerActivity 的运行效果如图 1 所示。

    Spinner的应用界面
    图 1  Spinner 的应用界面


    SpinnerActivity 使用的布局文件为 spiner.xml,其代码如下:

     
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"
    5. android:orientation="vertical">
    6. <TextView
    7. android:id="@+id/textView1"
    8. android:layout_width="wrap_content"
    9. android:layout_height="wrap_content"
    10. android:text="textview"/>
    11. <Spinner
    12. android:id="@+id/spinner1"
    13. android:layout_width="match_parent"
    14. android:layout_height="wrap_content"/>
    15. </LinearLayout>

    SpinnerActivity.java 文件的代码如下:

     
    1. package introduction.android.widgetDemo;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.List;
    5.  
    6. import android.app.Activity;
    7. import android.os.Bundle;
    8. import android.view.MotionEvent;
    9. import android.view.View;
    10. import android.widget.AdapterView;
    11. import android.widget.ArrayAdapter;
    12. import android.widget.Spinner;
    13. import android.widget.TextView;
    14.  
    15. public class SpinnerActivity extends Activity {
    16.  
    17. private List<String> list = new ArrayList<String>();
    18. private TextView textview;
    19. private Spinner spinnertext;
    20. private ArrayAdapter<String> adapter;
    21.  
    22. public void onCreate(Bundle savedlnstanceState) {
    23. super.onCreate(savedlnstanceState);
    24. setContentView(R.layout.spiner);
    25. //第一步:定义下拉列表内容
    26. list.add("A型");
    27. list.add("B型");
    28. list.add("O型");
    29. list.add("AB型");
    30. list.add("其他");
    31. textview = (TextView) findViewByld(R.id.textViewl);
    32. spinnertext = (Spinner) findViewByld(R.id.spinnerl);
    33. //第二步:为下拉列表定义一个适配器
    34. adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
    35. //第三步:设置下拉列表下拉时的菜单样式
    36. adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    37. //第四步:将适配器添加到下拉列表上
    38. spinnertext.setAdapter(adapter);
    39. //第五步:添加监听器,为下拉列表设置事件的响应
    40. spinnertext.setOnltemSelectedListener(new Spinner.OnltemSelectedListener() {
    41. public void onltemSelected(AdapterView<?> argO, View argl, int arg2, long arg3) {
    42. // TODO Auto-generated method stub
    43. /* 将所选spinnertext的值带入myTextView中*/
    44. textview.setText("你的血型是:" + adapter.getItem(arg2));
    45. /* 将 spinnertext 显示^*/
    46. argO.setVisibility(View.VISIBLE);
    47. }
    48.  
    49. public void onNothingSelected(AdapterView<?> argO) {
    50. // TODO Auto-generated method stub
    51. textview.setText("NONE");
    52. argO.setVisibility(View.VISIBLE);
    53. }
    54. });
    55.  
    56. //将spinnertext添加到OnTouchListener对内容选项触屏事件处理
    57. spinnertext.setOnTouchListener(new Spinner.OnTouchListener() {
    58. @Override
    59. public boolean onTouch(View v, MotionEvent event) {
    60. // TODO Auto-generated method stub
    61. // 将mySpinner隐藏
    62. v.setVisibility(View.INVISIBLE);
    63. Log.i("spinner", "Spinner Touch事件被触发!");
    64. return false;
    65. }
    66. });
    67.  
    68. //焦点改变事件处理
    69. spinnertext.setOnFocusChangeListener(new Spinner.OnFocusChangeListener() {
    70. public void onFocusChange(View v, boolean hasFocus) {
    71. // TODO Auto-generated method stub
    72. v.setVisibility(View.VISIBLE);
    73. Log.i("spinner", "Spinner FocusChange事件被触发!");
    74. }
    75. });
    76.  
    77. }
    78. }

    SpinnerActivity 通过 5 个步骤将 Spinner 初始化并进行事件处理,分别为:

    • 定义下拉列表的列表项内容 List<String>。
    • 为下拉列表 Spinner 定义一个适配器 ArrayAdapter<String> ,并与列表项内容相关联。
    • 使用 ArrayAdapter.setDropDownViewResource() 设置 Spinner 下拉列表在打开时的下拉菜单样式。
    • 使用 Spinner. setAdapter() 将适配器数据与 Spinner 关联起来。
    • 为 Spinner 添加事件监听器,进行事件处理。


    在本实例中,SpinnerActivity 在程序代码中动态建立了下拉列表每一项的内容。除此之外,还可以在 XML 文件中定义 Spinner 的下拉列表项,步骤如下。

    1)在 res/values 文件夹下新建 cities.xml 文件夹:

     
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <resources>
    3. <string-array name="city">
    4. <item>A型</item>
    5. <item>B型</item>
    6. <item>AB型</item>
    7. <item>O型</item>
    8. <item>其他</item>
    9. </string-array>
    10. </resources>

    2)在 SpinnerActivity.java 中初始化 Spinner:

     
    1. Spinner spinner=(Spinner)findViewById(R.id.spinner1);
    2. ArrayAdapter<CharSequence> adapter=ArrayAdapter.createF
    3. romResource(this, R.array.city,android.R.layout.simple_spinner_item);
    4. adapter.setDropDownViewResource
    5. (android.R.layout.simple_spinner_dropdown_item);
    6. spinner.setAdapter(adapter);
    展开全文
  • Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件 详细 代码下载:...
    技术:Android+java
     

    概述

    Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件

    详细

    一、概述

    Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求,

    比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类似下图这样的:

    31.gif

    32.png

    这个时候只有自己动手写一个了。其实实现起来不算很难,

    本文实现的方案是采用TextView +ImageView+PopupWindow的组合方案。

    先来看看我们的自己写的控件效果图吧:(源码在文章下面最后给出哈!)

    33.png

     

    二、自定义下拉列表框控件的实现

    1. 自定义控件用到的布局文件和资源:

    结果框的布局页面:dropdownlist_view.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:id="@+id/compound"
        android:background="@drawable/dropdown_bg_selector" >
        
        <TextView
            android:id="@+id/text"
            android:layout_width="250dp"
            android:layout_height="40dp"
            android:paddingLeft="10dp"
            android:text="文本文字"
            android:gravity="center_vertical"
            android:textSize="14sp"
            android:padding="5dp"
            android:singleLine="true" />
        <ImageView 
            android:id="@+id/btn"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_toRightOf="@+id/text"
            android:src="@drawable/dropdown"
            android:padding="5dp"
            android:layout_centerVertical="true"
            android:gravity="center"/>
    </RelativeLayout>

    下拉弹窗列表布局页面:dropdownlist_popupwindow.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
        <ListView
            android:id="@+id/listView"
            android:layout_width="280dp"
            android:layout_height="wrap_content"
            android:divider="#666666"
            android:dividerHeight="1dp"
             ></ListView>
    
    </LinearLayout>

     

    2. 自定义下拉列表框控件类的实现:

    我们采用了TextView+ImageView+PopupWindow的组合方案,所以我的自定义控件需要重写ViewGroup,由于我们已经知道了,布局方向为竖直方向,所以这里,

    我直接继承LinearLayout来写这个控件。具体实现代码如下:

    package com.czm.xcdropdownlistview;
    
    import java.util.ArrayList;
    
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.PopupWindow;
    import android.widget.TextView;
    
    @SuppressLint("NewApi")
    /**
     * 下拉列表框控件
     * @author caizhiming
     *
     */
    public class XCDropDownListView extends LinearLayout{
    
        private TextView editText;
        private ImageView imageView;
        private PopupWindow popupWindow = null;
        private ArrayList<String> dataList =  new ArrayList<String>();
        private View mView;
        public XCDropDownListView(Context context) {
            this(context,null);
            // TODO Auto-generated constructor stub
        }
        public XCDropDownListView(Context context, AttributeSet attrs) {
            this(context, attrs,0);
            // TODO Auto-generated constructor stub
        }
        public XCDropDownListView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            // TODO Auto-generated constructor stub
            initView();
        }
    
        public void initView(){
            String infServie = Context.LAYOUT_INFLATER_SERVICE;
            LayoutInflater layoutInflater;
            layoutInflater =  (LayoutInflater) getContext().getSystemService(infServie);
            View view  = layoutInflater.inflate(R.layout.dropdownlist_view, this,true);
            editText= (TextView)findViewById(R.id.text);
            imageView = (ImageView)findViewById(R.id.btn);
            this.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if(popupWindow == null ){
                        showPopWindow();
                    }else{
                        closePopWindow();
                    }
                }
            });
        }
        /**
         * 打开下拉列表弹窗
         */
        private void showPopWindow() {  
            // 加载popupWindow的布局文件  
            String infServie = Context.LAYOUT_INFLATER_SERVICE;
            LayoutInflater layoutInflater;
            layoutInflater =  (LayoutInflater) getContext().getSystemService(infServie);
            View contentView  = layoutInflater.inflate(R.layout.dropdownlist_popupwindow, null,false);
            ListView listView = (ListView)contentView.findViewById(R.id.listView);
            
            listView.setAdapter(new XCDropDownListAdapter(getContext(), dataList));
            popupWindow = new PopupWindow(contentView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
            popupWindow.setBackgroundDrawable(getResources().getDrawable(R.color.transparent));
            popupWindow.setOutsideTouchable(true);
            popupWindow.showAsDropDown(this);
        }
        /**
         * 关闭下拉列表弹窗
         */
        private void closePopWindow(){
            popupWindow.dismiss();
            popupWindow = null;
        }
        /**
         * 设置数据
         * @param list
         */
        public void setItemsData(ArrayList<String> list){
            dataList = list;
            editText.setText(list.get(0).toString());
        }
        /**
         * 数据适配器
         * @author caizhiming
         *
         */
        class XCDropDownListAdapter extends BaseAdapter{
    
            Context mContext;
            ArrayList<String> mData;
            LayoutInflater inflater;
            public XCDropDownListAdapter(Context ctx,ArrayList<String> data){
                mContext  = ctx;
                mData = data;
                inflater = LayoutInflater.from(mContext);
            }
            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return mData.size();
            }
    
            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return null;
            }
    
            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                // 自定义视图
                ListItemView listItemView = null;
                if (convertView == null) {
                    // 获取list_item布局文件的视图
                    convertView = inflater.inflate(R.layout.dropdown_list_item, null);
                    
                    listItemView = new ListItemView();
                    // 获取控件对象
                    listItemView.tv = (TextView) convertView
                            .findViewById(R.id.tv);
    
                    listItemView.layout = (LinearLayout) convertView.findViewById(R.id.layout_container);
                    // 设置控件集到convertView
                    convertView.setTag(listItemView);
                } else {
                    listItemView = (ListItemView) convertView.getTag();
                }
                
                // 设置数据
                listItemView.tv.setText(mData.get(position).toString());
                final String text = mData.get(position).toString();
                listItemView.layout.setOnClickListener(new OnClickListener() {
                    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        editText.setText(text);
                        closePopWindow();
                    }
                });
                return convertView;
            }
        
        }
        private static class ListItemView{
            TextView tv;
            LinearLayout layout;
        }
    
    }

    三、如何使用该自定义下拉列表框控件

    使用该控件和使用普通的自带的控件一样,在java代码中使用:

    XCDropDownListView dropDownListView;
        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            dropDownListView = (XCDropDownListView)findViewById(R.id.drop_down_list_view);
            ArrayList<String> list = new ArrayList<String>();        for(int i = 0;i< 6;i++){
                list.add("下拉列表项"+(i+1));
            }
            dropDownListView.setItemsData(list);
    
        }

     

    四、项目代码结构目录图

    34.jpg

    注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

    转载于:https://www.cnblogs.com/demodashi/p/10503299.html

    展开全文
  • 本文实例为大家分享了Android仿美团下拉菜单的实现代码,分类进行选择,供大家参考,具体内容如下 效果图 操作平台 AS2.0 第三方框架:butterknife build.gradle dependencies { compile fileTree(dir: 'libs', ...
  • android下拉列表

    2019-12-09 09:38:56
    Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类似下图这样的: 这个时候只有自己动手写一个了。...
  • using Android.App; using Android.OS; using Android.Widget; namespace SpinnerDemo { [Activity(Label = @string/ApplicationName, MainLauncher = true, Icon = @drawable/icon)] public class MainActivity :...
  • Android开发仿美团下拉列表菜单

    热门讨论 2015-03-12 15:18:52
    Android开发仿美团下拉列表菜单 工具类,只要传入特定的参数,既可以直接实现下来菜单
  • 主要介绍了Android RecyclerView实现下拉列表功能,下拉展开更多选项,具有一定的实用性,感兴趣的小伙伴们可以参考一下
  • Android下拉列表 采用组件设置的形式添加下拉列表 我们要先添加选项,也就是我们列表中要选择的东西。 定义在values文件夹中的strings.xml中. <string-array name="spinner_data"> <item>山西</...
  • 主要为大家详细介绍了android支持展开/收缩功能的列表控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Android下拉菜单控件

    2016-01-28 17:47:49
    Android下拉菜单控件(封装类)
  • 今天小编就为大家分享一篇关于Android使用Spinner控件实现下拉列表的案例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 扩展Android系统自带的AutoCompleteTextView控件,逐字提示,支持自定义类对象指定显示字段
  • 可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享。 简介: SwipeRefreshLayout组件只接受一个子组件:即需要刷新的那个组件...
  • Android Spinner下拉列表控件(下) SpinnerActivity 使用的布局文件为 spiner.xml,其代码如下: <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android=...
  • Android自定义下拉列表控件源码

    热门讨论 2015-04-14 15:18:03
    基于android 4.4 开发的 自定义android 下拉列表控件 源码,有需要的欢迎下载哈
  • 下拉列表demo

    2016-05-26 09:46:39
    直接导入android studio,组合控件下拉列表菜单demo,spinner和PopupWindow简单实现下拉菜单。
  • Android下拉选择控件

    2017-11-07 14:38:35
    一个下拉框控件,点击标题后会展开一个列表,点击选项后会改变标题并且可以更新页面
  • 该源代码展示了如何去实现下拉列表框的效果,控件Spinner
  • Android 下拉列表 可手动输入,精简过的,很简单,直接可以使用的.
  • Spinner 提供下拉列表式的输入方式,该方法可以有效节省手机屏幕上的显示空间。 下面用一个简单的实例讲解 Spinner 的使用方法。在工程 WidgetDemo 的布局文件 main.xml 中添加一个 Button,用以启动 ...
  • android原生的Spinner提供了下拉列表选项框,但在一些流行的APP中,原生的Spinner似乎不太受待见,而通常会有下图所示的下拉列表选项框: 初始化状态: 点击弹出下拉选择选项框: 选中后: 注意那个指示箭头,...
  • Android官方下拉选择控件Spinner

    万次阅读 2017-05-16 19:34:32
    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_w
  • 元素实现一个下拉列表,在其中每个下拉列表项使用表示即可。这是在Web开发中一个必不可少的交互性组件,而在Android中的对应实现就是Spinner。 方法一: 以资源方式,静态展示 Spinner 选项: <Spinner android...
  • 本篇文章主要介绍了Android自定义单选多选下拉列表的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了Android UI控件之Spinner下拉列表效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 元素实现一个下拉列表,在其中每个下拉列表项使用&lt;option&gt;表示即可。这是在Web开发中一个必不可少的交互性组件,而在Android中的对应实现就是Spinner。方法一:以资源方式,静态展示 Spinner 选项:&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,995
精华内容 5,198
关键字:

android下拉列表控件