微调框的第一个元素高度未设置为零

时间:2019-04-30 13:29:48

标签: android height spinner dropdown

我想使微调器带有提示,遵循一种解决方案,我正在将下拉列表高度的第一个元素设置为0,但是它被忽略并且第一个元素仍然可见并且高度> 0。 代码:

        ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, R.layout.spinner_item) {

            @Override
            public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                View v =  super.getDropDownView(position, convertView, parent);
                ViewGroup.LayoutParams lp = v.getLayoutParams();
                v.setVisibility(View.VISIBLE);
                if (position == 0) {
                    lp.height = 0; //doesn't affect anything
                } else {
                    lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
                }
                v.setLayoutParams(lp);
                return v;
            }

            @Override
            public boolean isEnabled(int position){
                return position != 0;
            }
        };
        spinnerAdapter.add(getHint());
        spinnerAdapter.addAll(getItems());
        spinnerView.setAdapter(spinnerAdapter);

当我尝试设置height = 1时,它可以工作并且项目几乎消失了,但这并不是它应该工作的方式。 有没有可能发生这种情况的原因?有什么方法可以将高度精确设置为零吗?

1 个答案:

答案 0 :(得分:0)

为微调器创建自定义适配器,并像这样更改代码,同时添加位置控制

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        if(convertView == null){
            convertView = flater.inflate(R.layout.list_itemslayout,parent, false);
        }
        RowItem rowItem = getItem(position);
        TextView txtTitle = (TextView) convertView.findViewById(R.id.title);
        txtTitle.setText(rowItem.getTitle());
        ImageView imageView = (ImageView) convertView.findViewById(R.id.icon);
        imageView.setImageResource(rowItem.getImageId());
        return convertView;
    }