Android EditText's container (RecyclerView) au

2020-04-08 06:55发布

I got a RecyclerView whose element contains a EditText widget.

1.currently focusing on the second EditText,the first EditText is partly showed on the screen. the first EditText is partly showed

2.when click the first EditText, it got focus, then RecyclerView would automatically scroll down to fully show the first EditText. RecyclerView automatically scroll down when first EditText got focused

This is great,but what I want is RecyclerView should not automatically scroll. Any solution? thanks!

2条回答
可以哭但决不认输i
2楼-- · 2020-04-08 07:43

Actually, there is a scroll state of RecycleView that you can control like this;

Create your own LayoutManager and override the scrollHorizontallyBylike this.

@Override
    public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
        int nScroll = 0;
        // Do not let auto scroll 
        if (recyclerView.getScrollState() != RecyclerView.SCROLL_STATE_SETTLING){
          nScroll = super.scrollHorizontallyBy(dx, recycler, state);
        } 
}

So, what is the SCROLL_STATE_SETTLING?

The RecyclerView is currently animating to a final position while not under outside control.

查看更多
孤傲高冷的网名
3楼-- · 2020-04-08 07:46

I finally fixed it by disable the RecyclerView from scrolling except it receive a touch event.

first, I custom a LayoutManager:

@Override
public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {

    if(!horizontal) {
        return 0;
    }

@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
    if(!vertical) {
        return 0;
    }

when receive click event : I set horizontal and vertical to false ,these cause RecyclerView cannot scroll any more!

and I subClass The recyclerView and Override onTouchEvent:

    public boolean onTouchEvent(MotionEvent e) {

    //we enable scrollHorizontallyBy and scrollVerticallyBy only in Touch Event, set layoutManager vertical and horizontal to true
    ......

    return super.onTouchEvent(e);
}

so MyRecyclerView cannot scroll when click to find that the focus child is an EditText. But it can scroll when Receive Touch Event!

查看更多
登录 后发表回答