-2

GridView常に最初の列にテキストがあり、他の列を画像用に予約する Android 用のカスタムを作成したいと考えています。例えば:

Text Text  Text 
Text Image Image
Text Image Image
Text Image Image
Text Image Image
     .....
     .....
Text Image Image

これが可能かどうかはわかりません。可能であれば、どのように実装すればよいですか?

4

2 に答える 2

1

非常に可能です。やりたいこと、それが適用される場所について考え、適切な領域にコードを追加するだけです。

例えば:

ステップ 1: 列の数を把握/把握するGridView適切なメンバー関数呼び出し ( GridView.getNumColumns - この呼び出しを使用するには、API レベル 11 以上である必要があることに注意してください) によって、実行時に現在いくつの列がある かを取得します。それ以外の場合は、セットアップでGridView.setNumColumnsを実行する必要があります。最後のオプションは、列の数がどうあるべきかを把握し、これをonMeasureまたは同様に設定することOverridesです。

ステップ 2: getView コードを作成する選択したアダプター のコードでgetViewは、何をすべきかを理解するための簡単な計算ができるはずです。例えば:

public View getView(int position, View convertView, ViewGroup parent) {
    // Either have numOfColumns saved as a global variable or get it here depending on your method

    // Create your view for the item
    View ret;

    if (position < numOfColumns || position % numOfColumns == 0) { 
        // Aka if first row OR if first column
        TextView tv = new TextView(mContext);

        // Do all your textview formatting etc etc....

        ret = tv;
    } else {
        ImageView iv = new ImageView(mContext);

        // Do all your imageview layout stuff etc etc....

        ret = iv;
    }

    return ret;
}

注: これは、単にブレインストーミングを行ったり、大声で考えたりして、作業を開始するためのものです。次のようなものが欠けています(スクロールするViews場合にさまざまなタイプのビューをリサイクルするためのメモリ最適化の賢い方法)。GridViewカスタム レイアウトを作成し、それをビューとして使用し、上記の選択コードで必要に応じて変更することも検討できます。

あなたの質問に答えるために、はい、それは可能です。

于 2012-07-23T02:35:22.740 に答える
0

カスタム グリッド ビューについては、このチュートリアルを参照してください。

http://www.mkyong.com/android/android-gridview-example/

        gridView = (GridView) findViewById(R.id.gridView1);

        gridView.setAdapter(new ImageAdapter(this, MOBILE_OS));

        gridView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {
                Toast.makeText(
                   getApplicationContext(),
                   ((TextView) v.findViewById(R.id.grid_item_label))
                   .getText(), Toast.LENGTH_SHORT).show();

            }
        });




public class ImageAdapter extends BaseAdapter {
private Context context;
private final String[] mobileValues;

public ImageAdapter(Context context, String[] mobileValues) {
    this.context = context;
    this.mobileValues = mobileValues;
}

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

    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View gridView;

    if (convertView == null) {

        gridView = new View(context);

        // get layout from mobile.xml
        gridView = inflater.inflate(R.layout.mobile, null);

        // set value into textview
        TextView textView = (TextView) gridView
                .findViewById(R.id.grid_item_label);
        textView.setText(mobileValues[position]);

        // set image based on selected text
        ImageView imageView = (ImageView) gridView
                .findViewById(R.id.grid_item_image);

        String mobile = mobileValues[position];

        if (mobile.equals("Windows")) {
            imageView.setImageResource(R.drawable.windows_logo);
        } else if (mobile.equals("iOS")) {
            imageView.setImageResource(R.drawable.ios_logo);
        } else if (mobile.equals("Blackberry")) {
            imageView.setImageResource(R.drawable.blackberry_logo);
        } else {
            imageView.setImageResource(R.drawable.android_logo);
        }

    } else {
        gridView = (View) convertView;
    }

    return gridView;
}

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

@Override
public Object getItem(int position) {
    return null;
}

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

}
于 2012-07-23T04:40:33.267 に答える