Android原生 Spinner下拉选择框 使用中遇到的问题和使用技巧

问题一:

下拉框遮挡Spinner显示框

解决办法:

android:spinnerMode=”dropdown” 
该行代码就是设置下拉框弹出位置的属性,分为:dropdown(显示框下面显示)和dialog(下拉列表弹出形式)。 
有的手机即使这样设置后取到了一定的效果。但是会出现一种情况:下拉框遮挡住了Spinner的显示框,这是因为有一个属性: 
android:overlapAnchor=”false” 。 
这个属性默认是true。改为false即可。但是不知道为什么这个属性在代码提示中是没有的。所以记录下来。希望对自己和各位有帮助。

 问题二:

  下拉框的宽度 和Spinner显示框的宽度不一致

解决办法:

暂无,网上无解决办法

问题三:

下拉框右侧的下拉箭头  在展示下拉框时,无法变成上拉手回箭头,也无法替换

 解决办法:

 暂无  网上没有找到解决办法

问题四:

  spinner显示框的默认选择第一个选项,无法设置setHint();

 解决办法:

  暂无   也没发现有人找到解决办法

四种Android 自带的item使用样式

系统提供的样式如下

simple_spinner_dropdown_item(列表-间距较高比较好看)

simple_spinner_item(列表-间距紧凑不好看)

simple_list_item_checked(复选框-选中的有绿沟)

simple_list_item_single_choice (单选按钮)

 

综上所述: 如果对UI要求不严可以采用这个控件,否者还是自己写一个组合控件,替换掉它!

如果你不能用这个,又不想自己写组合控件,那就用这个吧,完美解决你的需求:

https://github.com/wolfking0608/nice-spinner

实例代码:

https://blog.csdn.net/duoduo_11011/article/details/78922804

源代码:

1.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:background="@color/white"
    android:orientation="vertical">
    
   <include
       android:id="@+id/title"
       layout="@layout/page_common_text_title_layout"
       android:layout_width="fill_parent"
       android:layout_height="@dimen/dp_48"/>
    
      <View
          android:layout_width="match_parent"
          android:layout_height="@dimen/dp_0_6"
          android:background="@color/bg_all_port_box_no_color"/>
    
    <TextView
        android:id="@+id/spinnerText"
        android:layout_width="fill_parent"
        android:layout_height="@dimen/dp_30"/>
    
    
    <RelativeLayout
    
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_40"
        android:layout_margin="@dimen/dp_12"
        android:background="@drawable/bg_txt_stroke_search">
      <!--<TextView-->
        <!--android:background="@drawable/bg_txt_stroke_search"-->
        <!--android:id="@+id/spinnerText"-->
        <!--android:layout_width="@dimen/dp_300"-->
        <!--android:layout_height="match_parent"-->
        <!--android:gravity="center_vertical"-->
        <!--android:hint="请选择血型"/>-->
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:dropDownWidth="match_parent"
            android:overlapAnchor="false"
            android:spinnerMode="dropdown"
           >
            
      
   </Spinner>
   </RelativeLayout>


   
   
</LinearLayout>

Activity:

public class CityEnterAppointActivity extends BaseMVPActivity implements View.OnClickListener {

    private static final String[] m = {"A型", "B型", "O型", "AB型", "其他"};
    private RelativeLayout       mTitleLayout;
    private ImageView            mBackImage;
    private TextView             mTitleText;
    private TextView             mMenuText;
    private Spinner              mSpinner;
    private ArrayAdapter<String> adapter;

    private TextView view;

    @Override
    protected AbstractPresenter getPresenter() {
        return null;
    }

    @Override
    protected int getLayoutId() {
        return R.layout.page_activity_city_enter_appoint;
    }

    @Override
    protected void initView(@Nullable Bundle savedInstanceState) {

        mTitleLayout = (RelativeLayout) findViewById(R.id.title_layout);
        mBackImage = (ImageView) findViewById(R.id.back_image);
        mTitleText = (TextView) findViewById(R.id.title_text);
        mMenuText = (TextView) findViewById(R.id.menu_text);

        mSpinner = (Spinner) findViewById(R.id.spinner);
        view = (TextView) findViewById(R.id.spinnerText);
    }

    @Override
    protected void initTitle() {

        updateTitleColor(mTitleText);
        updateTitleLayoutColor(mTitleLayout);
        mTitleText.setText("市入指派");

        mMenuText.setVisibility(View.GONE);
    }

    @Override
    protected void initData() {
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, m);
        //设置下拉列表的风格
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);//simple_list_item_checked

        //        int dp2px = Utils.dp2px(mContext, 40);
        //        mSpinner.setDropDownVerticalOffset(dp2px); //这个是第二种方式,防止下拉框遮挡显示框的办法

        //设置下拉选择框的背景
        mSpinner.setPopupBackgroundDrawable(getResources().getDrawable(R.drawable.bg_txt_stroke_search));

        //将adapter 添加到spinner中
        mSpinner.setAdapter(adapter);

        //添加事件Spinner事件监听
        mSpinner.setOnItemSelectedListener(new SpinnerSelectedListener());



    }

    @Override
    protected void initEvent() {
        mBackImage.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.back_image) {
            finish();
        }


    }

    //使用数组形式操作
    class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener {

        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            view.setText(m[arg2]);
            String str = (String) mSpinner.getItemAtPosition(arg2);
            ToastUtil.show(mContext, str);

        }

        public void onNothingSelected(AdapterView<?> arg0) {
        }
    }
}

 效果图:

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值