Ширина выпадающего меню CustomSpinner слишком велика - PullRequest
0 голосов
/ 26 августа 2018

Я знаю, что есть много сообщений по этому поводу, но ни одна из них, похоже, не соответствует / не решает мою проблему.У меня проблема в том, что как ширина самого счетчика, так и ширина выпадающего меню не являются шириной самой большой строки в пределах.

Я могу сделать фактическую ширину счетчика меньше нажесткое кодирование 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;
    }
}

Также может быть важно, что спиннер является частью всплывающего окна, я попытаюсь сделать то же самое без всплывающего окна, но мне бы очень хотелось понять, почему это не работает.

Вот как это выглядит:

enter image description here

При написании этого я заметил одну вещь: если удалить строку android:padding, я получураскрывающийся тег (назад), и кажется, что он имеет размер в соответствии с самой длинной строкой в ​​массиве.Есть идеи о том, почему?

Но здесь важно то, что я не могу влиять на ширину раскрывающегося вида, он всегда выглядит так, то есть немного шире, чем всплывающее окно, но определенно шире, чемсамая длинная строкаЭто верно для всех 4 блесен и любых опций, которые я пробую в блесне XML.

enter image description here

Также не уверен, почему я получаю эту маленькую белую полоску сверхуи снизу.

Любые предложения о том, что я мог бы попробовать?Я думаю, что попробовал все предложения во многих темах, которые появляются, когда я ищу это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...