Intereting Posts

Ширина макета равна высоте

Есть ли способ иметь высоту, зависящую от ширины в моем xml?

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

<Button android:id="@+id/b_0xa" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:clickable="false" android:text="@string/b_0xa" /> 

Solutions Collecting From Web of "Ширина макета равна высоте"

Вы можете сделать это легко программно в своем Java-коде.

Получите ширину кнопки динамически [используя int x = mButton.getWidth() ], а затем используйте значение, возвращаемое для установки высоты [ mButton.setHeight(x) ].

PS: Рекомендуется использовать LayoutParams для установки высоты и ширины любого вида. Итак, вместо использования setHeight () вы должны использовать setLayoutParams ().

mButton.setLayoutParams(new LinearLayout.LayoutParams(x, x));

Вы должны изменить значения, данные для android:layout_width и android:layout_height , назначив им фиксированные значения

 <Button android:id="@+id/b_0xa" android:layout_width="50dp" android:layout_height="50dp" android:layout_weight="1" android:clickable="false" android:text="@string/b_0xa" /> 

Присвоение им фиксированных значений гарантирует, что независимо от размера экрана ваша кнопка останется прежней, поскольку используемая единица – это dp. Убедитесь, что назначенные вами значения совпадают, так как вы хотите квадрат.

В этом случае я бы рекомендовал использовать layout_weight для вашего атрибута height, он затем назначит пропорциональный вес кнопке, которая будет масштабироваться на разных размерах экрана:

 <Button android:id="@+id/b_0xa" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight=".4" android:clickable="false" android:text="@string/b_0xa" /> 

Чтобы этот подход работал, вы должны применить вес к высоте других видов в макете. Общий вес должен быть равен 1, поэтому вам придется играть с макетами и весами для достижения оптимального дизайна.

Как я объяснил здесь, если вы хотите сделать это на 100% из XML, вы можете использовать PercentRelativeLayout и сделать следующее:

 <android.support.percent.PercentRelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button app:layout_aspectRatio="100%" app:layout_widthPercent="100%" /> </android.support.percent.PercentRelativeLayout> 

Убедитесь, что вы включили библиотеку в файл приложения gradle:

 compile 'com.android.support:percent:XX.XX'