`
Everyday都不同
  • 浏览: 723474 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

android UI小结(三)

阅读更多
一、自动完成文本框 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);
		// 设置Adapter
		actv.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
// 创建一个SimpleAdapter
		SimpleAdapter 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设置Adapter
		grid.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" }
			};
			// 获取指定组位置、指定子列表项处的子列表项数据
			@Override
			public Object getChild(int groupPosition, int childPosition)
			{
				return goods[groupPosition][childPosition];
			}

			@Override
			public long getChildId(int groupPosition, int childPosition)
			{
				return childPosition;
			}
                          //返回特定组所包含的子列表项的数量
			@Override
			public 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;
			}

			// 该方法决定每个子选项的外观
			@Override
			public View getChildView(int groupPosition, int childPosition,
					boolean isLastChild, View convertView, ViewGroup parent)
			{
				TextView textView = getTextView();
				textView.setText(getChild(groupPosition, childPosition)
						.toString());
				return textView;
			}

			// 获取指定组位置处的组数据
			@Override
			public Object getGroup(int groupPosition)
			{
				return goodsTypes[groupPosition];
			}
                          //包含组列表的数量
			@Override
			public int getGroupCount()
			{
				return goodsTypes.length;
			}

			@Override
			public long getGroupId(int groupPosition)
			{
				return groupPosition;
			}

			// 该方法决定每个组选项的外观
			@Override
			public 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;
			}

			@Override
			public boolean isChildSelectable(int groupPosition,
					int childPosition)
			{
				return true;
			}

			@Override
			public 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;
	// 创建一个负责更新的进度的Handler
	Handler mHandler = new Handler()
	{
		@Override
		public void handleMessage(Message msg)
		{
			// 表明消息是由该程序发送的
			if (msg.what == 0x111)
			{
				bar.setProgress(status);
				bar2.setProgress(status);
			}
		}
	};	
	@Override
	public 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组件 -->
	<ViewSwitcher
		android: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组件
			@Override
			public 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()
		{
			@Override
			public 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可以使用动画控制多个组件之间的切换效果:
<ViewFlipper
		android:id="@+id/details"
		android:layout_width="match_parent"
		android:layout_height="match_parent"
		android:persistentDrawingCache="animation"
		android:flipInterval="1000">
		<ImageView
			android:src="@drawable/java"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content">
		</ImageView>
		<ImageView
			android:src="@drawable/android"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content">
		</ImageView>
		<ImageView
			android: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();
分享到:
评论

相关推荐

    android auto ui 测试

    #### 四、小结 通过上述步骤,你可以有效地设置和运行Android UI自动化测试。这不仅可以提高测试效率,还能确保应用在各种设备上都能提供一致的用户体验。记住,在执行测试之前,请确保所有环境配置正确,并且已...

    Android应用UI开发中Fragment的常见用法小结

    总之,Fragment是Android UI开发中的重要组成部分,它使得在不同屏幕尺寸和分辨率的设备上构建动态、灵活的用户界面成为可能。通过理解并熟练掌握Fragment的创建、通信、生命周期管理和回退栈管理等关键知识点,...

    Android问题小结

    本资料包"Android问题小结"是针对Android开发者的一个宝贵资源集合,涵盖了多个方面的知识,包括事件分发机制、设计模式、图层管理、属性动画、框架使用、应用安全以及个人职业发展规划等。 首先,"技术交流--...

    Android知识小结

    以下是对Android知识的一些小结,旨在分享遇到的问题及其解决方案,帮助开发者提升技能和解决问题。 1. **UI设计与布局**:Android使用XML来定义用户界面布局。`efefe.PNG`、`weff.PNG`可能展示了不同类型的布局,...

    Android UI_常用组件之 Spinner与适配器模式

    #### 小结 本文详细介绍了Android UI中`Spinner`组件的基本使用以及如何结合适配器模式进行数据绑定。`Spinner`是Android开发中非常实用的一个组件,掌握其使用方法可以帮助开发者更好地设计用户界面,提供更友好的...

    Android_UI开发专题(一)_之界面设计

    #### 四、小结 本文档详细介绍了Android UI开发中的关键知识点,特别是与界面设计密切相关的`android.content.res.Resources`和`android.graphics.Bitmap`两个类。通过学习这些基础知识,开发者可以更好地理解和...

    Android内存管理小结

    - 较小的体积和更低的资源消耗使得它非常适合移动设备。 - 支持同时运行多个虚拟机实例,这使得每个Android应用都能拥有独立的虚拟机环境。 #### 二、Dalvik虚拟机架构特点 - **基于寄存器架构**:与传统的JVM...

    Android开发与应用——张荣 原书配套例程代码

    第1章 Android简介 1.1 手机操作系统 1.2 Android起源 1.3 Android特征 1.4 Android体系结构 1.4.1 应用层 1.4.2 应用框架层 1.4.3 系统库层 1.4.4 内核层 1.5 小结 练习 第2章 Android开发环境 2.1 ...

    Android高级工程师面试技术点小结

    ### Android高级工程师面试技术点小结 在当前竞争激烈的IT行业中,成为一名优秀的Android高级工程师不仅意味着需要具备深厚的技术功底,还需要不断跟进最新的技术趋势和发展方向。本文将根据标题、描述以及部分内容...

    android 小结

    在Android开发领域,小结通常意味着对某个特定主题或技术的综合概述。在这个"android小结"中,我们可以探讨一些核心的Android知识点,包括但不限于源码解析、工具使用以及一个可能的示例项目"MainActivityDemo"。让...

    Android入门小项目(增删查改操作)

    在Android开发领域,一个入门级别的小项目通常会涵盖基本的操作,如增删查改(CRUD,Create、Read、Update、Delete),这是任何数据管理应用的基础。本项目以"Android入门小项目(增删查改操作)"为主题,旨在帮助初学...

    android小结.docx

    设备独立像素(dip)是一种与设备分辨率无关的单位,用于确保UI元素在不同密度屏幕上保持一致的大小。将像素值(px)转换为dip的公式是:`px = (int) (dip * density + 0.5f)`,其中`density`是屏幕密度。注意,...

    Android异步加载图像小结 (含线程池,缓存方法).rar

    在Android应用开发中,图像加载是一个常见的...以上就是关于“Android异步加载图像小结(含线程池,缓存方法)”的主要知识点。在实际应用中,开发者应结合项目需求,合理选择和优化这些技术,以提供流畅的用户体验。

    《Android应用开发揭秘》附带光盘代码.

     15.6 AndroidUI优化  15.7 其他优化  15.7.1 zipalign  15.7.2 图片优化  15.8 小结  第五部分 扩展篇  第16章 Android NDK开发  16.1 AndroidNDK简介  16.2 安装和配置NDK开发环境  16.2.1 系统和软件...

    《Android应用开发揭秘》源码

     15.6 AndroidUI优化  15.7 其他优化  15.7.1 zipalign  15.7.2 图片优化  15.8 小结  第五部分 扩展篇  第16章 Android NDK开发  16.1 AndroidNDK简介  16.2 安装和配置NDK开发环境  16.2.1 系统和软件...

    Android开发案例驱动教程 配套代码

    本章小结 42 第4章 UI基础知识 43 4.1 Android UI组件概述 43 4.1.1 View 43 4.1.2 ViewGroup 44 4.1.3 布局管理器 44 4.2 UI设计工具 44 4.2.1 DroidDraw工具 44 4.2.2 ADT插件UI设计工具 46 4.3 事件处理...

    Android Drawable必备知识小结

    总之,理解并熟练掌握Android Drawable的使用对于提升UI设计和开发的灵活性至关重要。通过组合各种Drawable类型和属性,开发者可以创建出丰富多样的视觉效果,满足不同应用场景的需求。无论是简单的颜色填充还是复杂...

    Android应用开发揭秘pdf高清版

    15.6 AndroidUI优化 15.7 其他优化 15.7.1 zipalign 15.7.2 图片优化 15.8 小结 第五部分 扩展篇 第16章 Android NDK开发 16.1 AndroidNDK简介 16.2 安装和配置NDK开发环境 16.2.1 系统和软件需求 16.2.2 NDK开发...

Global site tag (gtag.js) - Google Analytics