我的元素从屏幕流出,它们没有垂直对齐

时间:2016-03-15 22:39:32

标签: android xml android-linearlayout linear

此布局中的元素从屏幕流出。我想将它们的大小设置为屏幕的90%。我是XML初学者。

<LinearLayout
    android:id="@+id/login_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:weightSum="1.0">
    <TextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.8"
        android:text="Username"
        android:textColor="#FFFFFF" />
    <EditText
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/username"
        android:layout_weight="0.8"
        android:inputType="text" />
    <EditText
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/first"
        android:layout_weight="0.8"
        android:inputType="textPassword" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/password"
        android:layout_weight="0.8"
        android:text="@string/login_button" />
</LinearLayout>

我需要将线性布局中的元素放到列中。

4 个答案:

答案 0 :(得分:0)

如果你想让它们占据屏幕的90%,你需要将weightSum设置为10,将每个元素的layout-weight设置为2.25,以使屏幕的10%免费

<LinearLayout
    android:id="@+id/login_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:weightSum="10">
    <TextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="2.25"
        android:text="Username"
        android:textColor="#FFFFFF" />
    <EditText
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/username"
        android:layout_weight="2.25"
        android:inputType="text" />
    <EditText
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/first"
        android:layout_weight="2.25"
        android:inputType="textPassword" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/password"
        android:layout_weight="2.25"
        android:text="@string/login_button" />
</LinearLayout>

答案 1 :(得分:0)

您不能使用&#34; layout_centerVertical&#34;等属性。和&#34; layout_below&#34;使用LinearLayout。它们与RelativeLayout一起使用。 您可以使用此

实现布局
<LinearLayout
    android:id="@+id/login_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:weightSum="10"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2.25"
        android:text="Username"
        android:textColor="#FFFFFF" />
    <EditText
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2.25"
        android:inputType="text" />
    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2.25"
        android:inputType="textPassword" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2.25"
        android:text="@string/login_button" />
</LinearLayout>

答案 2 :(得分:0)

首先,不推荐使用fill_parent。如果您想要的是列表宽度和高度覆盖整个屏幕,我建议您使用match_parent。 其次,您在LinearLayout中缺少一些标签。 为了使List宽度覆盖屏幕的90%,您可以通过Activity中的代码来完成,但我建议您使用填充和边距在边缘留下一点空间,它是方式更容易。

这是你在找什么?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    android:id="@+id/login_layout"
    android:padding="20dp"
    android:gravity="center" >
        <TextView
            android:id="@+id/username"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:hint="Username"
            android:gravity="center_vertical"
            android:textColor="#FFFFFF" />
        <EditText
            android:id="@+id/login"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:hint="Login"
            android:inputType="text" />
        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:hint="Password"
            android:inputType="textPassword" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:text="Login" />
</LinearLayout>

它的外观如下:

enter image description here

答案 3 :(得分:0)

执行此操作,您要告诉LinearLayout将内部元素分布在列中的水平方向不是90%的相同空间。如果您想这样做,则必须将orientation设置为vertical,并将paddingRight设置为LinearLayout

试试这个:

<LinearLayout android:id="@+id/login_layout" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:layout_centerVertical="true" 
  android:layout_centerHorizontal="true"
  android:orientation="vertical" 
  android:gravity="right" 
  android:weightSum="1.0"
  android:paddingRight="20dp">
  <TextView android:id="@+id/username" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"  
    android:text="Username" 
    android:textColor="#FFFFFF" 
  />
  <EditText 
    android:id="@+id/login" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/username"  
    android:inputType="text" 
  /> 
  <EditText 
    android:id="@+id/password" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/first" 
    android:inputType="textPassword" 
  />
  <Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/password"  
    android:text="@string/login_button" 
  />
</LinearLayout>