在FrameLayout中循环查看RecyclerView上方的视图

时间:2014-10-28 23:02:23

标签: android layout-inflater android-framelayout android-recyclerview

点按一下按钮,我试图在EditText上方RecyclerView上方充气。但是,不是将EditText添加到布局顶部,而是按下RecyclerView,它只是放在RecyclerView的顶部,覆盖它就像这样:

enter image description here

您可以看到“新文本”涵盖了RecyclerView的第一项。如何让它在RecyclerView上面膨胀,并推倒RecyclerView,适应新添加的EditText?

以下是我将FrameText添加到:

的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 个答案:

答案 0 :(得分:4)

在框架布局中,所有内容都堆叠在一起,如果您希望它在回收器视图上方,请在您的情况下使用布局LinearLayout并调用方法LinearLayout.addView(child, index)哪个索引为0

更新

因为你有浮动按钮,你应该让你的布局像这样:

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

如果您希望编辑文本像标题一样工作,您可以使用: https://stackoverflow.com/a/26573338/2127203

答案 1 :(得分:1)

此TextView是否与RecyclerView中的项目相关,以便您将其视为项目? 如果是这样,请将EditText作为新视图类型添加到适配器(索引0)并调用notifyItemInserted(0)。作为回应,RecyclerView将调用onBind,您可以在其中返回EditText。通过这种方式,RecyclerView可以在EditText淡入淡出时为视图设置良好的动画效果。如果您可以发布适配器,我很高兴发布一个示例comde。

如果您不想在RecyclerView中添加它,您有两种选择: - 添加编辑文本时,在RecyclerView或顶部填充上设置上边距。 - 使用线性布局而不是帧布局,并使用TransitionManager制作动画。

我仍然认为你应该考虑将它作为一个项目添加到适配器中,以便LayoutManager可以处理焦点变化等(并且它也会移动到列表的其余部分)

答案 2 :(得分: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>

答案 3 :(得分:0)

这是因为在Frame Layout中,每个视图都依次叠加... FrameLayout旨在阻挡屏幕中的某个区域。您可以向frameLayout添加许多视图或ViewGroup。所有视图都将堆叠在一起......

<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充气时,将它膨胀到线性布局,而不是框架布局