编辑:原来问题是由于Material Spinner库造成的。当我使用AppCompatSpinner时,它工作正常。
背景:我正在摆弄this Material Spinner library。我扩展了ArrayAdapter,所以我可以添加一个额外的项目(我希望将来最终转换为“添加新项目”按钮)。
问题:适配器正确地扩充了额外的TextView。它可以很好地检测文本的宽度。问题是文本本身不会出现。
尝试:我推测问题可能是由于文字颜色所以我将主题更改为Light(希望文字颜色显示为黑色),但这不起作用。我也试过将setTextColor设置为Color.WHITE,但这也不起作用。然后我尝试使用colors.xml中的颜色,但当然它不起作用。我试图将Alpha设置为1,但是没有用。
不确定问题是什么,所以我会在下面发布我的代码。
自定义适配器
public class TaskArrayAdapter extends ArrayAdapter<Task> {
public static final int VIEW_TYPE_ADD_ITEM = -1;
private static final int OFFSET = 1; // # of other view types
private List<Task> mTasks;
public TaskArrayAdapter(Context context, int resource, List<Task> tasks) {
super(context, resource, tasks);
mTasks = tasks;
}
@Override
public int getViewTypeCount() {
//Workaround waiting for a Google correction (https://code.google.com/p/android/issues/detail?id=79011)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return 1;
}
return super.getViewTypeCount();
}
@Override
public int getItemViewType(int position) {
position = position - OFFSET;
return (position == -1) ? VIEW_TYPE_ADD_ITEM : super.getItemViewType(position);
}
@Override
public int getCount() {
return OFFSET + super.getCount();
}
@Override
public Task getItem(int position) {
position = position - OFFSET;
return (position == -1) ? null : super.getItem(position);
}
@Override
public long getItemId(int position) {
position = position - OFFSET;
return (position == -1) ? 0 : super.getItemId(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position) == VIEW_TYPE_ADD_ITEM) {
final LayoutInflater inflater = LayoutInflater.from(getContext());
final int resid = android.R.layout.simple_spinner_item;
final TextView textView = (TextView) inflater.inflate(resid, parent, false);
textView.setText("Testing Add New Item Here");
textView.setTextColor(Color.WHITE);
textView.setTag(VIEW_TYPE_ADD_ITEM);
return textView;
}
return super.getView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position) == VIEW_TYPE_ADD_ITEM) {
final LayoutInflater inflater = LayoutInflater.from(getContext());
final int resid = android.R.layout.simple_spinner_dropdown_item;
final TextView textView = (TextView) inflater.inflate(resid, parent, false);
textView.setText("Testing Add New Item Here");
textView.setTextColor(Color.WHITE);
textView.setTag(VIEW_TYPE_ADD_ITEM);
return textView;
}
return super.getDropDownView(position, convertView, parent);
}
}
设置适配器
public void showTasks(List<Task> tasks) {
final TaskArrayAdapter taskAdapter = new TaskArrayAdapter(this.getActivity(), android.R.layout.simple_spinner_item, tasks);
taskAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mTaskSpinner.setAdapter(taskAdapter);
}
微调:
<com.example.test.MaterialSpinner
android:id="@+id/task_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:textAlignment="center"
app:ms_multiline="false"
app:ms_enableFloatingLabel="false"
app:ms_enableErrorLabel="false"
app:ms_floatingLabelText="floating label"
app:ms_baseColor="@color/transparent_blue"
app:ms_highlightColor="@color/md_purple_400"
app:ms_errorColor="@color/error_color"
app:ms_thickness="2dp"
app:ms_alignLabels="false"/>
答案 0 :(得分:0)
我已经运行了你的代码,它对我来说很合适。
getView用于在单击微调器之前显示的视图 getDropdownView用于弹出窗口时重复的视图。
因此您可能不希望getView()
中的getItemViewType代码你能展示可能影响微调器的主题/风格吗?