主要参考博客Android 实现自定义Spinner

1、Spinner样式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#defafd"
    >

    <ListView android:id="@+id/spinner_search_expand_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:cacheColorHint="@null"
        android:scrollbars="none"
        android:divider="@android:drawable/divider_horizontal_bright"/>

</LinearLayout>

2、需要使用的ListView的Item的样式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="10dp"
    android:padding="10dp">

        <TextView
            android:id="@+id/search_expand_item_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"/>

        <TextView
            android:id="@+id/search_expand_item"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_vertical"
            android:padding="10dp"
            android:layout_weight="1"
            android:textSize="18sp" />

</LinearLayout>

3、ListView的Adapter,这里是使用了两个Layout来配置Adapter

    public View getView(int position, View view, ViewGroup viewGroup) {
        SearchConditionListItem item = getItem(position);

        if (view == null) {
            view = View.inflate(mcontext, layout, null);
            searchConditionTxt = (TextView) view.findViewById(R.id.search_expand_item);
            searchConditionTxtId=(TextView)view.findViewById(R.id.search_expand_item_id);
            //searchConditionItemCheck=(CheckBox)view.findViewById(R.id.search_expand_item_check);
            searchConditionDisplay=(TextView)view.findViewById(android.R.id.text1);
        }

        if(searchConditionTxt != null) {
            searchConditionTxt.setText(item.getExpandName());
        }
        if(searchConditionTxtId != null) {
            searchConditionTxtId.setText(item.getExpandid());
        }

        if(searchConditionDisplay != null){
            searchConditionDisplay.setText(item.getExpandName());
        }
        return view;
    }

4、自定义Dialog

package com.dr.app.drseamoniter.dialog;

import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;

/**
 * Created by Administrator on 15-9-11.
 */
public class SearchSelectDialog extends AlertDialog{

    public SearchSelectDialog(Context context, int theme) {
        super(context, theme);
    }

    public SearchSelectDialog(Context context) {
        super(context);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

5、自定义的Spinner

    @Override
    public boolean performClick() {
        Context context = getContext();

        final LayoutInflater inflater = LayoutInflater.from(getContext());
        //弹出框视图
        final View view = inflater.inflate(R.layout.spinner_search_condition, null);
        //视图中的List
        final ListView listview = (ListView) view.findViewById(R.id.spinner_search_expand_list);

//        btnOK = (Button) view.findViewById(R.id.search_condition_btnOK);
//        btnCancel = (Button) view.findViewById(R.id.search_condition_btnCancel);
//
//        btnOK.setOnClickListener(new MyOKCancelClickListener());
//        btnCancel.setOnClickListener(new MyOKCancelClickListener());

        //根据ArrayList<>数据源 确定Adapter
        adapters = new SearchConditionListAdapter(context, getList());
        //listview绑定Adapter
        listview.setAdapter(adapters);
        //监听ItemClick
        listview.setOnItemClickListener(this);

        //设置dialog
        dialog = new SearchSelectDialog(context, R.style.dialog);//创建Dialog并设置样式主题

        LayoutParams params = new LayoutParams(650, LayoutParams.FILL_PARENT);
        dialog.setCanceledOnTouchOutside(true);// 设置点击Dialog外部任意区域关闭Dialog
        dialog.show();
        dialog.addContentView(view, params);
        return true;
    }

6、Activity中使用Spinner

private void setAreaConditionSpinner(){
        mareaExpandList =new ArrayList<SearchConditionListItem>();
        SearchConditionListItem item =new SearchConditionListItem("1",牧场");
        mareaExpandList.add(item);
        item=new SearchConditionListItem("2","陆地");
        mareaExpandList.add(item);

        mareaCondition.setList(mareaExpandList);
        mareaConditionAdapter = new SearchConditionListAdapter(this
                , mareaExpandList,android.R.layout.simple_spinner_item);
        mareaCondition.setAdapter(mareaConditionAdapter);
        mareaCondition.setOnItemSelectedListener(new MyAreaSpinnerItemSelectedListener());
        mareaCondition.setPrompt("请选择区域");
    }

    private void setDevConditionSpinner(String areaid){
        mdevExpandList = new ArrayList<SearchConditionListItem>();
        SearchConditionListItem item = new SearchConditionListItem("11","底层");
        mdevExpandList.add(item);
        item=new SearchConditionListItem("12","底层2");
        mdevExpandList.add(item);

        mdevExpandList.add(item);

        mdevCondition.setList(mdevExpandList);
        mdevConditionAdapter = new SearchConditionListAdapter(this
                , mdevExpandList,android.R.layout.simple_spinner_item);
        mdevCondition.setAdapter(mdevConditionAdapter);
        mareaCondition.setPrompt("请选择设备");
    }

Android --Spinner--自定义Spinner的更多相关文章

  1. Android 的自定义Spinner组件实现方式

    一.Android的API方式默认实现的方式 1.layout下编辑main_activity.xml <RelativeLayout xmlns:android="http://sc ...

  2. Android UI自定义Spinner下拉框(用popuwindow实现)-转

    定义出第一个图片的布局和弹出框(一个listView)的布局,,这里就不在多说了~ListView需要自己定义一个MyspinnerAdapter~做好这些准备之后,就是弹出框的实现了~  prote ...

  3. [置顶] xamarin android自定义spinner

    以前弄的一个下拉框时自带的spinner,感觉好丑,实际效果实在满足不了基本的UI界面要求,还是自己动手丰衣足食,看了网上关于android中自定义spinner的文章,感觉实现原理还是比较简单,所以 ...

  4. Android 自定义Spinner和其下拉窗口

    : 自定义Spinner其实包括两个部分: 第一部分是用来打开下拉列表的按钮,如图,这个绿色背景直接设置Spinner的背景就行,素材文件如下: 里面的文字需要注意下,Spinner控件没有直接修改文 ...

  5. (转)Android 自定义 spinner (背景、字体颜色)

    Android 自定义 spinner (背景.字体颜色) (2012-07-04 17:04:44)   1.准备两张图片,并做好9.png   2.在drawable中定义spinner_sele ...

  6. Android 自定义 spinner (背景、字体颜色)

    转自:http://blog.sina.com.cn/s/blog_3e333c4a010151cj.html 1.准备两张图片,并做好9.png   2.在drawable中定义spinner_se ...

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

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

  8. [Android实例] 有关spinner 的item问题 谁能给解答下??

    [Android实例] 有关spinner 的item问题 (更多Android问题解决,Android开发讨论 请访问:http://www.eoeandroid.com/forum.php)

  9. 一个背景图实现自定义spinner样式

    如下界面:由一个spinner两个EditText一个Button实现,为了保持界面的统一性,需要把默认的spinner样式改成类似下面的样式. xml文件布局如下图 这里用一个LinerLayout ...

随机推荐

  1. IIS服务器下301跳转是怎么样实现的?

    301跳转的用法很多,对于一名SEO来说,301转向是必须掌握的本领,但是对于301转向而言,许多人都并不清楚,301跳转以后,需不需要对原网站进行优化,再次提及一边301跳转的定义. 所谓301跳转 ...

  2. 一些开发遇到的"小问题",你能答对多少?

    我会把问题先写在前面,答案用白色字体写在后面.所以用鼠标选择文本就可以看到答案啦. 调用await后因为切换了线程环境(这种说法可能不严谨,但我只能想到这种说法),httpcontext会为null. ...

  3. LeetCode | Unique Paths【摘】

    A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below). The ...

  4. java数组排序问题:array.sort()是从小到大排序,那么如何从大到小排序?

    别告诉我从i=a.length开始打印然后i--!因为数组没变啊,只是打印顺序变了.有木有啥别的方法,除了冒泡插入选择.. nteger [] array=new Integer[]{1,2,3,4, ...

  5. PHP+jQuery 注册模块开发

    /* ******* 环境: Apache2.2.8 + PHP5.2.6 + MySQL5.0.51b + jQuery-1.8.3.min.js ************** 其他组件:Zend_ ...

  6. userDefaults

    // // RootViewController.m #import "RootViewController.h" @interface RootViewController () ...

  7. JiaThis WordPress分享插件安装全攻略

    WordPress 是一个功能非常强大的博客系统,插件众多,易于扩充功能.安装和使用都非常方便.目前 WordPress 已经成为主流的 Blog 搭建平台.按照下面的方法,只需简单几步,就可轻松地将 ...

  8. C#编程总结(四)多线程应用(进度条的编程问题)——转自http://www.cnblogs.com/yank/p/3232955.html

    多线程应用 多线程应用很广泛,简单总结了一下: 1)不阻断主线程,实现即时响应,由后台线程完成特定操作2)多个线程,完成同类任务,提高并发性能3)一个任务有多个独立的步骤,多个线程并发执行各子任务,提 ...

  9. jbpm node signal

    task-node (任务节点) 其性质和node节点一样,在没有task的时候,也都是自动执行,不等待.task-node被归类为一个等待节点,是指在task-node中的task列表中的task没 ...

  10. Apache Camel

    Apache Camel 1 import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; i ...