`
stephen830
  • 浏览: 2977763 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android中的UI控制(二)

 
阅读更多

android中的UI控制(二)

 

转载自 : http://www.android777.com/index.php/tutorial/androids-ui-control-b.html

 

 

上一篇 我们讲到android中创建UI的几种方式,用户应该可以根据学到的内容创建简单的界面。这边我们再看一下android SDK里面提供的一些简单控件的用法,包括:文本控制、按钮、checkbox、radio等,然后接下来是稍微复杂点的控件如用来显示列表的ListView、Grid、Gallery等,最后是更复杂的mapview对象。 首先我们要先了解下Android中GUI的架构。Android SDK中提供的GUI控件,实际上是融合了AWT、swing、SWT等技术,所以整个UI框架的设计和代码编写与Java GUI的形式差不多。它是一个单线程(只有一个UI线程)的、事件驱动的模型,使用MVC模式。用户编写Controller来处理按钮点击、失去焦点、用户输入等事件,然后在Controller中可以改变数据模型,然后UI线程将图形信息展示到屏幕上。

 


模型层: 任意需要显示的数据信息。可以是联系人信息、短信信息、通话信息等。 视图层: 数据的表达形式,像联系人以列表的形式显示之类的。如一个MP3播放器中的播放、暂停、停止等按钮。整个UI视图层是一个树形结构,通过先序遍历的方式遍 历整棵树画出UI界面。就是每个视图里的子节点先画出自己,然后再画出它的子节点们,所以离根节点越近越早被系统绘制出来,子节点视图将呈现在父节点的之 上。 整个UI框架的绘制过程当然比上面描述的复杂、高效。因为既然子节点会挡住父节点,那如果子节点不是透明的,那么被子节点挡住的部分或全部父节点视图则可 以不用绘制,减少资源消耗。而且每次底层模型层发生变化时,其实只需要绘制变化的部分即可。 控制层: 控制层是对外部事件做出反应的部分如:触摸屏幕、点击按键等。所有的事件排成一个队列,按照FIFO(先进先出)的队列顺序由UI线程进行处理。 当用户按键盘一个按键时,系统就会产生一个键盘事件(KeyEvent),然后将这个事件加入到事件队列(Event Queue),当队列中排在它前面的事件被处理完之后,系统就将键盘事件从事件队列中移除,然后分发给各个视图进行响应。如在MP3播放器中,当音乐在播 放时,如果用户点击暂停按钮,则系统就会产生一个按钮事件,添加到事件队列,事件队列发现该事件后就会移除它,然后分发给对应的按钮对象进行处理,按钮对 象则会调用这个按钮的对应控制代码,暂停播放,然后更新按钮的状态为暂停状态。这时候视图层发现按钮状态变化则对应更新视图显示暂停状态。 通过以上分析应该对Android中GUI的架构有一些认识,它使用的是跟java GUI一样的模型,所以最好不要在UI的事件代码里进行一些耗时的堵塞操作,因为这样会让界面停止响应其他请求。要做复杂的计算或网络请求等堵塞操作时请 记得开启另一个线程执行以让UI线程整随时正常响应。 接下来我们先了解一下Android SDK提供的一些简单的UI控件的使用方法,这边分为几个类别来学习,首先先了解文本控制 : 从TextView、EditText、AutoCompleteTextView和MultiCompleteTextView几个控件的使用方法开始看。 TextView: TextView用来显示一些不能编辑的文本信息,看起来它就像是GUI里常见的Label,但是其实它不止是Label那么简单。它还提供一些独特的控 制功能,如可以将TextView里面的网址和Email链接转换成链接形式。在xml布局中使用属性:android:autoLink。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
	<TextView  
		android:id="@+id/textview1"
		android:layout_width="wrap_content"
   		android:layout_height="wrap_content"
   		android:autoLink="all"
	    android:text="欢迎访问http://www.android777.com,请联系 ffczk86@gmail.com"
	    />
</LinearLayout>
 

效果图如下(图1):



图1

 

 

当然也可以通过代码直接设置这个autoLink功能:

 

把下面代码从xml文件中移除:

android:autoLink="all"
 

然后在Activity代码中加上:

        TextView tv = (TextView)findViewById(R.id.textview1);
        Linkify.addLinks(tv,Linkify.ALL);

 执行后,同样可以得到上面(图1)所示的效果。

 

 

 

EditText: EditText是TextView的子类,EditText扩展了TextView使其具备能编辑文字的能力。你可以设置EditText的很多控制功 能:capitalize(首字母大写)、只允许输入数字、当成密码输入框等。还可以引用一些有定义样式的文本内容像是:斜体、粗体、下划线。 在res\values\string.xml里添加

<string name="text1"><i>斜体字</i>和<b>粗体字</b> 再来一个:<u>下划线</u></string>

 然后布局文件为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
	<TextView  
		android:id="@+id/textview1"
		android:layout_width="wrap_content"
   		android:layout_height="wrap_content"
   		android:autoLink="all"
	    android:text="欢迎访问http://www.android777.com,请联系 ffczk86@gmail.com"
	    />
    <EditText
        android:id="@+id/edittext1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/text1"
    />	    
</LinearLayout>

 效果图如下(图2):

 


图2


也可以使用代码动态生成样式:

        EditText et = (EditText)findViewById(R.id.edittext1);
        et.setText("对动态生成的字进行样式定义");
        Spannable spn = et.getText();
        spn.setSpan(new BackgroundColorSpan(Color.RED), 0, 10, 
        		Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        spn.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC)
        , 0, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 

 效果图如下(图3):

 


图3

 

AutoCompleteTextView: AutoCompleteTextView继承了EditText,添加了额外的AutoComplete功能。用户需要先设置一个Adapter以提供 AutoComplete所需的数据源(AutoComplete就像是使用Google或百度搜索时提示的建议搜索词)。它实际上由2部分组成:一个是 EditText用来输入字符,另一个是建议列表的List。用户需要在代码中指定如何显示AutoComplete的建议列表。

 

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
	<TextView  
		android:id="@+id/textview1"
		android:layout_width="wrap_content"
   		android:layout_height="wrap_content"
   		android:autoLink="all"
	    android:text="欢迎访问http://www.android777.com,请联系 ffczk86@gmail.com"
	    />
    <EditText
        android:id="@+id/edittext1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/text1"
    />	  
    <AutoCompleteTextView 
    	android:id="@+id/actv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />  
</LinearLayout>

 

Activity代码中增加:

 

        AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.actv);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line,
                new String[] {"English", "Hebrew", "Hindi", 
        		"Spanish", "German", "Greek" });
        actv.setAdapter(adapter);

 上面代码读取了一个AutoCompleteTextView对象,然后设置ArrayAdapter作为建议的数据源,然后将其绑定到AutoCompleteTextView对象(通过setAdapter方法)。

 

效果图如下(图4):


图4

MultiAutoCompleteTextView: MultiAutoCompleteTextView继承了AutoCompleteTextView,扩展了它的建议功能。因为在使用 AutoCompleteTextView时有一个不便的地方是:它做的是整个TextView中文本信息的全匹配。假设你要输入的是一个句子而又要具备 能提示里面单词的功能的话AutoCompleteTextView就完成不了,因为它会将整个句子都作为匹配对象所以无法进行单词建议,而 MultiAutoCompleteTextView则解决了这个问题,它会根据用户所打的字进行匹配而不是整个TextView中的文本信息,它的使用 方法跟AutoCompleteTextView差不多。如下:

 

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
	<TextView  
		android:id="@+id/textview1"
		android:layout_width="wrap_content"
   		android:layout_height="wrap_content"
   		android:autoLink="all"
	    android:text="欢迎访问http://www.android777.com,请联系 ffczk86@gmail.com"
	    />
    <EditText
        android:id="@+id/edittext1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/text1"
    />	  
    <AutoCompleteTextView 
    	android:id="@+id/actv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />  
    <MultiAutoCompleteTextView 
    	android:id="@+id/mactv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    /> 
</LinearLayout>

 Activity代码中增加:

        MultiAutoCompleteTextView mactv = (MultiAutoCompleteTextView)findViewById(R.id.mactv);
		ArrayAdapter<String> aa2 = new ArrayAdapter<String>(this,
			android.R.layout.simple_dropdown_item_1line,
			new String[] {"English", "Hebrew", "Hindi", "Spanish", "German", "Greek" });
		mactv.setAdapter(aa2);
		mactv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
 

如上,对比它与AutoCompleteTextView,它只多了一行代码:

mactv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

 这行代码的意思是当用户输入“,”时,匹配往后的字符将重新开始单词匹配,匹配介绍后会自动加上“,” ,然后后面的字符又将重新开始匹配。代码运行的效果如下(图5):

 


 图5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 148 KB
  • 大小: 12.6 KB
  • 大小: 18.7 KB
  • 大小: 17.5 KB
  • 大小: 40.1 KB
  • 大小: 42.9 KB
分享到:
评论

相关推荐

    Android新手UI集合全

    在实际开发中,Android Studio提供了强大的设计工具,如Layout Editor,可以可视化地设计和预览界面,同时支持XML代码编写,方便开发者进行精确控制。此外,Android Studio还提供了Vector Asset Studio,可以将SVG...

    原生android SystemUI源码

    在Android 4.0(Ice Cream Sandwich,简称ICS)版本中,SystemUI组件负责了状态栏、通知中心、快速设置面板等用户界面元素的显示与交互。 SystemUI主要包含以下几个关键组件: 1. **StatusBar**: 状态栏是Android...

    Android 智能UI锁屏

    在Android系统中,智能UI锁屏是指一种个性化且功能丰富的屏幕锁定界面,它不仅提供基本的解锁功能,还集成了各种实用工具和个性化设置,以提升用户体验。这种锁屏技术通常涉及用户界面设计、交互逻辑、安全性以及...

    Android所有UI控件

    在Android开发中,UI(用户界面)控件是构建应用程序不可或缺的部分。它们为用户提供与应用交互的方式,使得信息展示和操作更加直观。Android系统提供了多种控件,涵盖各种功能,从简单的按钮到复杂的布局。本篇文章...

    androidUI设计器

    Android UI 设计器是Android开发中的一个重要工具,它允许开发者直观地设计应用程序的用户界面,无需手动编写XML布局代码。这个工具极大地提升了开发效率,使得非程序员也能参与到UI设计中来,实现快速预览和调整...

    安卓Android源码——ui开发类库示例源码.zip

    6. **DialogFragment**:对话框在Android应用中广泛应用,DialogFragment是Android官方推荐的方式,它继承自Fragment,可以方便地管理和控制对话框的显示与消失。 7. **动画(Animation)**:Android支持属性动画...

    Android things简单的UI

    **UI在Android Things中的应用** 在Android Things上实现UI,主要是通过使用Android的View系统,这个系统包括各种组件,如Button、TextView、ImageView等,它们可以用来构建用户界面。虽然Android Things的硬件限制...

    android 小米UI 自定义音量

    在Android中,音量控制通常使用滑动条或者进度条来表示音量大小,因此CircleProgressView可能是小米UI自定义音量控件的核心组件,它可能是一个圆形的进度条,提供更美观、直观的音量调节体验。 要移植小米UI的...

    android UI 各种小例子

    在Android开发中,UI设计是至关重要的一环,它关乎到应用程序的用户体验和视觉吸引力。本压缩包中的"android UI 各种小例子"为初学者提供了丰富的实践资源,旨在帮助开发者掌握基本的Android用户界面设计技巧。每个...

    android 仿锤子UI布局

    在Android中,布局(Layout)是组织和控制View组件的基础。常见的布局有LinearLayout(线性布局)、RelativeLayout(相对布局)、FrameLayout(帧布局)和GridLayout(网格布局)。锤子UI的格子布局通常结合了...

    移植Android的UI组件到Web端以Android的方式来制作高性能优体验的WebApp

    2. **自定义组件系统**:AndroidUI4Web可能有一个自定义的组件库,包含各种Android原生UI元素的Web实现,如按钮、列表视图、滑动选择器等,这些组件可以方便地通过JavaScript进行控制和定制。 3. **手势识别**:...

    android各种UI特效 工作中积累

    在Android开发中,UI特效是提升用户体验的关键因素之一。它涉及到界面的动态效果、过渡动画、自定义控件以及交互设计等多个方面。本资源“工作中积累UI特效”显然是一个开发者在实际工作过程中积累的Android UI设计...

    android ui旋转 控制系统旋转

    支持全志平台的ui旋转,里面有全志平台的系统签名,通过反射 IWindowManager wm = WindowManagerGlobal.getWindowManagerService(); wm.freezeRotation(value); 实现ui旋转,其他平台需要系统签名后使用!切记必须要...

    android 7.0 SystemUI

    在Android系统架构中,SystemUI位于应用层与系统服务层之间,它提供了通知中心、状态栏、快速设置面板、锁屏界面以及各种系统级别的交互控件。深入理解SystemUI的源代码对于开发者优化系统UI性能、自定义系统行为或...

    android项目整体UI框架

    例如,对Android系统的Fragment管理和Activity生命周期有深入理解,可以帮助我们更好地控制UI状态。同时,掌握一些设计模式,如单例、工厂、代理等,有助于构建更加健壮的代码结构。 总的来说,一个完整的Android...

    android-ui-master

    在Android开发中,UI设计和交互是至关重要的部分,尤其是对于用户操作反馈的动画效果。"android-ui-master"这个项目显然关注的是Android平台上的界面元素动画,特别是返回按钮的旋转和按钮转动效果。这些动画可以...

    Android UI统一框架

    在Android开发中,UI设计和实现是至关重要的部分。为了提高代码的可维护性和复用性,开发者常常会构建一个统一的UI框架。这个框架旨在规范应用中的界面设计,简化多维度UI管理,减少代码冗余,提升开发效率。本文将...

    Android UI 基础教程

    在"Android UI 基础教程"中,你将逐步学习这些知识点,并通过实例操作加深理解。通过阅读这份教程,你将具备独立设计和实现Android用户界面的能力,为后续的进阶学习打下坚实基础。记得实践是检验理论的最好方法,...

    android验证码界面ui实现

    在Android应用开发中,验证码界面UI的实现是一个常见的功能,主要用于身份验证或安全验证环节。本文将详细讲解如何在Android中实现一个具有60秒倒计时功能的验证码界面,以及如何通过PopupWindow来弹出这个界面。 ...

    android UI定制的一些资料

    在Android平台上,UI(用户界面)定制是一项关键的技术任务,它允许开发者根据需求和品牌风格创建独特的用户体验。这里,我们探讨的是"android UI定制的一些资料",这些资料可能包括设计原则、布局技巧、自定义视图...

Global site tag (gtag.js) - Google Analytics