-2

現在、データベースからデータのリストを読み込み、そのデータを GridView に表示するアプリを作成しています。データベースへの接続を作成し、GridView をプルバックして正常に設定しました。私が抱えている問題は、リスト行のレイアウトで setLayoutParams を設定できるようにして、画像をトリミングしてすべて同じサイズにし、他のデバイス サイズで問題が発生しないようにすることです。

私が持っているファイルは以下のとおりです。

list_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="15dp"
    android:orientation="vertical">



    <ImageView
        android:id="@+id/list_image"
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:src="@drawable/ic_launcher" />


</LinearLayout>

ListAdapter.java

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

public class DressesAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 

    public DressesAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return data.size();
    }

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.list_row, null);

        ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
        //thumb_image.setLayoutParams(new ImageView.LayoutParams(70, 70));

        HashMap<String, String> dress = new HashMap<String, String>();
        dress = data.get(position);

        imageLoader.DisplayImage(dress.get(DressListActivity.TAG_IMAGE), thumb_image);
        return vi;
    }
}

ListActivity.java

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

</GridView>

これを実行すると発生するエラーは次のとおりです。

04-06 14:02:18.260: E/AndroidRuntime(12798): java.lang.ClassCastException: android.widget.AbsListView$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams

この問題は本当に面倒なので、誰かがこの問題を修正するのを手伝ってくれることを願っています。よろしくお願いします:)

4

2 に答える 2

0

これは、デバイス全体に収まる 3 つの画像を含むグリッドを表示するために使用しているアプローチであり、それぞれのタイトルは TextView です。

すべてのデバイスで正しくフォーマットされます。

私の写真はすべて、高さ 300 ピクセル、幅 200 ピクセルなど、縦横比 1.5 の縦長です。(これは、サイジング機能に表示される 3.0 と 1.5 であり、必要に応じて変更されます)。

レイアウトにはポートレートを使用しています。

あなたがそれを機能させることができることを願っています、それはトリッキーです。これは私にとって非常にうまく機能します。

GridView とそのアダプターを次のように設定します。

// create grid and adapter
gridAdapter = new SET UP YOUR ADAPTER HERE; 
    grid = (GridView) findViewById(R.id.grid);
    grid.setAdapter(YOUR ADAPTER);
    grid.setFadingEdgeLength(0);
    int picHeight = Utils.getGridPicHeight(MainActivity.this);
    int picLength = (int) ((float)picHeight / 1.5);
    grid.setColumnWidth(picLength);

Utils.getGridPicHeight:

    public static int getGridPicHeight (Activity activity) { 
        DisplayMetrics dMetrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dMetrics);
        // give back a % of the screen width for the height
        final float WIDE = activity.getResources().getDisplayMetrics().widthPixels;
        int value = (int)(WIDE / 3.0f * 1.5f);
        return value;
}

非常に重要なことですが、アダプターでは、次のように画像を設定する必要があります。

        LinearLayout.LayoutParams params;

        int picHeight = Utils.getGridPicHeight(activity);
        int picLength = (int) ((float)picHeight / 1.5);
        params = new LinearLayout.LayoutParams(picLength,picHeight);
        params.gravity=Gravity.CENTER;
        params.height=picHeight;
        params.width=picLength;
        image.setLayoutParams(params);

grid_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
    />
    <TextView 
        android:id="@+id/imgTit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:typeface="sans"
        android:textStyle="normal"
        android:maxLines="1" 
        android:gravity="center" 
        android:layout_gravity="center">
    </TextView> 
</LinearLayout>

次に、LinearLayout 内の GridView で

<LinearLayout
        android:orientation="horizontal" 
        android:layout_width="wrap_content" 
        android:layout_height="fill_parent"
        android:layout_marginTop="2dip"
        android:layout_gravity="center"
    android:gravity="center">   
        <GridView
            android:id="@+id/grid"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:numColumns="3"
            android:horizontalSpacing="4dp"
            android:verticalSpacing="4dp"
            android:stretchMode="spacingWidthUniform"/>
</LinearLayout>
于 2013-04-06T13:52:19.740 に答える
0

これは単に間違ったサブクラスを ing したことExceptionが原因です。たぶん、明示的に書くのが最も簡単です。importLayoutParamsnew LinearLayout.LayoutParams(

無関係ですが、scaleType重宝ImageViewするかもしれません。

于 2013-04-06T13:08:03.127 に答える