zoukankan      html  css  js  c++  java
  • Spinner(列表选项框)

    Spinner(列表选项框)

    1.相关属性

    • android:dropDownHorizontalOffset:设置列表框的水平偏移距离
    • android:dropDownVerticalOffset:设置列表框的水平竖直距离
    • android:dropDownSelector:列表框被选中时的背景
    • android:dropDownWidth:设置下拉列表框的宽度
    • android:gravity:设置里面组件的对其方式
    • android:popupBackground:设置列表框的背景
    • android:prompt:设置对话框模式的列表框的提示信息(标题),只能够引用string.xml 中的资源id,而不能直接写字符串
    • android:spinnerMode:列表框的模式,有两个可选值: dialog:对话框风格的窗口 dropdown:下拉菜单风格的窗口(默认)
    • 可选属性:android:entries:使用数组资源设置下拉列表框的列表

      代码实现

      这里依然使用的我们前面的可复用BaseAdapter:

      第一个Spinner的数据源编写:

      res/values下编写一个:myarrays.xml的文件,内容如下:

      <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <string-array name="data">
              <item>英勇青铜</item>
              <item>不屈白银</item>
              <item>荣耀黄金</item>
              <item>华贵铂金</item>
              <item>璀璨钻石</item>
              <item>超凡大师</item>
              <item>最强王者</item>
          </string-array>
      </resources>

      接着是第二个Spinner的布局:item_spin_hero.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="horizontal"
          android:padding="5dp">
      
          <ImageView
              android:id="@+id/img_icon"
              android:layout_width="48dp"
              android:layout_height="48dp"
              android:src="@mipmap/iv_lol_icon1" />
      
          <TextView
              android:id="@+id/txt_name"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginLeft="10dp"
              android:layout_marginTop="15dp"
              android:text="德玛西亚"
              android:textSize="16sp" />
      
      </LinearLayout>

      再接着编写一个Entitiy实体类:Hero.java

      /**
       * Created by Jay on 2015/9/24 0024.
       */
      public class Hero {
      
          private int hIcon;
          private String hName;
      
          public Hero() {
          }
      
          public Hero(int hIcon, String hName) {
              this.hIcon = hIcon;
              this.hName = hName;
          }
      
          public int gethIcon() {
              return hIcon;
          }
      
          public String gethName() {
              return hName;
          }
      
          public void sethIcon(int hIcon) {
              this.hIcon = hIcon;
          }
      
          public void sethName(String hName) {
              this.hName = hName;
          }
      }

      最后是MainActivity的布局与Java代码部分:

      布局文件:activity_main.xml

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical"
          android:padding="5dp"
          tools:context=".MainActivity">
          
          <TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="选择您的排位分段"
              android:textColor="#44BDED"
              android:textSize="18sp" />
      
          <Spinner
              android:id="@+id/spin_one"
              android:layout_width="100dp"
              android:layout_height="64dp"
              android:entries="@array/data"
              android:prompt="@string/spin_title"
              android:spinnerMode="dialog" />
      
          <TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginTop="10dp"
              android:text="选择你的拿手英雄~"
              android:textColor="#F5684A"
              android:textSize="18sp" />
      
          <Spinner
              android:id="@+id/spin_two"
              android:layout_width="wrap_content"
              android:layout_height="64dp" />
      
      </LinearLayout>

      MainActivity.java

      public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
      
          private Spinner spin_one;
          private Spinner spin_two;
          private Context mContext;
          //判断是否为刚进去时触发onItemSelected的标志
          private boolean one_selected = false;
          private boolean two_selected = false;
          private ArrayList<Hero> mData = null;
          private BaseAdapter myAdadpter = null;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              mContext = MainActivity.this;
              mData = new ArrayList<Hero>();
              bindViews();
          }
      
      
          private void bindViews() {
              spin_one = (Spinner) findViewById(R.id.spin_one);
              spin_two = (Spinner) findViewById(R.id.spin_two);
      
              mData.add(new Hero(R.mipmap.iv_lol_icon1,"迅捷斥候:提莫(Teemo)"));
              mData.add(new Hero(R.mipmap.iv_lol_icon2,"诺克萨斯之手:德莱厄斯(Darius)"));
              mData.add(new Hero(R.mipmap.iv_lol_icon3,"无极剑圣:易(Yi)"));
              mData.add(new Hero(R.mipmap.iv_lol_icon4,"德莱厄斯:德莱文(Draven)"));
              mData.add(new Hero(R.mipmap.iv_lol_icon5,"德邦总管:赵信(XinZhao)"));
              mData.add(new Hero(R.mipmap.iv_lol_icon6,"狂战士:奥拉夫(Olaf)"));
      
              myAdadpter = new MyAdapter<Hero>(mData,R.layout.item_spin_hero) {
                  @Override
                  public void bindView(ViewHolder holder, Hero obj) {
                      holder.setImageResource(R.id.img_icon,obj.gethIcon());
                      holder.setText(R.id.txt_name, obj.gethName());
                  }
              };
              spin_two.setAdapter(myAdadpter);
              spin_one.setOnItemSelectedListener(this);
              spin_two.setOnItemSelectedListener(this);
      
          }
      
      
          @Override
          public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
              switch (parent.getId()){
                  case R.id.spin_one:
                      if(one_selected){
                          Toast.makeText(mContext,"您的分段是~:" + parent.getItemAtPosition(position).toString(),
                                  Toast.LENGTH_SHORT).show();
                      }else one_selected = true;
                      break;
                  case R.id.spin_two:
                      if(two_selected){
                          TextView txt_name = (TextView) view.findViewById(R.id.txt_name);
                          Toast.makeText(mContext,"您选择的英雄是~:" + txt_name.getText().toString(),
                                  Toast.LENGTH_SHORT).show();
                      }else two_selected = true;
                      break;
              }
          }
      
          @Override
          public void onNothingSelected(AdapterView<?> parent) {}}

      另外关于Spinner的OnItemSelectedListener,以及如何获得选中项的值,就自己看上面的 代码啦~


      3.代码示例下载:

      SpinnerDemo.zip项目

  • 相关阅读:
    Hdu 3564 Another LIS 线段树+LIS
    利用ESLINT进行js 语法检查,以及局部安装时遇到的一些坑
    操作系统杂谈
    算法杂谈
    前端杂谈
    操作系统复习
    vue之——从彩笔的进步之路
    一丢丢学习之webpack4 + Vue单文件组件的应用
    计蒜客 2017复赛 百度地图导航
    electron打包之真的恶心
  • 原文地址:https://www.cnblogs.com/feng747/p/14910216.html
Copyright © 2011-2022 走看看