如何在选项卡式布局中显示 Android gridview

Posted

技术标签:

【中文标题】如何在选项卡式布局中显示 Android gridview【英文标题】:How to display an Android gridview within a tabbed layout 【发布时间】:2010-12-02 15:36:52 【问题描述】:

您好,我正在设置一个 android 应用程序,并且正在使用选项卡式界面。我想要三个选项卡,一个基于文本的选项卡(关于),一个 webkit 选项卡(商店)和一个网格视图选项卡的图像(画廊),就像在Gridview tutorial 中一样。

我的文本和 webkit 选项卡工作正常,但我无法找出在选项卡中格式化 gridview 的最佳方法。以tabbed interface tutrial 为例,我在主类的 onCreate() 事件中声明选项卡的内容。

public class Woodroid extends TabActivity  
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost();  // The activity TabHost
        tabHost.setCurrentTab(0);

        TabHost.TabSpec spec;  // Resusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        // Create an Intent to launch an Activity for the tab (to be reused)
        intent = new Intent().setClass(this, AboutActivity.class);

        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("about").setIndicator("",
                          res.getDrawable(R.drawable.ic_tab_about))
                      .setContent(intent);
        tabHost.addTab(spec);

        // Do the same for the other tabs
        intent = new Intent().setClass(this, StoreActivity.class);
        spec = tabHost.newTabSpec("store").setIndicator("Store",
                res.getDrawable(R.drawable.ic_tab_store))
            .setContent(intent);
        tabHost.addTab(spec);


        intent = new Intent().setClass(this, GalleryActivity.class);
        spec = tabHost.newTabSpec("gallery").setIndicator("Gallery",
                          res.getDrawable(R.drawable.ic_tab_gallery))
                      .setContent(intent);
        tabHost.addTab(spec);


        tabHost.setCurrentTab(0);
    

那么在 GalleryActivity.java 我有以下内容

public class GalleryActivity extends Activity 
  public void onCreate(Bundle savedInstanceState) 
         super.onCreate(savedInstanceState);

            GridView gridview = new GridView(this);
            gridview.setAdapter(new ImageAdapter(this));

            setContentView(gridview);
     

这是来自 gridview 教程的解释。那么缺少的是gridview布局定义。看来我可以强制一些属性,比如 gridview.setNumColumns(3); 但这不允许从 gridview 版本的 /layout/main.xml 中获得更灵活的外观

android:layout_ 
android:layout_
android:columnWidth="90dp"
android:numColumns="auto_fit"

【问题讨论】:

【参考方案1】:

确保使用 FrameLayout,c.f. tabbed example,设置 android:layout_ 而不是 fill_parent,然后在每个对象元素上使用重力和重量,直到它看起来像你想要的那样。

【讨论】:

这完成了包装内容的工作。谢谢!但是还有其他元素并非对所有选项卡都通用。像我会在java而不是xml中明确设置默认图像大小、列宽等吗? 是的,对于那些我觉得最好把它们放在java而不是xml中的人。

以上是关于如何在选项卡式布局中显示 Android gridview的主要内容,如果未能解决你的问题,请参考以下文章

在选项卡式 android 程序中显示列表

在选项卡式视图下显示列表

选项卡式活动中未显示工具栏标题

Java Swing:如何更改 Grid 布局中一行的大小并允许它仅水平而不是垂直地动态调整大小?

约束布局中的 ViewPager 选项卡式活动在底部被剪切以用于 recyclerview

如何在 XAML 中居中​​选项卡式页面选项卡图标和/或文本?