如何使用Edittext和底部对齐的按钮添加recyclerview?

时间:2019-01-24 18:02:29

标签: android android-layout layout android-recyclerview

当“回收者”视图中的项目为3或4时,此代码可以正常工作。当“回收者”视图中的项目大于4时,编辑文本字段就会退出屏幕。就像图像https://imgur.com/gallery/8hLnnrG 如果在recyclerview中有多个项目,则

EditText不应位于“底部对齐”按钮下方。我该如何实现? https://imgur.com/gallery/nwUi8ye

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/colorWhitex"
tools:context=".Fragments.RecordOdometerFragments.RecordOdometer">

<!-- TODO: Update blank fragment layout -->
<RelativeLayout
    android:id="@+id/linear"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:orientation="vertical">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/layout">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/car_selection_rv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:descendantFocusability="beforeDescendants"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="16dp"/>
        <RelativeLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/odometer_view"
            android:layout_below="@+id/car_selection_rv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginEnd="16dp"
            android:layout_marginTop="16dp"
            android:background="@drawable/edittext_red_corners">

            <EditText
                android:id="@+id/odometer_edittext"
                android:layout_height="35dp"
                android:layout_width="fill_parent"
                android:inputType="number"
                android:layout_margin="1dp"
                android:paddingEnd="64dp"
                android:maxLines="9"
                android:imeOptions="actionDone"
                android:hint="Input meter reading"
                android:background="@null"
                android:paddingStart="16dp" />
            <ImageButton
                android:id="@+id/imageButton1"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:clickable="true"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="?attr/selectableItemBackgroundBorderless"
                android:src="@drawable/ic_mic_none_black_24dp"/>

            <ImageButton
                android:id="@+id/imageButton2"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:clickable="true"
                android:layout_toLeftOf="@+id/imageButton1"
                android:layout_centerVertical="true"
                android:src="@drawable/ic_photo_camera_black_24dp"
                android:background="?attr/selectableItemBackgroundBorderless" />
        </RelativeLayout>
    </RelativeLayout>
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_margin="32dp"
        android:layout_alignParentBottom="true"
        android:background="@drawable/button_corner_radius"
        style="@style/Widget.AppCompat.CompoundButton.RadioButton"
        android:gravity="center"
        android:text="Done"
        android:textAllCaps="false"
        android:textColor="@color/colorWhite" />
</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

我强烈建议您使用ConstraintLayout。您可以相对轻松地创建复杂的布局,而不必嵌套多个布局。

答案 1 :(得分:0)

推荐的方法是使用ConstraintLayout并防止RecyclerView推出odometer_view,探索类似How to set RecyclerView Max Height的东西

但是请注意您的更新要求,您仍然可以在此处使用一些富有创意的 padding 对其进行破解。既然您似乎知道odometer_view的高度,则根据其内容@ 35dp + 2x 16dp,可以为RecyclerView设置相同的底部填充,然后将其对齐在一起。

(我已经删除了多余的代码)

<RelativeLayout
    android:id="@+id/linear"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_above="@id/button" >

        <android.support.v7.widget.RecyclerView
            android:id="@+id/car_selection_rv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="67dp" />

        <RelativeLayout
            android:id="@+id/odometer_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/car_selection_rv" >

            <EditText
                android:id="@+id/odometer_edittext"
                android:layout_height="35dp"
                android:layout_width="fill_parent" />
            <ImageButton
                android:id="@+id/imageButton1"
                android:layout_width="32dp"
                android:layout_height="32dp" />
            <ImageButton
                android:id="@+id/imageButton2"
                android:layout_width="32dp"
                android:layout_height="32dp" />
        </RelativeLayout>
    </RelativeLayout>

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true" />
</RelativeLayout>

所以实际上只有两项:

  1. android:paddingBottom="67dp"
  2. android:layout_alignBottom="@id/car_selection_rv"

现在,无论您走到哪里,odometer_view基本上都会漂浮在您的recyclerview的底部填充上方。