2

我正在创建一个关于某些地方的画廊。我的应用程序包含一个 ScrollView,其中包含大约 20 个不同位置的图像按钮,如果用户单击任何一个位置,他们将被带到另一个屏幕,其中包含有关该位置的信息。

到目前为止,我已经能够完成我的应用程序,我唯一的问题是地方的图像按钮一个接一个地放置,但我真正想要的是如果有空间的话,它们并排放置。例如,目前我的应用程序看起来像这样;

在此处输入图像描述

屏幕左右两侧浪费了很多空间,如果可能的话,我想让我的应用程序的布局像这样;

在此处输入图像描述

在陆地空间模式下,我想要这样的东西。 在此处输入图像描述

另外,如果可能的话,根据手机屏幕尺寸,我希望更多图像适合当前视图。例如,如果应用程序是在 10 英寸平板电脑中打开的,那么我想要更多而不是在同一行上有 2 个图像按钮。

我的 XML 代码是;

        <ImageButton
            android:id="@+id/london"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:contentDescription="@string/london"
            android:src="@drawable/london" />

        <ImageButton
            android:id="@+id/paris"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:contentDescription="@string/paris"
            android:src="@drawable/paris" />

....


        <ImageButton
            android:id="@+id/berlin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:contentDescription="@string/berlin"
            android:src="@drawable/berlin" />

感谢您的帮助,如果我没有清楚地解释自己,请告诉我,我会尽力解释得更好。

4

1 回答 1

0

这听起来像是 a 的用例GridView。好消息是您可能可以重复使用您的适配器,并且只需ListViewGridView. 这是文档的链接

- 编辑 -

如果你想替换 a ScrollView,你必须改变你的方法。

在您的 xml 文件中,您可以将所有 ImageButtons 替换为一个GridView

<GridView
    android:id="@+id/gvCities"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</GridView>

您应该有一个名为的新布局文件city_button

<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="200dp"
    android:contentDescription="@string/content_discription"
    android:layout_height="wrap_content" >

</ImageButton>

您应该创建一个新类:CityAdapter

import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;

import com.znappie.activities.R;

public class CityAdapter extends BaseAdapter {
    private int[] imageIds;
    private LayoutInflater inflate;
    private Resources resources;

    public CityAdapter(int[] imageIds, LayoutInflater inflate,
            Resources resources) {
        this.imageIds = imageIds;
        this.inflate = inflate;
        this.resources = resources;
    }

    @Override
    public int getCount() {
        return imageIds.length;
    }

    @Override
    public Object getItem(int position) {
        return imageIds[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflate.inflate(R.layout.city_button, parent);
        }
        ((ImageButton) convertView).setImageDrawable(resources
                .getDrawable(imageIds[position]));
        return convertView;
    }

}

然后你可以从你的主要活动中使用它:

int[] ids = {R.drawable.berlin, R.drawable.london, ...};
            GridView cities = (GridView) findViewById(R.id.gvCities);
            cities.setAdapter(new CityAdapter(ids, getLayoutInflater(), getResources()));
于 2015-01-11T11:12:02.990 回答