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

Поддерживает ли Android% или есть способ приблизиться.У меня есть два очень разных размера экрана, и я, но в процентном отношении, я хочу, чтобы EditBox в упражнении имел одинаковое поле для обоих размеров экрана как пропорцию размера экрана.Как это может быть сделано.

Ответы [ 4 ]

32 голосов
/ 21 июня 2012

Это возможно в 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 голосов
/ 13 мая 2011

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

23 голосов
/ 21 августа 2015

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

8 голосов
/ 11 октября 2017

Это возможно с помощью Guideline , представленного в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...