Поддерживает ли поддержка android% или есть способ приблизиться. У меня два разных размера экрана, и я, но в процентах, хочу, чтобы EditBox в активности имел одинаковый размер для обоих размеров экрана в пропорции к размеру экрана. Как это может быть сделано.
Android, как мне установить процентное дополнение/маржу, так что EditText имеет 10% -ный запас с обеих сторон?
Ответ 1
Он действительно не поддерживает установку значений на проценты (за исключением некоторых файлов анимации xml). Если вы мертвы, используя процент, лучший способ, о котором я могу думать, - это использовать java-вызов getWidth и getHeight, а затем умножить те по десятичной и установить результат с помощью setMargin() или setPadding().
Ответ 2
Это возможно в XML, обернув ваш EditText внутри LinearLayout:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="10"
android:gravity="center"
>
<EditText
android:layout_height="wrap_content"
android:layout_width="0dip"
android:layout_weight="8"
/>
</LinearLayout>
Ответ 3
Изменение: макеты из этого ответа теперь устарели. Используйте решение, предложенное Евгением Брюсовым. Также, спасибо chancyWu за комментарий.
Теперь появился лучший способ с поддержкой библиотеки версии 23.0.0 (о времени, верно?). Теперь вы можете использовать PercentFrameLayout или PercentRelativeLayout.
Если вы хотите, чтобы EditText составлял 80% ширины экрана с полем 10% с каждой стороны, код был бы похож на это:
<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">
<EditText
android:layout_height="wrap_content"
app:layout_widthPercent="80%"
app:layout_marginStartPercent="10%"
app:layout_marginEndPercent="10%"/>
</android.support.percent.PercentRelativeLayout>
Вы также можете взглянуть на PercentLayoutHelper.PercentLayoutParams
Ответ 4
Это возможно с Guideline
, представленным в ConstraintLayout
.
Например, вы можете поместить верхнюю часть EditText
на 25% высоты экрана, а слева и справа на 20% ширины экрана:
Вот источник макета:
<androidx.constraintlayout.widget.ConstraintLayout
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">
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintLeft_toLeftOf="@+id/left_guideline"
app:layout_constraintRight_toLeftOf="@+id/right_guideline"
app:layout_constraintTop_toTopOf="@+id/top_guideline" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/top_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.25" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/left_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.2" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/right_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.8" />
</androidx.constraintlayout.widget.ConstraintLayout>