Android 我的布局能提高效率吗?

Android 我的布局能提高效率吗?,android,performance,android-layout,Android,Performance,Android Layout,我有一个布局如下所示。它被代码膨胀并添加到HorizontalScrollView中,有时会增加几百次,从而导致内存问题 我想知道是否有什么办法可以提高效率?最初我使用的是LinearLayouts,用RelativeLayout代替它对滚动产生了巨大的影响。现在我想知道它是否可以进一步改进 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.c

我有一个布局如下所示。它被代码膨胀并添加到HorizontalScrollView中,有时会增加几百次,从而导致内存问题

我想知道是否有什么办法可以提高效率?最初我使用的是LinearLayouts,用RelativeLayout代替它对滚动产生了巨大的影响。现在我想知道它是否可以进一步改进

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="156dp"
    android:layout_height="254dp"
    android:paddingLeft="7dip"
    android:paddingRight="7dip">

    <FrameLayout android:id="@+id/button_frame"
    android:layout_width="156dp"
    android:layout_height="218dp">

    <ImageView android:id="@+id/button_bg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/image_bg"
        />

        <ImageView android:id="@+id/button_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="bottom|right"
        />

        <TextView android:id="@+id/button_select"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="2dip"
        android:layout_marginRight="2dip"
        android:background="@drawable/btn_selector_bg_selected"
        />

        <TextView android:id="@+id/button_selected"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginLeft="2dip"
        android:layout_marginRight="2dip"
        android:background="@drawable/title_bg_selected"/>

    </FrameLayout>

    <TextView
    android:id="@+id/button_title"
    android:layout_width="156dp"
    android:layout_height="36dp"
    android:textColor="#ffffff"
    android:singleLine="true"
    android:textSize="13sp"
    android:textStyle="bold"
    android:gravity="center_vertical|left"
    android:ellipsize="end"
    android:paddingLeft="30dip"
    android:paddingRight="5dip"
    android:layout_below="@id/button_frame"
    android:background="@drawable/title_bg"/>

</RelativeLayout>


ImageView按钮_图像是使用AQuery图像缓存填充的,因此我不确定是否还有更多可以改进图像处理方式的工作。但是任何关于改进的提示都非常受欢迎。

如果您可以使用ListView而不是HorizontalScrollView,那么您可以创建一个使用viewHolder模式的阵列适配器,它基本上允许您在列表视图中重复使用每个项目的视图。请看下面的内容以了解更多详细信息:

一般来说,在Android中优化布局的一个好方法是最小化容器之间的嵌套量。嵌套布局容器越深,框架在度量、布局和处理视图层次结构的事件时必须做的工作就越多

但我认为你可能问错了问题

水平滚动视图
垂直滚动视图
不适用于您要使用它们。他们的目的是保持一个基本上是静态的布局,并允许它滚动,如果必要的话,取决于屏幕的大小,它恰好运行

您需要一个基本相同视图的重复列表,用户可以滚动该列表。要使用的正确Android视图容器是
ListView
,或
AdapterView
的其他后代之一

ListView只注意创建/膨胀必要的子视图以填充屏幕上的空间,并在用户滚动时重新使用它们。这解决了您遇到的内存问题。它通过要求您将其与
适配器
配对来实现这一点,该适配器是一个包装显示的实际数据的对象,并根据需要为给定数据项创建正确的视图


由于您正在尝试进行水平滚动,您还可以查看
Gallery
(现在Android中已弃用)或更新的
ViewPager
类,这两个类都支持通过大量数据进行水平移动。

您尝试过使用吗?有趣的是,我不知道合并!除了下面建议的布局更改之外,我当然会尝试一下。谢谢,但是我可以水平使用它吗?这里有一个关于如何水平实现ListView的源代码(如果答案上的链接仍然有效):这是我尝试用google搜索它时的github repo:Hi。我已经使用上面的建议实现了HorizontalListView。我需要将onClick侦听器添加到列表中的项目中,因此尝试了Xavi的解决方案建议(链接到上面页面的第3条评论)。这对我来说几乎是完美的,但奇怪的是,如果我尝试通过拖动其中一个项目来滚动视图,列表会在滚动之前跳转。不幸的是,我似乎无法就这一问题发表评论,以询问出了什么问题。