修改Numberpicker Android中的所选项目

时间:2016-05-23 15:22:51

标签: android xml listview numberpicker

我正试图找到一些方法来实现下一种观点。目前我尝试创建一个Listview,只是将所选项目做大。但我无法让所选项目始终位于我的视图中间。所以现在我想用一个数字选择器来获得它。

但我没有找到任何方法来隐藏分隔栏,并使所选项目与视图的其余部分不同。这个想法就像在底部图像中那样。

enter image description here

4 个答案:

答案 0 :(得分:3)

我认为ListView可能比NumberPicker更可配置。

你可以做的是使用不同的行布局,如果它是中间的或其他的,所以你的getView(...)方法将如下所示:

public View getView(int position, View convertView, ViewGroup parent) {
    if (position == 1) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.focused_layout, parent, false);
        // Do whatever with this view

    } else {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.not_focused_layout, parent, false);
        // Do whatever with this view

    }

    return convertView;
}

这样您就可以用XML和代码自定义两种布局。如果你想要特殊的"哟可以改变条件。任何其他方式的项目。

答案 1 :(得分:3)

以下是具有自定义显示值的数字选择器:

 final NumberPicker aNumberPicker = new NumberPicker(context);
    List<Integer> ids = getIds();
    aNumberPicker.setMaxValue(ids.size()-1);
    aNumberPicker.setMinValue(0);
    mDisplayedIds = new String[ids.size()];
    for (int i = 0; i < ids.size(); i++) {
        mDisplayedIds[i] = "Nombre"+String.valueOf(ids.get(i)) ;
    }
    aNumberPicker.setDisplayedValues(mDisplayedIds);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(50, 50);
    RelativeLayout.LayoutParams numPickerParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    numPickerParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    relativeLayout.setLayoutParams(params);
    relativeLayout.addView(aNumberPicker, numPickerParams);

另外,您可以查看一些开源库,例如AndroidPicker

答案 2 :(得分:3)

您可以使用RecyclerView实现此功能,其中一个支持正常项目,一个支持选定项目。

在RecyclerView适配器内

private static int SELECTED_ITEM_POSITION = 2;
private static int NORMAL_ITEM = 1;
private static int SELECTED_ITEM = 2;

@Override
public int getItemViewType(int position)
{
    if(position == SELECTED_ITEM_POSITION)
        return SELECTED_ITEM;
    else
        return NORMAL_ITEM;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
    if(viewType == SELECTED_ITEM)
    {
        YourSelectedViewHolder selectedViewHolder = (YourSelectedViewHolder)layoutInflater.inflate(R.layout.selected_item_layout, parent, false);
        return selectedViewHolder;
    }
    else //viewType == NORMAL_ITEM
    {
        YourNormalViewHolder normalViewHolder = (YourNormalViewHolder)layoutInflater.inflate(R.layout.normal_item_layout, parent, false);
        return normalViewHolder;
    }
}

答案 3 :(得分:2)

我想在我的一个项目中实现非常相似的效果,我希望我的回收站视图的中间项更加突出。 在我的情况下,该项目仅被z翻译以给出焦点的印象,但结果与您所描述的非常相似。 我会在这里发布我的代码,以防它可以帮助你朝着正确的方向前进:

    #ifndef __kernels_H
#define __kernels_H

void callCUDAKernel(cudaArray *readCudaArray, cudaArray *viewCudaArray);

#endif