哪种布局用于2x2基于图像的菜单?

时间:2010-11-03 16:14:10

标签: android layout image-scaling

我正在尝试创建一个屏幕(纵向模式),显示4个图像(相同尺寸,旨在缩小以适应屏幕),占据整个屏幕,将屏幕分成象限(高,2x2网格) )。这将作为主菜单类型的活动,每个图像都应该是可点击的,以便让用户进行不同的活动。

我曾尝试在LinerLayout中使用GridView(使用Google的GridView教程中的大量内容),但无法正确地获取图像以填满整个屏幕。我在图像周围获得额外的边距和/或滚动整个屏幕。

我也尝试过使用TableLayout,在2行中分别放置2张图像。在视觉上,这完美地运作。不幸的是,在使用它时,我似乎无法在我的活动代码中引用TableLayout中的ImageView项(findViewById总是返回null)。

我觉得TableLayout真的不是“正确的事情”,但我想听听其他人的意见。无论哪种方式,应该怎样做才能实现我想要的功能?

感谢。

编辑1.1: 相对布局更适合排队。现在我只剩下findViewById总是返回null的问题。到目前为止,这是我的代码:

<?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="fill_parent"
                android:background="@color/homescreen_bgcolor"
        >
    <ImageView id="@+id/one"
               android:layout_alignParentTop="true"
               android:layout_alignParentLeft="true"
               android:src="@drawable/item1"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"/>
    <ImageView id="@+id/two"
               android:layout_alignParentTop="true"
               android:layout_alignParentRight="true"
               android:src="@drawable/item2"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"/>
    <ImageView id="@+id/three"
               android:layout_alignParentBottom="true"
               android:layout_alignParentLeft="true"
               android:src="@drawable/item3"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"/>
    <ImageView id="@+id/four"
               android:layout_alignParentBottom="true"
               android:layout_alignParentRight="true"
               android:src="@drawable/item4"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"/>
    </RelativeLayout>

public class HomeScreenActivity2 extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.homescreen2);

    ImageView imageView = (ImageView) findViewById(R.id.one);


    imageView.setClickable(true);
    imageView.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        Log.i("Test", "test");
      }
    });
  }
}

2 个答案:

答案 0 :(得分:1)

这是一个示例布局,展示如何使用RelativeLayout实现覆盖整个屏幕的2 X 2网格。

Router.route('/blog/:permalink'), {
  template: 'blogPost',
  name: 'blogPost',
  path: '/blog/:permalink',
  data: function () {
    return Blogs.findOne({ permalink: this.params.permalink, published: true });
  }
}

Router.route('blog'), {
  path: '/blog',
  waitOn: function () {
    return [
      Meteor.subscribe('blogs')
    ]
  }
}

以上布局导致:

答案 1 :(得分:0)

我认为TableLayout可能适合您,但我建议您尝试RelativeLayout。您可以使用

的组合将图像固定到四个象限
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"`

在您的图片上。

我在我的应用程序中做了类似的事情,我在主页上有多个按钮,可以启动相应的活动。 RelativeLayout工作正常,它避免了嵌套的Layout对象,这可能会妨碍渲染和布局过程中的性能(如果它失控)。