我正在为Android应用程序中的登录名Activity设计表单布局.下图是我希望它看起来的样子:

在此处输入图像描述

我能用下面的XML个实现这个布局.问题是,这有点太老套了.我必须硬编码主机文本的宽度.具体来说,我必须具体说明:

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>

它适用于任何类型的视图,您可以用一些编辑文本替换按钮,以满足您的需要.

确保将layout_width设置为0dp,否则视图可能无法正确zoom .

注意,权重和不必等于1,我只是觉得这样读起来更容易.您可以将第一个权重设置为7,将第二个权重设置为3,它将给出相同的结果.

Android相关问答推荐

垂直居中图标

Android Bundle getSerializable(String?):'可序列化?&# 39、被抛弃了在Java中被弃用

Android设备.Net Maui上的mp3文件列表

MAP函数返回单位列表而不是字符列表

在Jetpack Compose中的隐藏状态栏后面绘制

在一列中垂直对齐两个框

数据绑定在Android中等待填充值时显示未填充的值

没有打开历史记录的活动意向 Select 器完成调用活动

Android v31 及更低版本中 ImageView 中的圆角

Android Compose - 为什么 Canvas 中的drawText在底部被切断而不是在顶部?

Material 3的MaterialSwitch默认大小太大了?如何使它变小?

在 Jetpack Compose 中包装内容

在移动设备上看到时如何增加 PasswordField 文本?

单击 Jetpack Compose(单选)时,我无法为列表中的单个文本着色

在compose中,为什么修改List元素的属性,LazyColumn不刷新

从 Firebase 云存储中获取照片会导致 Android Jetpack Compose 闪烁

firebase-messaging和firebase-inappmessaging-display之间有什么区别?

在 Jetpack Compose 中找不到 Path 的减号()

IconButton 中可绘制的图标是黑色的,尽管它是白色的

在 jetpack compose 中使用 .shadow 和 Button 会导致问题