GridLayout: setMinimumWidth для привязки к горизонтальным ограничениям? - PullRequest
0 голосов
/ 25 апреля 2018

Смежные вопросы: здесь и здесь .Но они не отвечают на мой вопрос.

Я пытаюсь динамически добавлять кнопки во время выполнения, поэтому существует минимальный этап проектирования xml.Все кнопки создаются во время выполнения.Все работает нормально, пока четыре кнопки не добавляются в одну строкуЭто происходит неправильно, когда пятая кнопка добавляется в GridLayout.

Я пытаюсь повлиять на ограничения, чтобы избежать ошибки, которую я получаю при добавлении пятой кнопки: -

D/android.widget.GridLayout: horizontal constraints: x1-x0>=231, x2-x1>=231, x3-x2>=231, x4-x3>=231, x5-x4>=231, x5-x0<=1080 are inconsistent; permanently removing: x5-x0<=1080. 

В моем GridLayout есть пять кнопок, которые пытаются сжать себя, но они не вписываются в 1080dp, как 231dp*5=1155.
1. Откуда берется 231dp?
Вывод из журналов показываетчто Button.getMinimumWidth() было 231dp (прокрутите вправо, чтобы увидеть последний параметр): -

D/CommandCenter: Btn <0> details:X<0.0>Y<802.0> || W<270>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<0> || MinW<231>
D/CommandCenter: Btn <1> details:X<270.0>Y<802.0> || W<270>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<270> || MinW<231>
D/CommandCenter: Btn <2> details:X<540.0>Y<802.0> || W<270>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<540> || MinW<231>
I/zygote: Waiting for a blocking GC Debugger
D/CommandCenter: Btn <3> details:X<810.0>Y<802.0> || W<270>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<810> || MinW<231>

enter image description here 2. Измените минимальную ширину с 231dpдо 216dp, как показано ниже:

//btnContainer --> GridLayout Object
//btn          --> Button Object
//BTN_COLS     --> Number of Buttons in one row
btn.setMinimumWidth(btnContainer.getWidth()/BTN_COLS);

3.Проверьте, правильно ли установлена ​​минимальная ширина (Прокрутите вправо, параметр MinW в строке журнала):

D/CommandCenter: Btn <0> details:X<0.0>Y<802.0> || W<270>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<0> || MinW<216>
D/CommandCenter: Btn <1> details:X<270.0>Y<802.0> || W<270>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<270> || MinW<216>
D/CommandCenter: Btn <2> details:X<540.0>Y<802.0> || W<270>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<540> || MinW<216>
D/CommandCenter: Btn <3> details:X<810.0>Y<802.0> || W<270>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<810> || MinW<216>

К сожалению, минимальная ширина кнопки не была использована для разрешения (10) GirdLayoutОграничения и по-прежнему показывает ту же ошибку, что и используемая ширина по-прежнему 231dp вместо 216dp

D/android.widget.GridLayout: horizontal constraints: x1-x0>=231, x2-x1>=231, x3-x2>=231, x4-x3>=231, x5-x4>=231, x5-x0<=1080 are inconsistent; permanently removing: x5-x0<=1080. 

.
4. Вот как обстоят дела после того, как все пошло не так:

D/CommandCenter: Btn <0> details:X<0.0>Y<802.0> || W<2391>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<0> || MinW<216>
D/CommandCenter: Btn <1> details:X<2391.0>Y<802.0> || W<2391>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<2391> || MinW<216>
D/CommandCenter: Btn <2> details:X<4782.0>Y<802.0> || W<2391>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<4782> || MinW<216>
D/CommandCenter: Btn <3> details:X<7173.0>Y<802.0> || W<2391>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<7173> || MinW<216>
D/CommandCenter: Btn <4> details:X<9564.0>Y<802.0> || W<2391>H<126> || PadL<31>PadR<31>PadT<25> || MarL<0>MarR<0>MarT<0> || L<9564> || MinW<216>
...