Android EditText 使用标题后的整个 activity 高度
Android EditText use the entire activity height after title
我正在开发一个 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 后,文章标题在视图中变为 half-cut,而 EditText 的光标位于底部,而本应位于顶部。
有人对如何修复它有建议吗?
您必须为 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,因此写长文本会更容易
如果您希望 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>
实际上,您应该在 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>
我正在开发一个 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 后,文章标题在视图中变为 half-cut,而 EditText 的光标位于底部,而本应位于顶部。
有人对如何修复它有建议吗?
您必须为 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,因此写长文本会更容易
如果您希望 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>
实际上,您应该在 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>