Android常用适配器控件(4)

3)下拉框控件Spinner

Spinner就像一个下拉菜单,通常用于从相对较短的选择列表中进行选择,如果选择列表太长,会自动添加一个滚动条。我们可以通过XML布局简单实例化Spinner。

<Spinner
 Android:id="@+id/spinner"
 android:prompt="@string/spinnerPrompt"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

下拉框控件在静止时显示一个值,当用户单击小箭头时,显示一个列表提供给用户选择一个新值。填充此列表的方式和填充其他列表控件的方式相同,都是使用适配器。

public class MainActivity extends Activity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

setContentView(R.layout.spinner);
 
  Spinner spinner = (Spinner)this.findViewById(R.id.spinner);
  ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets, android.R.layout.simple_spinner_item);
  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  spinner.setAdapter(adapter);
 }
}

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array>
     <item>Monday</item>
     <item>Tuesday</item>
     <item>Wednesday</item>
     <item>Thursday</item>
     <item>Friday</item>
     <item>Saturday</item>
     <item>Sunday</item>
    </string-array>
</resources>

代码中首先通过setContentView来设置当前布局,然后找到相应的Spinner。通过ArrayAdapter.createFromResource()定义了微调框在正常模式下的外观,然后使用adapter.setDropDownViewResource()设置弹出列表模式的微调框。

4)水平滚动的列表控件Gallery

Gallery控件是一种可水平滚动的列表控件,焦点始终位于列表中央,此控件通常在触摸屏模式下用在相册,既可以通过XML布局也可以通过代码实例化Gallery。

<Gallery
 android:id="@+id/gallery"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
/>

Gallery控件通常用于显示图像,所以适配器可能会针对图像特殊化,为此Android提供了一个名为BaseAdapter的抽象类,我们通过扩展它,自定义适配器。

Demo:

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/gridView"
    android:padding="10dp"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:gravity="center">
</GridView>

activity_main.xml中有一个主要布局,其中包含了一个GridView定义,我们需要从该布局获取GridView的引用。然后实例化一个MyAdapter,继承于BaseAdapter。

public class MainActivity extends Activity {

@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

GridView gv = (GridView)this.findViewById(R.id.gridView);
  MyAdapter adapter = new MyAdapter(this);
  gv.setAdapter(adapter);
 
 }
 
 public class MyAdapter extends BaseAdapter {
  private int convertViewCounter = 0;
  private Context context;
  private LayoutInflater inflater;
 
  private int imgId[] = {R.drawable.img1, R.drawable.img2, R.drawable.img3,
    R.drawable.img4, R.drawable.img5, R.drawable.img6};
  private Bitmap[] images = new Bitmap[imgId.length];
  private Bitmap[] Thumbs = new Bitmap[imgId.length];
 
  class ViewHolder {
   ImageView image;
  }
 
  public MyAdapter(Context context) {
   // TODO Auto-generated constructor stub
   this.context = context;
   inflater = LayoutInflater.from(context);
   
   for(int i = 0; i < imgId.length; i++) {
    images[i] = BitmapFactory.decodeResource(context.getResources(), imgId[i]);
    Thumbs[i] = Bitmap.createScaledBitmap(images[i], 100, 100, false);
   }
  }
 
  @Override
  public int getCount() {
   // TODO Auto-generated method stub
   return imgId.length;
  }

@Override
  public Object getItem(int position) {
   // TODO Auto-generated method stub
   return images[position];
  }

@Override
  public long getItemId(int position) {
   // TODO Auto-generated method stub
   return position;
  }

@Override
  public View getView(int position, View convertView, ViewGroup parent) {
   // TODO Auto-generated method stub
   ViewHolder holder;
   if(convertView == null) {
    convertView = inflater.inflate(R.layout.gridimage, null);
    convertViewCounter++;
   
    holder = new ViewHolder();
    holder.image = (ImageView)convertView.findViewById(R.id.gridImageView);
    convertView.setTag(holder);
   } else {
    holder = (ViewHolder)convertView.getTag();
   }

holder.image.setImageBitmap(Thumbs[position]);
   return convertView;
  }
 }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ac3ea58bc59343cdedc51783b34ca330.html