Android, как мне установить процентное отступ / поля, чтобы EditText имел 10% поля с обеих сторон?

Нет, это невозможно, так как стиль для этих элементов обрабатывается ОС пользователя. MSDN ответит на ваш вопрос здесь :

За исключением background-color и color, параметры стиля, применяемые к объекту стиля для элемента опции, игнорируются.

29
задан barcodereader 13 May 2011 в 19:02
поделиться

4 ответа

На самом деле он не поддерживает установку значений в процентах (за исключением некоторых файлов анимации xml, которые кажутся). Если вы устали использовать процент, лучший способ, который я могу придумать, - это вызовы java getWidth и getHeight, а затем умножить по вашему десятичному числу и установите результат с помощью setMargin () или setPadding ().

32
ответ дан Anthony Pegram 13 May 2011 в 19:02
поделиться

Это возможно с Руководством , представленным в ConstraintLayout.

Например, вы можете разместить свой верх EditText на 25% высоты экрана, а слева и справа на 20% ширины экрана:

Layout Editor

Вот источник макета:

<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>
8
ответ дан Eugene Brusov 13 May 2011 в 19:02
поделиться

Редактировать: Макеты из этого ответа теперь устарели. Используйте решение, предложенное Евгением Брюсовым . Также, спасибо 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

23
ответ дан neits 13 May 2011 в 19:02
поделиться

Это возможно в 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>
32
ответ дан Mark D 13 May 2011 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: