一、自动完成文本框 AutoCompleteTextView
当用户选择某个菜单项之后,AutoCompleteTextView会按用户选择自动填写该文本框。使用时必须为他设置一个Adapter,该Adapter封装了AutoCompleteTextView预设的提示文本。
eg.布局文件:
<AutoCompleteTextView  android:id="@+id/auto"android:layout_width="fill_parent" android:layout_height="wrap_content" android:completionHint="选择您喜欢的商品:"android:dropDownHorizontalOffset="10dp"android:completionThreshold="1"/>

为AutoCompleteTextView设置Adapter的代码:
String[] books = new String[]{"商品XXX","商品XXXXX","商品XXXXXX","商品XXXXXXXX"};// 创建一个ArrayAdapter,封装数组ArrayAdapter<String> aa = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, books);actv = (AutoCompleteTextView)findViewById(R.id.auto);// 设置Adapteractv.setAdapter(aa);


二、GridView
GridView和ListView组件有相同的父类AbsListView; 区别在于ListView只显示一列而GridView可显示多列。GridView也需要Adapter来提供显示的数据。
eg.布局文件:
<GridView  android:id="@+id/grid01"android:layout_width="fill_parent" android:layout_height="wrap_content" android:horizontalSpacing="1pt"android:verticalSpacing="1pt"android:numColumns="4"android:gravity="center"/>

为GridView提供Adapter
// 创建一个SimpleAdapterSimpleAdapter simpleAdapter = new SimpleAdapter(this,listItems// 使用/layout/cell.xml文件作为界面布局, R.layout.cell, new String[] { "image" },new int[] { R.id.image1 });grid = (GridView) findViewById(R.id.grid01);// 为GridView设置Adaptergrid.setAdapter(simpleAdapter);


三、ExpandableListView 可展开的列表项组件
是ListView的子类,在普通ListView上进行了扩展,把列表项分为几组,每组又可以包含多个子列表项。
//创建一个BaseExpandableListAdapter对象ExpandableListAdapter adapter = new BaseExpandableListAdapter(){int[] logos = new int[]{R.drawable.yf,R.drawable.sm,R.drawable.sp}; private String[] goodsTypes = new String[]{ "衣服", "数码", "食品"};private String[][] goods = new String[][]{{ "xxx", "xxx", "xxx", "xxx" },{ "yyy", "yyy", "yyy", "yyy" },{ "zzz", "zzz" , "zzz" }};// 获取指定组位置、指定子列表项处的子列表项数据@Overridepublic Object getChild(int groupPosition, int childPosition){return goods[groupPosition][childPosition];}@Overridepublic long getChildId(int groupPosition, int childPosition){return childPosition;}                          //返回特定组所包含的子列表项的数量@Overridepublic int getChildrenCount(int groupPosition){return goods[groupPosition].length;}private TextView getTextView(){AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 64);TextView textView = new TextView(ExpandableListViewTest.this);textView.setLayoutParams(lp);textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);textView.setPadding(36, 0, 0, 0);textView.setTextSize(20);return textView;}// 该方法决定每个子选项的外观@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent){TextView textView = getTextView();textView.setText(getChild(groupPosition, childPosition).toString());return textView;}// 获取指定组位置处的组数据@Overridepublic Object getGroup(int groupPosition){return goodsTypes[groupPosition];}                          //包含组列表的数量@Overridepublic int getGroupCount(){return goodsTypes.length;}@Overridepublic long getGroupId(int groupPosition){return groupPosition;}// 该方法决定每个组选项的外观@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent){LinearLayout ll = new LinearLayout(ExpandableListViewTest.this);ll.setOrientation(0);ImageView logo = new ImageView(ExpandableListViewTest.this);logo.setImageResource(logos[groupPosition]);ll.addView(logo);TextView textView = getTextView();textView.setText(getGroup(groupPosition).toString());ll.addView(textView);return ll;}@Overridepublic boolean isChildSelectable(int groupPosition,int childPosition){return true;}@Overridepublic boolean hasStableIds(){return true;}};ExpandableListView expandListView = (ExpandableListView) findViewById(R.id.list);expandListView.setAdapter(adapter);}


四、Spinner Gallery(画廊视图)
Spinner就是一个垂直的列表选择框。为Spinner指定android:entries属性或者为Spinner设置ArrayAdapter即可实现Spinner

Gallery显示一个水平的列表选择框。不过他没有android:entries属性,所以只能为他设置一个Adapter

五、ProgressBar进度条组件
进度条组件通常用于向用户显示某个耗时操作完成的百分比。可通过style属性来指定进度条的样式,如:
<ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content"style="@android:style/Widget.ProgressBar.Small"/>

下面通过填充数组来模拟一个耗时操作,以进度条来标识任务完成的百分比。
// 该程序模拟填充长度为200的数组private int[] data = new int[200];int hasData = 0;// 记录ProgressBar的完成进度int status = 0;ProgressBar bar , bar2;// 创建一个负责更新的进度的HandlerHandler mHandler = new Handler(){@Overridepublic void handleMessage(Message msg){// 表明消息是由该程序发送的if (msg.what == 0x111){bar.setProgress(status);bar2.setProgress(status);}}};@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);bar = (ProgressBar) findViewById(R.id.bar);bar2 = (ProgressBar) findViewById(R.id.bar2);// 启动线程来执行任务new Thread(){public void run(){while (status < 200){// 获取耗时操作的完成百分比status = doWork();// 发送消息mHandler.sendEmptyMessage(0x111);}}}.start();}// 模拟一个耗时的操作public int doWork(){// 为数组元素赋值data[hasData++] = (int) (Math.random() * 100);try{Thread.sleep(100);}catch (InterruptedException e){e.printStackTrace();}return hasData;}

而对于显示在标题上的进度条,可以通过设置窗口特征控制显示进度条。
//设置窗口特征:启用显示进度的进度条requestWindowFeature(Window.FEATURE_PROGRESS);  //设置窗口特征:启用不显示进度的进度条requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 


六、ViewSwitcher、ImageSwitcher、TextSwitcher、ViewFlipper
1.ViewSwitcher代表了视图切换组件,它本身继承了FrameLayout.可将多个View层叠在一起每次只显示一个组件。
<!-- 定义一个ViewSwitcher组件 --><ViewSwitcherandroid:id="@+id/viewSwitcher"android:layout_width="fill_parent"android:layout_height="fill_parent" />

// 创建LayoutInflater对象LayoutInflater inflater = LayoutInflater.from(ViewSwitcherTest.this);ViewSwitcher switcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);switcher.setFactory(new ViewFactory(){// 实际上就是返回一个GridView组件@Overridepublic View makeView(){// 加载R.layout.slidelistview组件,实际上就是一个GridView组件。return inflater.inflate(R.layout.slidelistview, null);}});

ViewSwitcher常用的方法:
// 为ViewSwitcher的组件显示过程设置动画switcher.setInAnimation(this, R.anim.slide_in_right);// 为ViewSwitcher的组件隐藏过程设置动画switcher.setOutAnimation(this, R.anim.slide_out_left);// 控制下一屏将要显示的GridView对应的 Adapter((GridView) switcher.getNextView()).setAdapter(adapter);// 显示下一屏,switcher.showNext();  


2.ImageSwitcher图像切换器
<!-- 定义一个ImageSwitcher组件 --><ImageSwitcher android:id="@+id/switcher"android:layout_width="300dp"android:layout_height="300dp"android:layout_gravity="center_horizontal"android:inAnimation="@android:anim/fade_in"android:outAnimation="@android:anim/fade_out"/>

ImageView常用方法:
ImageSwitcher switcher = (ImageSwitcher) findViewById(R.id.switcher);// 为ImageSwitcher设置图片切换的动画效果switcher.setFactory(new ViewFactory(){@Overridepublic View makeView(){// 创建ImageView对象ImageView imageView = new ImageView(ImageSwitcherTest.this);imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));// 返回ImageView对象return imageView;}});// 显示当前被选中的图片switcher.setImageResource(XXX);


3.TextSwitcher 文本切换器
<!-- 定义一个TextSwitcher,并指定了文本切换时的动画效果 --><TextSwitcher    android:id="@+id/textSwitcher"android:layout_width="match_parent"android:layout_height="wrap_content"android:inAnimation="@android:anim/slide_in_left"android:outAnimation="@android:anim/slide_out_right"android:onClick="next"/>

textSwitcher.setFactory(new ViewSwitcher.ViewFactory(){public View makeView(){TextView tv = new TextView(TextSwitcherTest.this);tv.setTextSize(40);tv.setTextColor(Color.MAGENTA);return tv;}});textSwitcher.setText(String str);


4.ViewFlipper组件
ViewFlipper组件继承了ViewAnimator,可调用addView(View)添加多个组件。一旦向ViewFlipper中添加多个组件之后,ViewFlipper可以使用动画控制多个组件之间的切换效果:
<ViewFlipperandroid:id="@+id/details"android:layout_width="match_parent"android:layout_height="match_parent"android:persistentDrawingCache="animation"android:flipInterval="1000"><ImageViewandroid:src="@drawable/java"android:layout_width="fill_parent"android:layout_height="wrap_content"></ImageView><ImageViewandroid:src="@drawable/android"android:layout_width="fill_parent"android:layout_height="wrap_content"></ImageView><ImageViewandroid:src="@drawable/ee"android:layout_width="fill_parent"android:layout_height="wrap_content"></ImageView></ViewFlipper>

常用方法如下:
viewFlipper.setInAnimation(this, R.anim.slide_in_right);viewFlipper.setOutAnimation(this, R.anim.slide_out_left);// 显示上一个组件viewFlipper.showPrevious();                  // 显示下一个组件。viewFlipper.showNext();// 停止自动播放viewFlipper.stopFlipping();

更多相关文章

  1. [Android基础]四大组件之ContentProvider
  2. Android 自定义view(二) 如何实现自定义组件
  3. Android 之 ScrollView(垂直滑动)组件
  4. Android Apache Commons工具库依赖列表
  5. Android引用百度定位API第三方组件后导致其它.so文件无法正常加
  6. Android 桌面组件
  7. 组件化实践记录——在library module的manifest中使用applicatio
  8. Android实现列表单选和多选,ListView+CheckedTextView
  9. 程序的组件模式

随机推荐

  1. Android调用WebService系列之对象构建传
  2. Android(安卓)ViewDragHelper实现QQ侧滑
  3. Appium Android(安卓)Bootstrap源码分析
  4. Android(安卓)从相册中选择照片并返回
  5. android 通过setalpha设置透明度 无效及3
  6. Developer分析Android新平台Honeycomb的
  7. 学无止尽
  8. Android(安卓)HandlerThread 的使用及其D
  9. android绝对布局
  10. Android中Context的详细使用