【问题标题】:Android fastest drawing layout for a list rowAndroid最快的列表行绘图布局
【发布时间】:2013-01-18 12:15:35
【问题描述】:

我正在创建一个想要平滑滚动的列表视图。

我目前正在设计我的 XML 文件中的行,并且想知道选择哪个布局视图。我想要一个类似这样的行布局:

我的左侧将有一个ImageView,然后是两行TextView 相互重叠。 (那张图片上的球体不需要

那么,最有效(在绘图方面)使用的布局是什么?我正在考虑的选项是TableLayoutRelativeLayoutLinearLayout(水平)。


额外信息: 我的列表适配器已经非常高效,并使用了视图模式以及TextView 文本的预计算和其他优化来获得最大的效率。这个问题专门针对列表行的布局,但非常感谢您的帮助!

【问题讨论】:

  • Android 和 ListView 本身都经过了很好的优化,因此您不必担心这样的事情。选择你想要的:)
  • 正如下面的答案中提到的,RelativeLayout 是最好的解决方案。如果你想让 listView 高效,你应该考虑使用 ViewHolder Pattern 来减少使用 'findViewById()' 方法。很好的解释放在这里jmanzano.es/blog/?p=166
  • @MP23 您发布的链接现在已损坏。我已经更改了我的博客网址jmanzano.me/efficient-listviews-in-android-viewholder-pattern-2

标签: android xml listview optimization layout


【解决方案1】:

您可以尝试:

  1. 使用Spannable 将所有文本显示为一个TextView 中的标记。
  2. 右边的图片(?)可以设置为上面CompoundDrawable的右边TextView
  3. 如果背景中没有花哨的渐变,请设置 android:drawingCacheQuality="low"
  4. 不要在 Adapter 的 getView() 中做一些繁重的事情,如果你做了 Override 它。

【讨论】:

    【解决方案2】:

    我建议您使用RelativeLayout,以便您可以选择放置每个组件的位置。基本上,在左侧是图像视图,然后是 2 个文本视图,一个在另一个之上。 (可选)右侧的图像。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="100dip"
        android:padding="3dip" >
    
        <ImageView
            android:id="@+id/image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dip"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:src="@drawable/icon" />
    
        <TextView
            android:id="@+id/first_txt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/image"
            android:layout_toRightOf="@+id/image"
            android:textSize="30dp"
            android:textColor="#ffffff"
            android:text="Medium Text" />
    
        <TextView
            android:id="@+id/second_txt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/first_txt"
            android:layout_below="@+id/first_txt"
            android:textSize="20dp"
            android:textColor="#0481ab"
            android:text="Small Text"/>
    
    
        <ImageView
            android:id="@+id/right_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dip"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@drawable/icon" />
    
    
    
    </RelativeLayout>
    

    【讨论】:

    • A RelativeLayout 确实是这种布局在性能方面的最佳选择。如果您想知道原因,请查看此blog post
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多