如何在Android中创建类似书架的视图?

16
如何在Android中创建一个书架视图,以显示任意行中的几本书?此外,它应该具有像Moon+Reader应用程序一样的水平和垂直功能。
我可以编写一个水平移动的书架视图,但它并没有完全起作用。我使用了一个包含图像、文本和按钮的视图项的xml文件。我编写了一个扩展AdapterView的类来创建一个自定义的ListView,我称之为“书架视图”。不幸的是,我的程序只显示一行,并且我不能将其用于多行。

enter image description here


1
你能展示一下你目前取得的成果吗? - user874649
当然,我曾经使用一个xml文件来展示包含图像、文字和按钮的项目。我编写了一个扩展AdaptorView的类来创建自定义的列表视图,我称之为“书架视图”。不幸的是,我的程序只显示了一行,我不能用它来展示多行。 你明白了吗? - azad
1个回答

20

Last Updated: 现在,我可以检测到一种新的方法来创建比之前解决方案更好的书架视图。我在CodeProject中进行了描述。

顺便提一下,在这个应用程序中,我使用了两个类:

  • HorizontalListView类扩展了AdapterView。它是从GitHub下载的。

  • Quaere库使用方式几乎与.Net中的Linq2Object相同。你可以在这里下载。


Apr 22 '12:

有一些方法可以实现带有两个功能(水平和垂直滚动)的书架视图。我尝试编写一个可以动态运行的程序。这个示例应用程序有一个XML文件和一个showShelfView java类。

所以您可以查看我的应用程序:

main XML文件:首先,在main.XML中添加以下代码

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/sclView">
    <TableLayout
            android:id="@+id/tblLayout"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
           android:padding="0dp">
    </TableLayout>
</ScrollView>

showShelfView类: 内部的TableLayout添加了多个与行数相等的HorizontalScroll。每个TableRow中还要添加图像。

不要忘记为行背景设置书架图片:

在此输入图片描述

public class showShelfView extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        int numRow = 4;
        int numCol = 8;

        TableLayout tblLayout = (TableLayout) findViewById(R.id.tblLayout);

        for(int i = 0; i < numRow; i++) {
            HorizontalScrollView HSV = new HorizontalScrollView(this);
            HSV.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

            TableRow tblRow = new TableRow(this);
            tblRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            tblRow.setBackgroundResource(R.drawable.bookshelf);

            for(int j = 0; j < numCol; j++) {
            ImageView imageView = new ImageView(this);
                imageView.setImageResource(R.drawable.book1);

                TextView textView = new TextView(this);
                textView.setText("Java Tester");
                textView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

                tblRow.addView(imageView,j);
            }

            HSV.addView(tblRow);
            tblLayout.addView(HSV, i);
        }
    }

}

@omidnaz,我在指定的链接上找不到Quaere库,我已经到处搜索了,但仍然没有找到...您能告诉我在哪里可以获取这个库吗? - Vivek Singh
@vivek-singh:你应该使用SVN获取它的源代码。确切的地址是“http://quaere.codehaus.org/Get+Involved”。 - Omid Nazifi
@omidnazifi 我浪费了整整一天都没能解决怎么才能获取你给的链接里的库。有许多和 Quaere 相关的链接,但是没有下载或保存“Quaere Library”的选项。请帮帮我,告诉我如何将 Quaere 库导入到我的项目中。 - Vivek Singh
1
@vivek-singh:正如我所提到的,如果你想获取它,你应该使用SVN并将此URL写入SVN软件"http://svn.codehaus.org/quaere/trunk/"。但是你也可以从code-project下载我的代码,我已经将Lib添加到其中。 - Omid Nazifi
让所有屏幕都可用,我发现很困难!真的很混乱,不知道该使用tblLayout、tblRow来填充/匹配父级? - LOG_TAG
1
@Subra 我已经写了一种新的方法并更新了我的解决方案。请注意第一行“最后更新”。在新的方法中,我使用了ListView - Omid Nazifi

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