Как автоматически (при вводе) расширить и уменьшить столбцы EditTexts, чтобы показать все символы? - PullRequest
2 голосов
/ 25 мая 2019

У меня есть следующий код для создания таблиц, где люди вводят числа (как в Excel, но более упрощенно)

public class Table extends Fragment {
    private TableLayout tableLayout;
    private EditText[][] editTexts;
    private int x, y;
    private int shape;

    Table(int shape) {
        this.shape = shape;
    }

    int getX() {
        return x;
    }

    void setX(int x) {
        if (x > 0) this.x = x;
    }

    int getY() {
        return y;
    }

    void setY(int y) {
        if (y > 0) this.y = y;
    }

    void refresh() {
        tableLayout.removeAllViews();
        TableRow[] tableRows = new TableRow[y];
        editTexts = new EditText[y][x];
        for (int i = 0; i < tableRows.length; i++) {
            tableRows[i] = new TableRow(getContext());
            tableLayout.addView(tableRows[i]);
            for (int j = 0; j < editTexts[i].length; j++) {
                editTexts[i][j] = new EditText(getContext());
                editTexts[i][j].setPadding(10, 0, 10, 0);
                editTexts[i][j].setBackground(getResources().getDrawable(shape, Objects.requireNonNull(getActivity()).getApplicationContext().getTheme()));
                editTexts[i][j].setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
                editTexts[i][j].setMinEms(1);
                editTexts[i][j].setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
                tableRows[i].addView(editTexts[i][j]);
            }
        }
    }

    String getElement(int x, int y) {
        return editTexts[y][x].getText().toString();
    }

    void setElement(String string, int x, int y) {
        editTexts[y][x].setText(string);
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_table, container, false);
        tableLayout = new TableLayout(getContext());

        FrameLayout frameLayout = view.findViewById(R.id.frame_layout);
        frameLayout.addView(tableLayout);
        refresh();
        return view;
    }
}

Но у меня есть проблема: эта таблица не может автоматически изменять размеры своих столбцов на-fly.Например, я набрал несколько цифр и получил:

Изображение 1:

enter image description here

Затем я нажимаю кнопку "Назад" на моемпозвоните и получите:

Изображение 2:

enter image description here

Мой вопрос: как получить результат, как на рисунке 2, не нажимая ничего, я хочу изменить размер столбцов таблицы при наборе текста, а не после этого .

Спасибо.

1 Ответ

1 голос
/ 25 мая 2019

Вы в основном сталкиваетесь с этой проблемой, поскольку параметры макета не установлены должным образом, попробуйте установить параметры макета в этом фрагменте кода:

 void refresh() {
        tableLayout.removeAllViews();
        TableRow[] tableRows = new TableRow[y];
        editTexts = new EditText[y][x];
        for (int i = 0; i < tableRows.length; i++) {
            tableRows[i] = new TableRow(getContext());
            tableLayout.addView(tableRows[i]);
            for (int j = 0; j < editTexts[i].length; j++) {
                editTexts[i][j] = new EditText(getContext());
                editTexts[i][j].setPadding(10, 0, 10, 0);
                editTexts[i][j].setLayoutParams(new 
                TableRow.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
                ViewGroup.LayoutParams.WRAP_CONTENT));
                editTexts[i][j].setBackground(getResources().getDrawable(shape, Objects.requireNonNull(getActivity()).getApplicationContext().getTheme()));
                editTexts[i][j].setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
                editTexts[i][j].setMinEms(1);
                editTexts[i][j].setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
                tableRows[i].addView(editTexts[i][j]);
            }
        }
    }
...