Разделители Android GridLayout

Почему бы Android не включить возможность ограничивать ячейки в макете сетки? Я прочитал несколько сообщений о нескольких способах сделать это. Один метод, который я пробовал с ограниченным успехом, приведен ниже. Моя проблема - разделитель горизонтальной линии. При выполнении с вертикальным и горизонтальным кодом моя сетка заканчивается заблокированными ячейками, поэтому текст в ячейке не виден. Если я уберу горизонтальный код, я получу идеальные вертикальные линии в каждом столбце, как и ожидалось. Любая идея о том, что не так. Я смог использовать тот же метод для создания линий сетки на столе. Макет сетки находится внутри горизонтальной прокрутки, которая находится внутри вертикальной прокрутки. Фон Gridlayout черный. Таким образом, я должен получить синие ячейки и черные разделительные линии.

 for (int y = 0; y < rownum; y++) {
 cols = 0;
 while (cols < columnum) {
  TextView textViewD = new TextView(this);
  textViewD.setTextSize(18);
  textViewD.setWidth(300);
  textViewD.setHeight(75);
  textViewD.setTextColor(Color.WHITE);
  textViewD.setBackgroundColor(Color.BLUE);
   textViewD.setText(title);
  //CREATE VERTICAL DIVIDER LINES
            View v = new View(this);
            v.setLayoutParams(new ViewGroup.LayoutParams(3, ViewGroup.LayoutParams.MATCH_PARENT));
            v.setBackgroundColor(Color.BLACK);
    cols++;
    gridLayoutE.addView(textViewD);

    }

    //CREATE HORIZONTAL DIVIDER LINES

               View v1 = new View(this);
        v1.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 3));
        v1.setBackgroundColor(Color.BLACK);
        gridLayoutE.addView(v1);

   }

введите здесь описание изображения

Изменить: это то, что я нашел в другом сообщении об установке полей textView

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)textViewD.getLayoutParams(); params.setMargins(2, 2, 2, 2); textViewD.setLayoutParams (параметры);

У меня нет LinearLayout, когда я пытаюсь это сделать, он падает.


person snowman    schedule 21.11.2017    source источник
comment
Можете ли вы включить изображение того, как вы хотите, чтобы это выглядело?   -  person Xenolion    schedule 21.11.2017
comment
Я приложил изображение ожидаемого результата.   -  person snowman    schedule 22.11.2017
comment
Вы делаете весь вид в коде без xml?   -  person Xenolion    schedule 22.11.2017
comment
Каково родительское представление textView !? Нет никого? Это само?   -  person Xenolion    schedule 22.11.2017
comment
Это уловка, чтобы прийти к вам, потому что фон вашего gridlayout черный, уже сделайте макет textview для setparams, совпадающего с родительским, затем примените некоторые поля, скажем, 2. Это заставит черный цвет отображаться, потому что поле заставит представление немного настроиться ты понял?   -  person Xenolion    schedule 22.11.2017
comment
Таким образом, мне не нужно создавать линии? Я бы использовал фон gridlayout в качестве линий, верно?   -  person snowman    schedule 22.11.2017
comment
Да, вам не нужны строки, попробуйте прокомментировать их и попробуйте решение, которое я вам дал! Это приведет к тому же виду, который вы показали, и вы просто отрегулируете поля в соответствии с вашими потребностями!   -  person Xenolion    schedule 22.11.2017
comment
Xenolion, ваше решение имеет смысл, но я не могу заставить его работать. Текстовое представление создается динамически и добавляется в gridlayout. Я не уверен, как установить поле textView. Я нашел другой пост, но похоже, что все они ссылаются на родительский макет для textView. Когда я пытаюсь сослаться на gridlayout, чтобы получить параметры, возникает ошибка, из-за которой вы не можете привести textView к GridLayout.LayoutParams.   -  person snowman    schedule 22.11.2017
comment
Ксенолион, изучив немного больше, я заставил его работать. Спасибо за направление. Я создал LinearLayout в качестве родителя и отрегулировал поля, отлично работает.   -  person snowman    schedule 22.11.2017
comment
Оооооо извините, я был в автономном режиме слишком долго! Но я рад, что вы прекрасно решили свою проблему Удачного программирования!. Я просто опубликую направление в качестве ответа, надеясь помочь кому-то в будущем!   -  person Xenolion    schedule 22.11.2017


Ответы (2)


Еще один простой и хитрый способ получить такой же View, как вы хотите, заключается в следующем:

Поскольку фон GridLayout уже черный, поместите TextView в другой макет, скажем, LinearLayout создайте макет. из Textview в setparams MATCH_PARENT, затем примените некоторые поля, скажем, 2, а затем добавьте весь вид (LinearLayout как корень). Это приведет к появлению черного цвета, потому что поля немного изменят вид и, следовательно, отобразят какие-то границы, как вы показали на своем изображении! Использование этого способа упростит работу, и поэтому вам не нужно создавать разделительные линии, будь то горизонтальные или вертикальные!

person Xenolion    schedule 22.11.2017

Для тех, кто может столкнуться с похожей ситуацией, как предложил Xenolion, вот что я в итоге сделал.

for (int y = 0; y < rownum; y++) {
cols = 0;
while (cols < columnum) {
LinearLayout parent = new LinearLayout(this);
            parent.setBackgroundColor(Color.BLACK);
            parent.setOrientation(LinearLayout.HORIZONTAL);
            LinearLayout.LayoutParams params= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
 params.setMargins(2, 2, 2, 2);  //CREATES DIVIDER LINES
 TextView textViewD = new TextView(this);
 textViewD.setTextSize(18);
 textViewD.setWidth(300);
 textViewD.setHeight(75);
 textViewD.setTextColor(Color.WHITE);
 textViewD.setBackgroundColor(Color.BLUE);
 textViewD.setText(title);
 textViewD.setLayoutParams(params);
 parent.addView(textViewD);
 cols++;
 gridLayoutE.addView(parent);
}

}

person snowman    schedule 23.11.2017
comment
Да, это хорошо! - person Xenolion; 23.11.2017