我知道有很多关于此的帖子,但是似乎都没有匹配/解决我的问题。我遇到的问题是旋转器本身的宽度和下拉菜单的宽度都不是其中最大字符串的宽度。
我可以通过将android:layout_width
硬编码为例如来强制减小微调框的实际宽度。 20dp,但这不会更改下拉宽度。还尝试将android:layout_width
硬编码为20dp,但宽度仍然宽泛。
微调器实例为:
<Spinner
android:id="@+id/spnTaskEditDueDateHour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:dropDownWidth="wrap_content"
android:padding="1dp"
android:entries="@array/hours"
android:layout_toRightOf="@id/txtTaskEditDueDateLabel"
android:backgroundTint="@color/colorBlue4"
android:spinnerMode="dialog" />
顺便说一句,我唯一可以使用的spinnerMode是“ dialog”,下拉菜单总是会导致运行失败(如果有建议的话)
我认为Custom Spinner实现是非常标准的:
//**********************************************************************************************
//*** Custom Adapter for Due Date Spinners
//**********************************************************************************************
public class CustomSpinnerAdapter extends BaseAdapter {
Context context;
ArrayList<String> SheetNames;
LayoutInflater inflter;
public CustomSpinnerAdapter(Context applicationContext, ArrayList<String> SheetNames) {
this.context = applicationContext;
this.SheetNames = SheetNames;
inflter = (LayoutInflater.from(applicationContext));
}
@Override
public int getCount() {
return SheetNames.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
public int getPosition(String item) {
return SheetNames.indexOf(item);
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
view = inflter.inflate(R.layout.task_due_date_custom_spinner_item, null);
TextView names = view.findViewById(R.id.txtTaskDueDateCustomSpinnerItem);
names.setText(SheetNames.get(position));
return view;
}
@Override
public View getDropDownView(int position, View view, ViewGroup viewGroup) {
view = inflter.inflate(R.layout.task_due_date_custom_spinner_item, null);
TextView names = view.findViewById(R.id.txtTaskDueDateCustomSpinnerItem);
names.setText(SheetNames.get(position));
return view;
}
}
微调器xml也很简单:
//**********************************************************************************************
//*** Custom Adapter for Due Date Spinners
//**********************************************************************************************
public class CustomSpinnerAdapter extends BaseAdapter {
Context context;
ArrayList<String> SheetNames;
LayoutInflater inflter;
public CustomSpinnerAdapter(Context applicationContext, ArrayList<String> SheetNames) {
this.context = applicationContext;
this.SheetNames = SheetNames;
inflter = (LayoutInflater.from(applicationContext));
}
@Override
public int getCount() {
return SheetNames.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
public int getPosition(String item) {
return SheetNames.indexOf(item);
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
view = inflter.inflate(R.layout.task_due_date_custom_spinner_item, null);
TextView names = view.findViewById(R.id.txtTaskDueDateCustomSpinnerItem);
names.setText(SheetNames.get(position));
return view;
}
@Override
public View getDropDownView(int position, View view, ViewGroup viewGroup) {
view = inflter.inflate(R.layout.task_due_date_custom_spinner_item, null);
TextView names = view.findViewById(R.id.txtTaskDueDateCustomSpinnerItem);
names.setText(SheetNames.get(position));
return view;
}
}
旋转器是弹出窗口的一部分可能也很重要,我将尝试不使用弹出窗口执行相同的操作,但是我真的很想了解为什么这不起作用。
外观如下:
在撰写本文时,我注意到一件事,如果删除android:padding
行,则会得到下拉标签(后退),并且它似乎根据数组中最长的字符串来调整大小。知道为什么吗?
但是这里重要的是我不能影响下拉视图的宽度,它总是这样显示,即比弹出窗口宽一点,但肯定比最长的字符串宽。对于所有4个微调框以及在微调框xml中尝试的任何选项,都是如此。
也不确定为什么我在顶部和底部都得到了一条白色的小条子。
关于我可以尝试的任何建议吗?我想我尝试了搜索时弹出的许多线程中的所有建议。