我正在创建一个自定义视图来表示某种内容。我希望这个内容可以滚动(垂直),我想在滚动过程中看到标准滚动条。为了做到这一点,我将以下代码包含在我的自定义视图的cinstructor中:
setVerticalScrollBarEnabled(true);
setHorizontalScrollBarEnabled(false);
TypedArray a = context.obtainStyledAttributes(R.styleable.View);
initializeScrollbars(a);
a.recycle();
现在,这个R.stylable.View
如下:
<declare-styleable name="View">
<attr name="android:fadeScrollbars"/>
<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"/>
</declare-styleable>
此代码适用于每个Android设备。除了 Sony Xperia Z ,每次遇到NumberFormatException
initializeScrollbars(a)
时都会Caused by: java.lang.NumberFormatException: Invalid int: "25.0dip"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parse(Integer.java:375)
at java.lang.Integer.parseInt(Integer.java:366)
at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:122)
at android.content.res.TypedArray.getInt(TypedArray.java:254)
at android.view.View.initializeScrollbars(View.java:4172)
at TheCustomViewIAmTryingToCreate.<init>(MyCustomView.java:164)
... 36 more
:
at android.view.View.initializeScrollbars(View.java:4172)
我可以看到它错误地解释了一些XML定义的值,但我无法准确地得到哪一个。这一行:
View
指出我查看initializeScrollbars
课程的来源,以便找到原因。问题是{{1}}方法(官方Android来源)与 4172 行无关。显然索尼(在某种程度上)在他们的设备上修改了Android,现在使我的代码崩溃。
有没有人知道导致此类问题的原因,或者我在哪里可以找到安装在 Xperia Z1(C6903)上的Android来源来查看此问题的原因?
编辑:这也发生在 Xperia Tablet Z(SGP321)和 Xperia ZL(C6503)
答案 0 :(得分:0)
我仍不知道造成此次崩溃的原因,但我已设法修复它。我最终扩展了R.stylable.View
以及更多属性:
<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>
也许这太多了,但我的应用程序在此之后不再崩溃。
虽然没有必要了,但如果有人知道我哪里出错了,请不要让我失望。