GridView
常に最初の列にテキストがあり、他の列を画像用に予約する Android 用のカスタムを作成したいと考えています。例えば:
Text Text Text
Text Image Image
Text Image Image
Text Image Image
Text Image Image
.....
.....
Text Image Image
これが可能かどうかはわかりません。可能であれば、どのように実装すればよいですか?
GridView
常に最初の列にテキストがあり、他の列を画像用に予約する Android 用のカスタムを作成したいと考えています。例えば:
Text Text Text
Text Image Image
Text Image Image
Text Image Image
Text Image Image
.....
.....
Text Image Image
これが可能かどうかはわかりません。可能であれば、どのように実装すればよいですか?
非常に可能です。やりたいこと、それが適用される場所について考え、適切な領域にコードを追加するだけです。
例えば:
ステップ 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
カスタム レイアウトを作成し、それをビューとして使用し、上記の選択コードで必要に応じて変更することも検討できます。
あなたの質問に答えるために、はい、それは可能です。
カスタム グリッド ビューについては、このチュートリアルを参照してください。
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;
}
}