API 11 上的 View.canScrollVertical
Posted
技术标签:
【中文标题】API 11 上的 View.canScrollVertical【英文标题】:View.canScrollVertically on API 11 【发布时间】:2015-04-08 01:23:45 【问题描述】:有没有办法在 API 11 上使用类似于“View.canScrollVertically”的东西?
http://developer.android.com/reference/android/view/View.html#canScrollVertically(int)
谢谢。
【问题讨论】:
【参考方案1】:所以,实现很简单:
public boolean canScrollVertically(int direction)
final int offset = computeVerticalScrollOffset();
final int range = computeVerticalScrollRange() - computeVerticalScrollExtent();
if (range == 0) return false;
if (direction < 0)
return offset > 0;
else
return offset < range - 1;
因此您可以轻松地将其复制到您的代码中;但是,computeX()
方法受到保护。这里的一种解决方案是继承 View
并提供您自己的实现:
public class CustomView extends View
public CustomView(Context context)
super(context);
public CustomView(Context context, AttributeSet attrs)
super(context, attrs);
public CustomView(Context context, AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public boolean compatCanScrollVertically(int direction)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
return canScrollVertically(direction);
else
// TODO Remove when minSdkVersion >= 14
final int offset = computeVerticalScrollOffset();
final int range = computeVerticalScrollRange() - computeVerticalScrollExtent();
if (range == 0) return false;
if (direction < 0)
return offset > 0;
else
return offset < range - 1;
【讨论】:
【参考方案2】:查看了SwipeRefreshLayout的代码,view同样需要一个view是否可以向指定方向滚动。
/**
* @return Whether it is possible for the child view of this layout to
* scroll up. Override this if the child view is a custom view.
*/
public boolean canChildScrollUp()
if (android.os.Build.VERSION.SDK_INT < 14)
if (mTarget instanceof AbsListView)
final AbsListView absListView = (AbsListView) mTarget;
return absListView.getChildCount() > 0
&& (absListView.getFirstVisiblePosition() > 0 || absListView.getChildAt(0)
.getTop() < absListView.getPaddingTop());
else
return mTarget.getScrollY() > 0;
else
return ViewCompat.canScrollVertically(mTarget, -1);
scrollDown 也使用同样的方式。
【讨论】:
ViewCompat.canScrollVertically(recyclerView, -1)
本身似乎是 RecyclerView 的一个方便选项。
@android developer 它在 v4 支持库中。我已经在 v10 上对其进行了测试,但最好参考文档。请记住,它仅适用于 RecyclerView。以上是关于API 11 上的 View.canScrollVertical的主要内容,如果未能解决你的问题,请参考以下文章
IOS6.1 上的 Apple 802.11 API - 有人有正确的捆绑包吗?
Google Maps API V3 pinch-to-zoom 不适用于 Windows 8.1 预览版上的 IE 11