Я знаю, что есть много сообщений по этому поводу, но ни одна из них, похоже, не соответствует / не решает мою проблему.У меня проблема в том, что как ширина самого счетчика, так и ширина выпадающего меню не являются шириной самой большой строки в пределах.
Я могу сделать фактическую ширину счетчика меньше нажесткое кодирование android:layout_width
, например, 20dp, но это не меняет ширину выпадающего меню.Также пробовал жестко кодировать от android:layout_width
до 20dp, но он все еще широко распространён.
Инстанцирование Spinner:
<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" />
btw, единственный режим spinner, который я могу использовать, это '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 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;
}
}
Также может быть важно, что спиннер является частью всплывающего окна, я попытаюсь сделать то же самое без всплывающего окна, но мне бы очень хотелось понять, почему это не работает.
Вот как это выглядит:
При написании этого я заметил одну вещь: если удалить строку android:padding
, я получураскрывающийся тег (назад), и кажется, что он имеет размер в соответствии с самой длинной строкой в массиве.Есть идеи о том, почему?
Но здесь важно то, что я не могу влиять на ширину раскрывающегося вида, он всегда выглядит так, то есть немного шире, чем всплывающее окно, но определенно шире, чемсамая длинная строкаЭто верно для всех 4 блесен и любых опций, которые я пробую в блесне XML.
Также не уверен, почему я получаю эту маленькую белую полоску сверхуи снизу.
Любые предложения о том, что я мог бы попробовать?Я думаю, что попробовал все предложения во многих темах, которые появляются, когда я ищу это.