Исправить проблему с макетом
Сценарий: у меня четыре кнопки расположены в относительной компоновке. Текст этих кнопок изменяется в течение срока службы приложения, что приводит к уменьшению или увеличению размера кнопки в зависимости от длины текста. Использование: Relative Layout.getChildAt(). SetText ();
Q1) Но я требую, чтобы каждая кнопка занимала 40% ширины экрана, но с разной высотой. Q2) И, в частности, мой код требует доступа к кнопкам с помощью getChildAt ().
Какой тип макета я должен использовать, чтобы заменить Relative Layout, чтобы установить ширину кнопки равной 40% ширины экрана и, в частности, чтобы я мог получить доступ к этим кнопкам с помощью getChildAt ()? SomeLayout.getChildAt (); так что макет является непосредственным родителем кнопок.
<RelativeLayout android:id="@+id/buttonRelativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_margin="10dp">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/optionButton1"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/optionButton2"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/optionButton3"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/optionButton4"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
3 ответа
Тебе просто повезло. Android только что выпустил новую библиотеку поддержки процентов. У них еще нет документации, но вот хороший пример проекта, который вы можете использовать, чтобы узнать, как работать с библиотекой. Это в основном позволяет размер виджетов вид в процентах от экрана.
https://github.com/JulienGenoud/android-percent-support-lib-sample
И вот две статьи, говорящие об этом, а также:
http://www.androidauthority.com/using-the-android-percent-support-library-630715/
http://inthecheesefactory.com/blog/know-percent-support-library/en
Библиотека поддержки процентов Android делает потрясающую работу по отображению процентного соотношения для виджетов Android на экране, заменяя наши традиционные LinearLayout
<android.support.percent.PercentRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/fifty_huntv"
android:background="#ff7acfff"
android:text="20% - 50%"
android:textColor="@android:color/white"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_heightPercent="20%"
app:layout_widthPercent="50%" />
<TextView
android:layout_toRightOf="@id/fifty_huntv"
android:background="#ffff5566"
android:text="80%-50%"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_heightPercent="80%"
app:layout_widthPercent="50%"
/>
</android.support.percent.PercentRelativeLayout>
Действительно удивительным!!!
Прямо сейчас я не могу думать ни о каком элементе макета, который позволил бы вам сделать это. Вы можете попробовать это в своем коде onCreate
или в одном из методов инициализации / переменных представления найдите кнопки и установите размер экрана равным 40%, например:
Display display = getWindowManager().getDefaultDisplay();
Point screenSize = new Point();
display.getSize(screenSize);
RelativeLayout rlParent = findViewById(R.id.<RELATIVE_LAYOUT_ID>);
for(int i = 0; i < 4; i++)
{
View btn = rlParent.getChildAt(i);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)btn.getLayoutParams();
params.width= screenSize.y * 0.4f;//40%
btn.setLayoutParams(params);
}