滚动视图在包含长文本视图时,在ICS(Android 4.0)上非常缓慢。

4
这是我的问题,我正在开发一个新闻应用程序,使用ScrollView包装TextView来显示新闻内容。但是我发现当TextView很长时,在Android 4.0 ICS上滚动非常缓慢,而且文本越长,滚动速度就越慢。而在Android 2.3设备上,一切都像预期的那样快。
我不知道这是否真的是系统错误,因为我发现在Android项目中报告了类似的问题(类似问题的链接)
这是我的布局:
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:id="@id/lst_news_details"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/list_background"
        android:fadingEdge="none"
        android:gravity="center" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:layout_marginTop="10dp"
                android:orientation="vertical" >

                <TextView
                    android:id="@id/tv_news_details_title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/Detail_Title"/>

                <TextView
                    android:id="@id/tv_news_details_category"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/Detail_Category"/>

                <TextView
                    android:id="@id/tv_news_details_created_at"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="10dp"
                    style="@style/Detail_Time"/>

                <include layout="@layout/detail_horizontal_divideline" />

                <ImageView
                    android:id="@id/img_news_details_image"
                    style="@style/Detail_Picture"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="6dp"
                    android:layout_gravity="center_horizontal"
                    android:contentDescription="@string/image_contentDescription"/>

                <TextView
                    android:id="@id/tv_news_details_context"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:layout_gravity="center_horizontal"
                    style="@style/Detail_Content"/>

            </LinearLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="10dip" />

        </LinearLayout>

    </ScrollView>

     <!-- actionbar shadow -->
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/action_bar_shadow"
        >
    </LinearLayout>

</FrameLayout>

和我的style.xml

<style name="Detail_Title">
     <item name="android:textColor">@color/list_item_title</item>
     <item name="android:textSize">18sp</item>
     <item name="android:shadowColor">@color/list_item_text_shadow</item>
     <item name="android:shadowDx">0</item>
     <item name="android:shadowDy">2</item>
     <item name="android:shadowRadius">2</item>
 </style>

 <style name="Detail_Category">
     <item name="android:textColor">@color/list_item_category</item>
     <item name="android:textSize">14sp</item>
     <item name="android:shadowColor">@color/list_item_text_shadow</item>
     <item name="android:shadowDx">0</item>
     <item name="android:shadowDy">2</item>
     <item name="android:shadowRadius">2</item>
 </style>

 <style name="Detail_Time">
     <item name="android:textColor">@color/list_item_time</item>
     <item name="android:textSize">14sp</item>
     <item name="android:shadowColor">@color/list_item_text_shadow</item>
     <item name="android:shadowDx">0</item>
     <item name="android:shadowDy">2</item>
     <item name="android:shadowRadius">2</item>
 </style>

 <style name="Detail_Content">
     <item name="android:textColor">@color/detail_content_text</item>
     <item name="android:textSize">16sp</item>
     <item name="android:autoLink">all</item>
     <item name="android:shadowColor">@color/list_item_text_shadow</item>
     <item name="android:shadowDx">0</item>
     <item name="android:shadowDy">2</item>
     <item name="android:shadowRadius">2</item>
 </style>

 <style name="Detail_Picture">
    <item name="android:layout_gravity">center</item>
    <item name="android:gravity">center</item>
    <item name="android:background">@drawable/image_frame</item>
 </style>

顺便提一下,我已经设置了
android:minSdkVersion="7" android:targetSdkVersion="14"
但还没有设置硬件加速标志。
有什么解决办法吗?请帮帮我,谢谢!
2个回答

10

好的,我已经自己找到了解决方案。

只需在manifest.xml中设置android:hardwareAccelerated="false"

对于原因仍有些困惑,等待解释。


感谢您的修复。我经历了和其他人一样的问题。看起来关于这个问题的一个 bug 报告已经在一年前被提交了。http://code.google.com/p/android/issues/detail?id=22514 - Ray Zhou
2
不幸的是,“修复”改善了滚动,但并没有完全解决问题。在我的Galaxy Nexus上仍然很卡顿/抖动。 - StackOverflowed

4

似乎在XML中不起作用。只能通过编程使用setLayerType(View.LAYER_TYPE_SOFTWARE, null)来实现。 - 0101100101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接