Нет, это невозможно, так как стиль для этих элементов обрабатывается ОС пользователя. MSDN ответит на ваш вопрос здесь :
За исключением
background-color
иcolor
, параметры стиля, применяемые к объекту стиля для элемента опции, игнорируются.
На самом деле он не поддерживает установку значений в процентах (за исключением некоторых файлов анимации xml, которые кажутся). Если вы устали использовать процент, лучший способ, который я могу придумать, - это вызовы java getWidth и getHeight, а затем умножить по вашему десятичному числу и установите результат с помощью setMargin () или setPadding ().
Это возможно с Руководством , представленным в ConstraintLayout.
Например, вы можете разместить свой верх EditText на 25% высоты экрана, а слева и справа на 20% ширины экрана:
Вот источник макета:
<android.support.constraint.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" />
<android.support.constraint.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" />
<android.support.constraint.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" />
<android.support.constraint.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" />
</android.support.constraint.ConstraintLayout>
Редактировать: Макеты из этого ответа теперь устарели. Используйте решение, предложенное Евгением Брюсовым . Также, спасибо 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
Это возможно в 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>