Android如何设置百分比填充/边距,以便EditText在任何一方都有10%的保证金?

时间:2011-05-13 19:02:58

标签: android android-layout

android支持%或有没有办法近似。我有两个非常不同的屏幕尺寸,但我百分比方面我希望活动中的EditBox具有相同的屏幕尺寸和屏幕尺寸比例的余量。如何才能做到这一点。

4 个答案:

答案 0 :(得分:32)

它实际上并不支持按百分比设置值(某些xml动画文件似乎除外)如果您使用百分比设置为死,我能想到的最好的方法是从java调用getWidth和getHeight然后乘以那些用你的小数,用setMargin()或setPadding()设置结果。

答案 1 :(得分:31)

通过将EditText包装在LinearLayout中,可以在XML中实现:

<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>

答案 2 :(得分:22)

编辑:此答案的布局现已弃用。使用Eugene Brusov提出的解决方案。另外,感谢您chancyWu的评论。

支持库版本23.0.0现在有了更好的方法(关于时间,对吗?)。您现在可以使用PercentFrameLayoutPercentRelativeLayout

如果你希望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

答案 3 :(得分:8)

可以在ConstraintLayout中引入Guideline

例如,您可以将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>