2014-11-11 2 views
2

На Android documentation значение по умолчанию для overScrollMode равно OVER_SCROLL_ALWAYS.Значение по умолчанию overScrollMode в Android View

Но мой ListView, похоже, не следовал этому поведению. Он показывает только поведение сверхпрокрутки, когда в списке имеется достаточно содержимого для прокрутки.

Я попытался посмотреть в Android код и обнаружил, что overScrollMode установлен в OVER_SCROLL_IF_CONTENT_SCROLLS в View.java ref

Я также проверил код ListView и AbsListView, чтобы проверить, если overscrollmode был быть установлен в любом месте, но я ничего не мог найти. Единственное место, где установлен overScrollMode, находится в View.java.

Означает ли это, что документация для Android неверна? Должен ли я явно указывать overScrollMode на «всегда» в моем списке?

ответ

4

Да, документация на Android на самом деле неверна. Я подтвердил это. Как вы можете видеть в приведенном ниже коде из Android-источника, overcrolling устанавливается по умолчанию 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; 
    } 
} 
Смежные вопросы