我已经实现了一个自定义的布局,它扩展了RelativeLayout。它显示了许多在运行时创建的不同元素,并且可以在两个方向上使用scrollTo()和scrollBy()进行滚动。滚动已经起作用了,现在我想添加标准的Android滚动条。
使用ScrollView是不可能的,因为我需要Layout在2个维度上可滚动,所以我尝试按照这里描述的方式来做:Android: Enable Scrollbars on Canvas-Based View 我已经使用一些(虚假的)值实现了所有的compute*方法并启用了滚动条。但我仍然无法让它们显示出来。有什么想法可能是问题吗?
在各种邮件列表和SO中有大量类似的问题,但无论何处,答案似乎都是“1.调用setHorizontalScrollbarEnabled(true),2.实现所有的compute*方法,3.调用awakenScrollbars()”。据我所知,我已经做到了这一点,甚至尝试使用initializeScrollbars(),但什么也没有发生,文档也没有提供任何帮助。
使用ScrollView是不可能的,因为我需要Layout在2个维度上可滚动,所以我尝试按照这里描述的方式来做:Android: Enable Scrollbars on Canvas-Based View 我已经使用一些(虚假的)值实现了所有的compute*方法并启用了滚动条。但我仍然无法让它们显示出来。有什么想法可能是问题吗?
在各种邮件列表和SO中有大量类似的问题,但无论何处,答案似乎都是“1.调用setHorizontalScrollbarEnabled(true),2.实现所有的compute*方法,3.调用awakenScrollbars()”。据我所知,我已经做到了这一点,甚至尝试使用initializeScrollbars(),但什么也没有发生,文档也没有提供任何帮助。
public NodeLayout(Context context) {
super(context);
setVerticalScrollBarEnabled(true);
setHorizontalScrollBarEnabled(true);
TypedArray a = context.obtainStyledAttributes(R.styleable.View);
initializeScrollbars(a);
a.recycle();
}
@Override
protected int computeHorizontalScrollExtent() {
return 5;
}
@Override
protected int computeHorizontalScrollOffset() {
return 10;
}
@Override
protected int computeHorizontalScrollRange() {
return 50;
}
@Override
protected int computeVerticalScrollExtent() {
return getHeight() / 2;
}
@Override
protected int computeVerticalScrollOffset() {
return getHeight() / 2;
}
@Override
protected int computeVerticalScrollRange() {
return getHeight();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
awakenScrollBars();
invalidate();
return true;
}
这是我的 attrs.xml 文件的样子:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="View">
<attr name="android:background"/>
<attr name="android:clickable"/>
<attr name="android:contentDescription"/>
<attr name="android:drawingCacheQuality"/>
<attr name="android:duplicateParentState"/>
<attr name="android:fadeScrollbars"/>
<attr name="android:fadingEdge"/>
<attr name="android:fadingEdgeLength"/>
<attr name="android:fitsSystemWindows"/>
<attr name="android:focusable"/>
<attr name="android:focusableInTouchMode"/>
<attr name="android:hapticFeedbackEnabled"/>
<attr name="android:id"/>
<attr name="android:isScrollContainer"/>
<attr name="android:keepScreenOn"/>
<attr name="android:longClickable"/>
<attr name="android:minHeight"/>
<attr name="android:minWidth"/>
<attr name="android:nextFocusDown"/>
<attr name="android:nextFocusLeft"/>
<attr name="android:nextFocusRight"/>
<attr name="android:nextFocusUp"/>
<attr name="android:onClick"/>
<attr name="android:padding"/>
<attr name="android:paddingBottom"/>
<attr name="android:paddingLeft"/>
<attr name="android:paddingRight"/>
<attr name="android:paddingTop"/>
<attr name="android:saveEnabled"/>
<attr name="android:scrollX"/>
<attr name="android:scrollY"/>
<attr name="android:scrollbarAlwaysDrawHorizontalTrack"/>
<attr name="android:scrollbarAlwaysDrawVerticalTrack"/>
<attr name="android:scrollbarDefaultDelayBeforeFade"/>
<attr name="android:scrollbarFadeDuration"/>
<attr name="android:scrollbarSize"/>
<attr name="android:scrollbarStyle"/>
<attr name="android:scrollbarThumbHorizontal"/>
<attr name="android:scrollbarThumbVertical"/>
<attr name="android:scrollbarTrackHorizontal"/>
<attr name="android:scrollbarTrackVertical"/>
<attr name="android:scrollbars"/>
<attr name="android:soundEffectsEnabled"/>
<attr name="android:tag"/>
<attr name="android:visibility"/>
</declare-styleable>
</resources>
我正在开发 Android 3.0。