android:Sony Xperia:带滚动条的自定义视图

时间:2014-02-20 08:30:29

标签: android sony

我正在创建一个自定义视图来表示某种内容。我希望这个内容可以滚动(垂直),我想在滚动过程中看到标准滚动条。为了做到这一点,我将以下代码包含在我的自定义视图的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)

1 个答案:

答案 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>

也许这太多了,但我的应用程序在此之后不再崩溃。

虽然没有必要了,但如果有人知道我哪里出错了,请不要让我失望。