【问题标题】:making responsive Gridview image with three columns制作具有三列的响应式 Gridview 图像
【发布时间】:2015-10-31 16:49:11
【问题描述】:

我使用 GridView 创建了一个具有三列的 android 应用程序。应用程序运行良好,但问题是 gridview 列没有完全填充视图,如下所示。

在 html 中,我们可以根据分辨率将 100% 设为响应式,我们如何在 android 中做出同样的响应

ma​​in.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="60px"
    android:gravity="center"
    android:horizontalSpacing="5px"
    android:numColumns="3"
    android:stretchMode="columnWidth"
    android:verticalSpacing="5px" />

mygrid.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="80px"
        android:layout_height="100px"
        android:background="#444444" >
    </ImageView>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="#669966"
        android:textStyle="bold" >
    </TextView>

</LinearLayout>

mygridActivity.java

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class mygridActivity extends Activity {

    private GridView g;

    Integer[] img = { R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher };

    String[] labels = { "Android", "Calender", "Sweety's Home", "New Calender",
            "Home", "Star", "GTalk", "Mick", "No Entry" };

    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        g = (GridView) findViewById(R.id.gridView1);
        g.setAdapter(new ImageAdapter(this));

        g.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {

                Toast.makeText(getBaseContext(), "Pic : " + (arg2 + 1), 1)
                        .show();
            }
        });

    }

    public class ImageAdapter extends BaseAdapter {
        Context mGrid;

        public ImageAdapter(Context g) {
            this.mGrid = g;
        }

        public int getCount() {
            return img.length;
        }

        public Object getItem(int position) {
            return position;
        }

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

        public View getView(int position, View convertView, ViewGroup parent) {

            View view;

            if (convertView == null) {
                view = new View(mGrid);
                LayoutInflater Inf = getLayoutInflater();
                view = Inf.inflate(R.layout.mygrid, null);
            } else {
                view = convertView;
            }

            ImageView iv = (ImageView) view.findViewById(R.id.imageView1);
            TextView tv = (TextView) view.findViewById(R.id.textView1);
            iv.setImageResource(img[position]);
            tv.setText(labels[position]);
            return view;

        }
    }
}

【问题讨论】:

  • 请贴出mygrid.xml的完整布局文件?
  • @ShadowDroid 我已经发布了

标签: java android eclipse android-layout gridview


【解决方案1】:

请将重力添加到线性布局中的视图,使其成为中心,而不是仅将 TextView 作为中心

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:gravity="center">
 //your code
</LinearLayout>

基于 cmets 的更新 要了解 dip/dp 和 px 之间的区别,您可以检查 http://developer.android.com/guide/topics/resources/more-resources.html#Dimensionhttp://developer.android.com/guide/practices/screens_support.html#density-independence
Alternativley 您可以在 dimens.xml 和 values-sw720dp/dimens.xml 中分别为手机和平板电脑指定宽度和高度
处理多屏请关注this

【讨论】:

  • 如何以百分比形式更改 ImageView 的宽度和高度,因为如果我在平板电脑中运行此应用程序,图像似乎非常小
  • 不要使用像素,而是使用 dp 作为宽度和高度...检查这个pixplicity.com/dp-px-converter 它会帮助你
  • 你能给我一个基于我给定代码的手机和平板电脑的示例 dimens.xml
  • 先说说你在问题中提到的问题是否解决了……想知道平板的配置
  • 是的,问题已经解决了,如果你能告诉我平板电脑和手机的dimens.xml就好了
猜你喜欢
  • 2015-05-14
  • 2021-08-20
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多