在FrameLayout中展开RecyclerView上方的视图

5
在单击按钮后,我尝试在RecyclerView上方膨胀一个EditText。但是,EditText并没有被添加到布局的顶部,从而将RecyclerView向下推动,而是简单地放置在RecyclerView之上,覆盖它,如下所示:enter image description here 。您可以看到,“New Text”遮盖了RecyclerView的第一项。 我该如何让它在RecyclerView之上膨胀,并使RecyclerView向下推动,以适应新添加的EditText?
这是我要将EditText添加到的FrameLayout的XML:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:id="@+id/fragment_my_frame_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="vertical" />

<com.melnykov.fab.FloatingActionButton
    android:id="@+id/button_floating_action"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:layout_margin="16dp"
    android:src="@drawable/ic_action_new"
    fab:fab_colorNormal="@color/primary_dark"
    fab:fab_colorPressed="@color/primary" />

这是我的FloatingActionButton的onClick方法,我希望在RecyclerView上方添加EditText:
    public void onClick(View v) {
    ViewGroup parent = (ViewGroup) rootView.findViewById(R.id.fragment_my_frame_layout);
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.add_keyword_edittext, parent, true);
}

这是我添加的EditText的XML:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/edit_text_above_listview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:background="#00000000"
    android:textCursorDrawable="@null"
    android:imeOptions="actionDone"
    android:singleLine="true"
    android:text="New Text" />
4个回答

6

在框架布局中,所有内容都会叠放在彼此之上。如果您想将某个内容置于RecyclerView之上,则需要将布局设置为LinearLayout,并调用方法LinearLayout.addView(child, index),其中index在您的情况下应为0

更新:

由于您有浮动按钮,因此您应该将布局设置为以下形式:

<FrameLayout>
   <LinearLayout>
      <EditText/>//witch will be added later by add view
      <RecyclerView/>
   </LinearLayout>
   <Button/>
<FrameLayout>

如果你想让编辑文本起到类似标题的作用,可以使用以下方法: https://dev59.com/3eo6XIcBkEYKwwoYIAgL#26573338

我最终采用了你提供的策略,使用编辑文本作为标题:https://dev59.com/3eo6XIcBkEYKwwoYIAgL#26573338 谢谢! - Dick Lucas

1
如果这个TextView与RecyclerView中的项相关,你是否想将其视为一项?如果是,请将EditText作为新的视图类型添加到您的适配器(索引为0),并调用notifyItemInserted(0)。作为响应,RecyclerView将调用onBind,在那里您可以返回您的EditText。这样,RecyclerView就可以很好地动画显示Views并淡入EditText。如果您可以发布您的适配器,我很乐意发布一个示例代码。
如果您不想将其添加到RecyclerView中,则有两个选项: - 在添加编辑文本时在RecyclerView上设置顶部边距或顶部填充。 - 使用线性布局而不是帧布局,并使用TransitionManager进行动画处理。
我仍然认为您应该考虑将其添加为适配器的一项,以便LayoutManager可以处理焦点变化等(它也随列表的其余部分移动)。

0

这对我有用

<RelativeLayout>    
        <LinearLayout>
            <!-- A RecyclerView with some commonly used attributes -->
            <android.support.v7.widget.RecyclerView
                android:id="@+id/my_recycler_view"
                android:scrollbars="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:elevation="24dp"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"/>
        </LinearLayout>    
    <Button />    
</RelativeLayout>

0

这是因为在FrameLayout中,每个视图都会一个接一个地堆叠... FrameLayout的设计目的是为了在屏幕上阻挡出一个区域。您可以将许多视图或ViewGroup添加到FrameLayout中。所有视图都将堆叠在彼此之上...

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    android:id="@+id/fragment_my_frame_layout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
      />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scrollbars="vertical" />

    <com.melnykov.fab.FloatingActionButton
        "@+id/button_floating_action"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_margin="16dp"
        android:src="@drawable/ic_action_new"
        fab:fab_colorNormal="@color/primary_dark"
        fab:fab_colorPressed="@color/primary" />

    </LinearLayout>
</FrameLayout>

然后当您想要填充EditText时,请将其填充到LinearLayout而不是FrameLayout中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接