向上滚动项目回收android时不会隐藏EditText

时间:2016-12-09 09:57:09

标签: android android-edittext

我引用此链接向上滚动回收:

https://mzgreen.github.io/2015/02/28/How-to-hideshow-Toolbar-when-list-is-scrolling(part2)/

这是我的结果: enter image description here

enter image description here

我的活动:

public class PartOneActivity extends AppCompatActivity {

private Toolbar mToolbar;
private EditText editTextSearcch;

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.AppThemeRed);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    initEditTextSearch();
    initRecyclerView();
}

private void initEditTextSearch() {
    editTextSearcch = (EditText) findViewById(R.id.editTextSearch);
}

private void initRecyclerView() {
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    RecyclerAdapter recyclerAdapter = new RecyclerAdapter(createItemList());
    recyclerView.setAdapter(recyclerAdapter);

    recyclerView.addOnScrollListener(new HidingScrollListener() {
        @Override
        public void onHide() {
            hideViews();
        }

        @Override
        public void onShow() {
            showViews();
        }
    });
}

private void hideViews() {
    editTextSearcch.animate().translationY(-editTextSearcch.getHeight()).setInterpolator(new AccelerateInterpolator(2));
}

private void showViews() {
    editTextSearcch.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2));
}

private List<String> createItemList() {
    List<String> itemList = new ArrayList<>();
    for(int i=0;i<20;i++) {
        itemList.add("Item "+i);
    }
    return itemList;
  }
 }

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="pl.michalz.hideonscrollexample.PartOneActivity">

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    android:layout_alignTop="@+id/editTextSearch" />


<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"/>


<EditText
    android:id="@+id/editTextSearch"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_marginTop="55dp"
    android:hint="Input text" />

</RelativeLayout>

当我向下滚动时,EditText显示并且正常。但是当向上滚动时,EditText不会隐藏,它仍然出现在ToolBar

我想也许我设置的位置显示和隐藏的值是不正确的,但是如何设置值来隐藏EditText。您可以在我的附件文件中查看照片

3 个答案:

答案 0 :(得分:0)

您可以为编辑文本设置Visibility GONE,可能有效

答案 1 :(得分:0)

因此,如果我正确理解您的问题 - 您只需在AppBarLayout中使用Toolbar并对包含它的RecyclerView或ViewGroup应用特殊行为。你提到的教程看起来很糟糕,不是你的默认方法吗?你正在使用的那个教程提到它已经过时了,请使用他最新的sample! 我更喜欢这样的方法:

<android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/coordinatorLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"/>

</android.support.design.widget.AppBarLayout>

<LinearLayout android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical"
              app:layout_behavior="@string/appbar_scrolling_view_behavior">
    <EditText android:layout_width="match_parent" android:layout_height="wrap_content"/>


    <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view"
                                            android:layout_width="match_parent"
                                            android:layout_height="wrap_content"/>
</LinearLayout>

答案 2 :(得分:0)

问题是布局中元素的顺序。将EditText高于它应该在RelativeLayout中隐藏的视图(工具栏),就像这样

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="pl.michalz.hideonscrollexample.PartOneActivity">

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    android:layout_alignTop="@+id/editTextSearch" />

<EditText
    android:id="@+id/editTextSearch"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_marginTop="55dp"
    android:hint="Input text" />

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"/>

</RelativeLayout>