use*_*373 2 android-listview android-overscoll android-view
根据Android 文档,overScrollMode的默认值为OVER_SCROLL_ALWAYS。
但是我的ListView似乎没有遵循这种行为。仅当有足够的内容在列表中滚动时,它才会显示过度滚动行为。
我尝试查看Android代码,发现View.java ref中的overScrollMode设置为OVER_SCROLL_IF_CONTENT_SCROLLS
我还检查了ListView和AbsListView的代码,以检查是否在任何地方都设置了overscrollmode,但是我什么也找不到。设置overScrollMode的唯一位置是在View.java中。
这是否意味着与此有关的Android文档不正确?我是否必须在列表视图中将overScrollMode显式设置为“ always”?
是的,Android文档实际上是不正确的。我确认了 如您在以下Android源代码中所见,默认情况下,过度滚动设置为if_content_scrolls。
/**
* Simple constructor to use when creating a view from code.
*
* @param context The Context the view is running in, through which it can
* access the current theme, resources, etc.
*/
public View(Context context) {
mContext = context;
mResources = context != null ? context.getResources() : null;
mViewFlags = SOUND_EFFECTS_ENABLED | HAPTIC_FEEDBACK_ENABLED;
// Set some flags defaults
mPrivateFlags2 =
(LAYOUT_DIRECTION_DEFAULT << PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT) |
(TEXT_DIRECTION_DEFAULT << PFLAG2_TEXT_DIRECTION_MASK_SHIFT) |
(PFLAG2_TEXT_DIRECTION_RESOLVED_DEFAULT) |
(TEXT_ALIGNMENT_DEFAULT << PFLAG2_TEXT_ALIGNMENT_MASK_SHIFT) |
(PFLAG2_TEXT_ALIGNMENT_RESOLVED_DEFAULT) |
(IMPORTANT_FOR_ACCESSIBILITY_DEFAULT << PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
setOverScrollMode(OVER_SCROLL_IF_CONTENT_SCROLLS);
mUserPaddingStart = UNDEFINED_PADDING;
mUserPaddingEnd = UNDEFINED_PADDING;
if (!sCompatibilityDone && context != null) {
final int targetSdkVersion = context.getApplicationInfo().targetSdkVersion;
// Older apps may need this compatibility hack for measurement.
sUseBrokenMakeMeasureSpec = targetSdkVersion <= JELLY_BEAN_MR1;
// Older apps expect onMeasure() to always be called on a layout pass, regardless
// of whether a layout was requested on that View.
sIgnoreMeasureCache = targetSdkVersion < KITKAT;
sCompatibilityDone = true;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8444 次 |
| 最近记录: |