android - 相对布局中的百分比宽度

标签 android android-layout android-relativelayout

我正在为我的 Android 应用程序中的登录 Activity 设计表单布局。下图是我想要的样子:

enter image description here

我能够使用以下 XML 实现此布局。问题是,它有点hackish。我不得不硬编码主机 EditText 的宽度。具体来说,我必须指定:

android:layout_width="172dp" 

我真的很想给主机和端口 EditText 的 . (主机占 80%,端口占 20%。)这可能吗?以下 XML 适用于我的 Droid,但似乎不适用于所有屏幕。我真的想要一个更强大的解决方案。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/host_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/home"
        android:paddingLeft="15dp"
        android:paddingTop="0dp"
        android:text="host"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <TextView
        android:id="@+id/port_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/home"
        android:layout_toRightOf="@+id/host_input"
        android:paddingTop="0dp"
        android:text="port"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <EditText
        android:id="@+id/host_input"
        android:layout_width="172dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/host_label"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:background="@android:drawable/editbox_background"
        android:inputType="textEmailAddress" />

    <EditText
        android:id="@+id/port_input"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/host_label"
        android:layout_marginTop="4dp"
        android:layout_toRightOf="@id/host_input"
        android:background="@android:drawable/editbox_background"
        android:inputType="number" />

    <TextView
        android:id="@+id/username_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/host_input"
        android:paddingLeft="15dp"
        android:paddingTop="15dp"
        android:text="username"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <EditText
        android:id="@+id/username_input"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/username_label"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:background="@android:drawable/editbox_background"
        android:inputType="textEmailAddress" />

    <TextView
        android:id="@+id/password_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/username_input"
        android:paddingLeft="15dp"
        android:paddingTop="15dp"
        android:text="password"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <EditText
        android:id="@+id/password_input"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/password_label"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:background="@android:drawable/editbox_background"
        android:inputType="textPassword" />

    <ImageView
        android:id="@+id/home"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="false"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="15dp"
        android:scaleType="fitStart"
        android:src="@drawable/home" />

    <Button
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/password_input"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        android:text="   login   "
        android:textSize="18sp" >
    </Button>

</RelativeLayout>

最佳答案

您正在寻找 android:layout_weight 属性。它将允许您使用百分比来定义您的布局。

在以下示例中,左键使用 70% 的空间,右键使用 30%。

<LinearLayout
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button
        android:text="left" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight=".70" /> 

    <Button
        android:text="right" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight=".30" />

</LinearLayout>

它适用于任何类型的 View ,您可以将按钮替换为一些 EditText 以满足您的需求。

请务必将 layout_width 设置为 0dp 否则您的 View 可能无法正确缩放。

请注意,权重总和不必等于 1,我只是觉得这样更容易阅读。您可以将第一个权重设置为 7,将第二个权重设置为 3,它会得到相同的结果。

关于android - 相对布局中的百分比宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4961355/

相关文章:

android - 如何获取 Facebook AccessToken?

android - onConfigurationChanged 屏幕停止在设备上旋转。在模拟器上工作

android - 是否有一个 Android TextVew 小部件 XML 属性从字符串的底部显示

android - 使用 LiveData 作为 Jetpack @Compose 函数内部的状态

android - 如何在非亚马逊 AppStore Kindle Fire 应用程序中嵌入高分辨率图标?

android - 将 Android View 设置为不可见/不工作

Android case语句帮助

java - Android:将 XML android:background 转换为 Java 程序代码

android - 使用 wrap_content 展开 TextView 直到邻居 View 到达父 View 的末尾

安卓警告 : Grows due to localized text expansion