layout_width и layout_height - PullRequest
       1

layout_width и layout_height

1 голос
/ 07 февраля 2012

Можно ли как-нибудь обойти необходимость добавления параметров layout_width и layout_height в мои пользовательские представления?Я знаю, что есть несколько встроенных представлений Android, для которых вам не нужно указывать эти атрибуты.

Ответы [ 5 ]

2 голосов
/ 07 февраля 2012

Представление не несет ответственности за решение о том, может ли он / должен предоставлять эти атрибуты.Родительский ViewGroup определяет, являются ли эти атрибуты обязательными или нет.Например, TableRow делает их необязательными.Другие макеты (LinearLayout, FrameLayout и т. Д.) Требуют этих параметров.

0 голосов
/ 05 ноября 2017

Проблема в том, что ViewGroup.LayoutParams.setBaseAttributes() использует строгий getLayoutDimension(int, String). Вам нужно расширить любой параметр LayoutParams и переопределить setBaseAttributes. Внутри вы можете либо вручную установить ширину и высоту, либо использовать более снисходительный getLayoutDimension(int, int). Наконец, вам придется переопределить в своем классе макета, что вы используете свои собственные LayoutParams.

   @Override
   public LayoutParams generateLayoutParams(AttributeSet attrs) {
       return new LayoutParams(getContext(), attrs);
   }

   public static class LayoutParams extends FrameLayout.LayoutParams {
       public LayoutParams(Context context, AttributeSet attrs) {
           super(context, attrs);
       }

      @Override
      protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr) {
         width = a.getLayoutDimension(widthAttr, WRAP_CONTENT);
         height = a.getLayoutDimension(heightAttr, WRAP_CONTENT);
      }
  }
0 голосов
/ 14 февраля 2012

Если вы хотите уменьшить общие и избыточные атрибуты, попробуйте стилизацию.

Руководство разработчика здесь .

0 голосов
/ 07 февраля 2012

Из того же Ссылка Дейв предложил.

Все группы представлений включают ширину и высоту (layout_width и layout_height), и каждый вид необходим для их определения. Много LayoutParams также включает дополнительные поля и границы.

Похоже, вы должны .

0 голосов
/ 07 февраля 2012

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

Смотрите здесь для справки http://developer.android.com/guide/topics/ui/declaring-layout.html#layout-params

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