【问题标题】:Android EditText use the entire activity height after titleAndroid EditText 使用标题后的整个活动高度
【发布时间】:2021-02-10 14:26:25
【问题描述】:

我正在开发一个 android 应用程序来支持用户发布文章并有一个相同的 EditText,下面是我的布局。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="vertical"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/article_title_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Write Article"/>

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/article_text_field"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </com.google.android.material.textfield.TextInputLayout>
    
</LinearLayout>

问题是在单击 EditText 时,文章标题在视图中变成了一半,并且 EditText 的光标在底部,应该在顶部。

有人对如何修复它有建议吗?

【问题讨论】:

  • 发布你的用户界面图片

标签: android android-layout android-edittext android-view material-components-android


【解决方案1】:

您必须为TextInputEditText 设置重力并删除android:gravity="vertical"

应该是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <TextView
        android:id="@+id/article_title_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Write Article"
        />

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/article_text_field"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="top"
            />

    </com.google.android.material.textfield.TextInputLayout>

</LinearLayout>

现在,当您有很多行时,您的布局将在书写时滚动,并且带有标题的应用栏将开始隐藏。我认为这很好,因为用户会看到更多的 EditText,所以写长文本会更容易

【讨论】:

    【解决方案2】:

    如果您希望 TextView 和 TextInputLayout 水平显示(基于您的 LinearLayout 属性 android:orientation="vertical"),那么您可以通过以下方式实现所需的布局:

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout 
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
    
          <TextView
            android:id="@+id/article_title_text_view"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:text="Write Article"
            android:padding="12dp"/>
    
          <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/article_text_field"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true"
            android:layout_toEndOf="@+id/article_title_text_view"
            android:layout_alignParentEnd="true"
            app:hintEnabled="false">
    
            <com.google.android.material.textfield.TextInputEditText
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_gravity="top"
              android:gravity="top|start"
              android:padding="12dp"
              tools:text="@tools:sample/lorem/random"/>
    
          </com.google.android.material.textfield.TextInputLayout>
    
        </RelativeLayout>
    

    如果您想让 TextView 和 TextInputLayout 垂直对齐,请使用:

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout   
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
    
          <TextView
            android:id="@+id/article_title_text_view"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:gravity="center"
            android:padding="12dp"
            android:text="Write Article"
            android:textAlignment="center"/>
    
          <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/article_text_field"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_below="@+id/article_title_text_view"
            android:layout_alignParentStart="true"
            android:layout_alignParentEnd="true"
            app:hintEnabled="false">
    
            <com.google.android.material.textfield.TextInputEditText
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_gravity="top"
              android:gravity="top|start"
              android:padding="12dp"
              tools:text="@tools:sample/lorem/random"/>
    
          </com.google.android.material.textfield.TextInputLayout>
    
        </RelativeLayout>
    

    【讨论】:

      【解决方案3】:

      实际上,您应该在 com.google.android.material.textfield.TextInputEditText 中使用 android:inputType="textMultiLine" 属性,并指定要为该字段指定的行数。
      因为该字段是一篇文章,这意味着一个多行字段。并且请指定方向为垂直。
      代码将如下所示,

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">
              <TextView
                  android:id="@+id/article_title_text_view"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Write Article" />
      
              <com.google.android.material.textfield.TextInputLayout
                  android:id="@+id/article_text_field"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content">
      
                  <com.google.android.material.textfield.TextInputEditText
                      android:inputType="textMultiLine"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent" />
              </com.google.android.material.textfield.TextInputLayout>
          </LinearLayout>
      

      【讨论】:

        猜你喜欢
        • 2013-02-28
        • 1970-01-01
        • 2013-07-06
        • 1970-01-01
        • 2011-05-20
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多