一个心机Boy自定义安卓(Android)可编辑下拉框(Spinner)的历程

上面的题目看上去如此复杂,emmm,下面介绍心机Boy自定义可编辑下拉框的方法。

就是偷懒不去自己写一个Spinner,想出来的。

首先在现在的安卓版本中,不支持Spinner可以编辑,但是经常都要用到,又懒得写多的代码。

这里就是将Spinner的功能都用起来,再加上editview的功能,将Spinner隐藏 用 editview+imageview来代替,将需要Spinner的功能的就都绑到我们的两个控件上,这样就可以既可以编辑又可以下拉选择

下面是主要代码说明 但是需要注意一些小的问题 比如说我们新输入的文字要加入Spinner时就要多写几行代码

第一步 剩下的面包不要扔,裹上鸡蛋液。。。

第二步 在layout中写好我们的布局文件

        <LinearLayout
                android:layout_width="230dp"
                android:layout_height="wrap_content">
                <!--这里将Spinner灭口,隐藏 我是设置高度和宽度-->
                <Spinner
                    android:id="@+id/spinner"
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:visibility="invisible"
                    ></Spinner>
                <EditText
                    android:id="@+id/spinner_edit"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:textSize="15sp"
                    android:height="33dp" />
                <ImageView
                    android:id="@+id/spinner_but"
                    android:layout_width="35dp"
                    android:layout_height="35dp"
                    android:layout_gravity="center_vertical"
                    android:scaleType="fitXY"
                    android:src="@drawable/pull_down"/>
            </LinearLayout>

具体效果图如下: "IP:"后的就是EditView和ImageView Spinner被隐藏了

第三步 写一个原生的Spinner,将适配器什么的都绑定好,如下

public class LoginPage extends Activity {
    EditText spinnerEdit;//伪装者输入框========
    ImageView spinnerBut;//伪装者图片按钮========
    Spinner spinner;
    
    SimpleAdapter simpleAdapter;
    List<String> IPListString=new ArrayList<>();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //第一步****************
        //初始化
        spinner = findViewById(R.id.spinner);
        spinnerEdit=findViewById(R.id.spinner_edit);
        spinnerBut=findViewById(R.id.spinner_but);
        
        IPListString//获取数据源到List中
        
    }

    @Override
    protected void onStart() {
        super.onStart();
        
        //第二步 看下面的方法
        SetAdapter();//设置适配器
        
        //第三步****************
        //这里将我们自己的ImageButton或者ImageView的点击事件与Spinner的绑定
        spinnerBut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                spinner.performClick();
            }
        });

    }

    
//需要先设置IPListString
    private void SetAdapter(){
        /**
         *这里我们可以将自己的数据构造成适配器需要的样子
        */
        simpleAdapter = new SimpleAdapter(this, IPList, R.layout.spinner_up_item, new String[]{"IP"}, new int[]{R.id.ipTextV});
        simpleAdapter.setDropDownViewResource(R.layout.spinner_down__item);
        spinner.setAdapter(simpleAdapter);

        //第二步中最重要的部分*****************
        //将我们每次点击的内容放到TextView中
        spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                spinnerEdit.setText(IPListString.get(position););
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

}

猜你喜欢

转载自blog.csdn.net/qq_34131399/article/details/86159386