TextView 是用于显示字符串的组件,对于用户来讲就是屏幕中一块用于显示文本的区域。TextView类的层次关系以下:php
java.lang.Objecthtml
↳ android.view.Viewjava
↳ android.widget.TextViewandroid
直接子类:git
Button, CheckedTextView, Chronometer, DigitalClock, EditTextgithub
间接子类:web
AutoCompleteTextView, CheckBox, CompoundButton, ExtractEditText,MultiAutoCompleteTextView, RadioButton, ToggleButton编程
主要方法canvas |
功能描述windows |
返回值 |
TextView |
TextView的构造方法 |
Null |
getDefaultMovementmethod |
获取默认的箭头按键移动方式 |
Movementmethod |
getText |
得到TextView对象的文本 |
CharSquence |
length |
得到TextView中的文本长度 |
Int |
getEditableText |
取得文本的可编辑对象,经过 这个对象可对TextView的文本进行操做,如在光标以后插入字符 |
Void |
getCompoundPaddingBottom |
返回底部填充物 |
Int |
setCompoundDrawables |
设置图像显示的位置,在 设置该Drawable资源以前须要调用setBounds(Rect) |
Void |
setCompoundDrawablesWithIn trinsicBounds |
设置Drawable图像的显示位置,但其边界不变 |
Void |
setPadding |
根据位置设置填充物 |
Void |
getAutoLinkMask |
返回自动链接的掩码 |
Void |
setTextColor |
设置文本显示的颜色 |
Void |
setHighlightColor |
设置文本选中时显示的颜色 |
Void |
setShadowLayer |
设置文本显示的阴影颜色 |
Void |
setHintTextColor |
设置提示文字的颜色 |
Void |
setLinkTextColor |
设置连接文字的颜色 |
Void |
setGravity |
设置当TextView超出了文本自己时横向以及垂直对齐 |
Void |
getFreezesText |
设置该视图是否包含整个文本,若是包含则返回真值,不然返回假值 |
Boolean |
|
|
|
XML属性
属性名称 |
描述 |
android:autoLink |
设置是否当文本为URL连接/email/电话号码/map时,文本显示为可点击的连接。可选值(none/web/email/phone/map/all) |
android:autoText |
若是设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起做用。 |
android:bufferType |
指定getText()方式取得的文本类别。选项editable 相似于StringBuilder可追加字符, 也就是说getText后可调用append方法设置文本内容。 |
android:capitalize |
设置英文字母大写类型。此处无效果,须要弹出输入法才能看获得,参见EditView此属性说明。 |
android:cursorVisible |
设定光标为显示/隐藏,默认显示。 |
android:digits |
设置容许输入哪些字符。如“1234567890.+-*/%\n()” |
android:drawableBottom |
在text的下方输出一个drawable,如图片。若是指定一个颜色的话会把text的背景设为该颜色,而且同时和background使用时覆盖后者。 |
android:drawableLeft |
在text的左边输出一个drawable,如图片。 |
android:drawablePadding |
设置text与drawable(图片)的间隔,与drawableLeft、drawableRight、drawableTop、drawableBottom一块儿使用,可设置为负数,单独使用没有效果。 |
android:drawableRight |
在text的右边输出一个drawable,如图片。 |
android:drawableTop |
在text的正上方输出一个drawable,如图片。 |
android:editable |
设置是否可编辑。这里无效果,参见EditView。 |
android:editorExtras |
设置文本的额外的输入数据。在EditView再讨论。 |
android:ellipsize |
设置当文字过长时,该控件该如何显示。有以下值设置:”start”—–省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动) |
android:freezesText |
设置保存文本的内容以及光标的位置。 |
android:gravity |
设置文本位置,如设置成“center”,文本将居中显示。 |
android:hint |
Text为空时显示的文字提示信息,可经过textColorHint设置提示信息的颜色。比较奇怪的是TextView原本就至关于Label,怎么会不设置Text?! |
android:imeOptions |
附加功能,设置右下角IME动做与编辑框相关的动做,如actionDone右下角将显示一个“完成”,而不设置默认是一个回车符号。这个在EditView中再详细说明,此处无用。 |
android:imeActionId |
设置IME动做ID。在EditView再作说明, |
android:imeActionLabel |
设置IME动做标签。在EditView再作说明。 |
android:includeFontPadding |
设置文本是否包含顶部和底部额外空白,默认为true。 |
android:inputMethod |
为文本指定输入法,须要彻底限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,可是这里报错找不到。 |
android:inputType |
设置文本的类型,用于帮助输入法显示合适的键盘类型。在EditView中再详细说明,这里无效果。 |
android:linksClickable |
设置连接是否点击链接,即便设置了autoLink。 |
android:marqueeRepeatLimit |
在ellipsize指定marquee的状况下,设置重复滚动的次数,当设置为 |
android:ems |
设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度,如图: |
android:maxEms |
设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。 |
android:minEms |
设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。 |
android:maxLength |
限制显示的文本长度,超出部分不显示。 |
android:lines |
设置文本的行数,设置两行就显示两行,即便第二行没有数据。 |
android:maxLines |
设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。 |
android:minLines |
设置文本的最小行数,与lines相似。 |
android:lineSpacingExtra |
设置行间距。 |
android:lineSpacingMultiplier |
设置行间距的倍数。如”1.2” |
android:numeric |
若是被设置,该TextView有一个数字输入法。此处无用,设置后惟一效果是TextView有点击效果,此属性在EdtiView将详细说明。 |
android:password |
以小点”.”显示文本 |
android:phoneNumber |
设置为电话号码的输入方式。 |
android:privateImeOptions |
设置输入法选项,此处无用,在EditText将进一步讨论。 |
android:scrollHorizontally |
设置文本超出TextView的宽度的状况下,是否出现横拉条。 |
android:selectAllOnFocus |
若是文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。TextView中设置后无效果。 |
android:shadowColor |
指定文本阴影的颜色,须要与shadowRadius一块儿使用。效果: |
android:shadowDx |
设置阴影横向坐标开始位置。 |
android:shadowDy |
设置阴影纵向坐标开始位置。 |
android:shadowRadius |
设置阴影的半径。设置为0.1就变成字体的颜色了,通常设置为3.0的效果比较好。 |
android:singleLine |
设置单行显示。若是和layout_width一块儿使用,当文本不能所有显示时,后面用“…”来表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"将只显示“t…”。若是不设置singleLine或者设置为false,文本将自动换行 |
android:text |
设置显示文本. |
android:textAppearance |
设置文字外观。如“?android:attr/textAppearanceLargeInverse ”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,不然使用默认的外观。可设置的值以下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse |
android:textColor |
设置文本颜色 |
android:textColorHighlight |
被选中文字的底色,默认为蓝色 |
android:textColorHint |
设置提示信息文字的颜色,默认为灰色。与hint一块儿使用。 |
android:textColorLink |
文字连接的颜色. |
android:textScaleX |
设置文字之间间隔,默认为1.0f。分别设置0.5f/1.0f/1.5f/2.0f效果以下:
|
android:textSize |
设置文字大小,推荐度量单位”sp”,如”15sp” |
android:textStyle |
设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 能够设置一个或多个,用“|”隔开 |
android:typeface |
设置文本字体,必须是如下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3] |
android:height |
设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米) |
android:maxHeight |
设置文本区域的最大高度 |
android:minHeight |
设置文本区域的最小高度 |
android:width |
设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米)。 |
android:maxWidth |
设置文本区域的最大宽度 |
android:minWidth |
设置文本区域的最小宽度 |
咱们能够在XML布局文件中声明及设置TextView,也能够在代码中生成TextView组件。
在xml布局中:
//显示超连接:
<TextView android:id="@+id/textView0" android:layout_width="fill_parent" android:layout_height="wrap_content"
android:textColor="#FF0000"
android:textSize="18dip" android:background="#FFFFFF" android:text="拨打手机:13888888888"
android:gravity="center_vertical|center_horizontal" android:autoLink="phone" />
<TextView android:id="@+id/textView1" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FF0000"
android:textSize="18dip" android:background="#00FF00"
android:text="Google搜索:http://www.google.com.hk" android:gravity="center_vertical|center_horizontal"
android:autoLink="web" />
<TextView android:id="@+id/textView2" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FF0000"
android:textSize="18dip"
android:background="#FFFF00"
android:text="发送邮件:1007857613@qq.com"
android:gravity="center_vertical|center_horizontal" android:autoLink="email" />
//设置文字的滚屏
<TextView android:id="@+id/textView3" android:layout_width="fill_parent"
android:layout_height="20dp" android:textSize="18dip"
android:ellipsize="marquee" android:focusable="true"
android:marqueeRepeatLimit="marquee_forever"
android:focusableInTouchMode="true"
android:scrollHorizontally="true"
android:text="文字滚屏文字跑马灯效果加长加长加长加长加长加长加长加长加长加长加长加长"
android:background="#FF0000"
android:textColor="#FFFFFF">
</TextView>
//设置字符阴影
<TextView android:id="@+id/TextView4" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:textSize="18dip"
android:background="#69541b" android:textColor="#FFFFFF" android:text="设置字符串阴影颜色为绿色"
android:shadowColor="#45b97c" android:shadowRadius="3.0"
android:gravity="center_vertical|center_horizontal" />
//设置字符的外形
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:textSize="18dip"
android:background="#FFFFFF" android:textColor="#FF0000" android:text="设置文字外形为italic"
android:textStyle="italic" android:gravity="center_vertical|center_horizontal" />
</LinearLayout>
在代码中:
/动态建立textView
linearLayout = (LinearLayout)findViewById(R.id.linearLayout01);
param = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
LinearLayout layout1 = new LinearLayout(this);
layout1.setOrientation(LinearLayout.HORIZONTAL);
TextView tv = new TextView(this);
tv.setId(200);
tv.setText("动态建立TextView");
tv.setBackgroundColor(Color.GREEN);
tv.setTextColor(Color.RED);
tv.setTextSize(20);
layout1.addView(tv, param);
linearLayout.addView(layout1, param);
效果图:
EditText和TextView的功能基本相似,他们之间的主要区别在于EditText提供了可编辑的文本框。
java.lang.Object
android.view.View
android.widget.TextView
android.widget.EditText
直接子类:
AutoCompleteTextView, ExtractEditText
间接子类:
MultiAutoCompleteTextView
方法 |
功能描述 |
返回值 |
setImeOptions |
设置软键盘的Enter键 |
void |
getImeActionLable |
设置IME动做标签 |
Charsequence |
getDefaultEditable |
获取是否默承认编辑 |
boolean |
setEllipse |
设置文件过长时控件的显示方式 |
void |
setFreeezesText |
设置保存文本内容及光标位置 |
void |
getFreeezesText |
获取保存文本内容及光标位置 |
boolean |
setGravity |
设置文本框在布局中的位置 |
void |
getGravity |
获取文本框在布局中的位置 |
int |
setHint |
设置文本框为空时,文本框默认显示的 字符 |
void |
getHint |
获取文本框为空时,文本框默认显示的 字符 |
Charsequence |
setIncludeFontPadding |
设置文本框是否包含底部和顶端的额外空白 |
void |
setMarqueeRepeatLimit |
在ellipsize指定marquee的状况下,设置重复滚动的次数, 当设置为marquee_forever时表示无限次 |
void |
属性名称 |
描述 |
android:autoLink |
设置是否当文本为URL连接/email/电话号码/map时,文本显示为可点击的连接。可选值(none/web/email/phone/map/all)。这里只有在同时设置text时才自动识别连接,后来输入的没法自动识别。 |
android:autoText |
自动拼写帮助。这里单独设置是没有效果的,可能须要其余输入法辅助才行,效果参见视频。 |
android:bufferType |
指定getText()方式取得的文本类别。选项editable 相似于StringBuilder可追加字符, 也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式,参见这里1、这里2。 |
android:capitalize |
设置英文字母大写类型。设置以下值:sentences仅第一个字母大写;words每个单词首字母大小,用空格区分单词;characters每个英文字母都大写。在模拟器上用PC键盘直接输入能够出效果,可是用软键盘无效果。 |
android:cursorVisible |
设定光标为显示/隐藏,默认显示。若是设置false,即便选中了也不显示光标栏。 |
android:digits |
设置容许输入哪些字符。如“1234567890.+-*/%\n()” |
android:drawableTop |
在text的正上方输出一个drawable。在EditView中的效果比较搞笑:,竟然在文本框里,并且删不了。 |
android:drawableBottom |
在text的下方输出一个drawable(如图片)。若是指定一个颜色的话会把text的背景设为该颜色,而且同时和background使用时覆盖后者。 |
android:drawableLeft |
在text的左边输出一个drawable(如图片)。 |
android:drawablePadding |
设置text与drawable(图片)的间隔,与drawableLeft、drawableRight、drawableTop、drawableBottom一块儿使用,可设置为负数,单独使用没有效果。 |
android:drawableRight |
在text的右边输出一个drawable,如图片。 |
android:editable |
设置是否可编辑。仍然能够获取光标,可是没法输入。 |
android:editorExtras |
指定特定输入法的扩展,如“com.mydomain.im.SOME_FIELD”。源码跟踪至EditorInfo.extras,暂无相关实现代码。 |
android:ellipsize |
设置当文字过长时,该控件该如何显示。有以下值设置:”start”—–省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动) |
android:freezesText |
设置保存文本的内容以及光标的位置。参见:这里。 |
android:gravity |
设置文本位置,如设置成“center”,文本将居中显示。 |
android:hint |
Text为空时显示的文字提示信息,可经过textColorHint设置提示信息的颜色。 |
android:imeOptions |
设置软键盘的Enter键。有以下值可设置:normal,actionUnspecified,actionNone,actionGo,actionSearch,actionSend,actionNext,actionDone,flagNoExtractUi,flagNoAccessoryAction,flagNoEnterAction。可用’|’设置多个。这里仅设置显示图标之用,参见文章末尾例子。 |
android:imeActionId |
设置IME动做ID,在onEditorAction中捕获判断进行逻辑操做。 |
android:imeActionLabel |
设置IME动做标签。可是不能保证必定会使用,猜测在输入法扩展的时候应该有用。 |
android:includeFontPadding |
设置文本是否包含顶部和底部额外空白,默认为true。 |
android:inputMethod |
为文本指定输入法,须要彻底限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,可是这里报错找不到。关于自定义输入法参见这里。 sentences仅第一个字母大写;words每个单词首字母大小,用空格区分单词;characters每个英文字母都大写 |
android:inputType |
设置文本的类型,用于帮助输入法显示合适的键盘类型。有以下值设置:none、text、textCapCharacters字母大小、textCapWords单词首字母大小、textCapSentences仅第一个字母大小、textAutoCorrect、textAutoComplete自动完成、textMultiLine多行输入、textImeMultiLine输入法多行(若是支持)、textNoSuggestions不提示、textEmailAddress电子邮件地址、textEmailSubject邮件主题、textShortMessage短信息(会多一个表情按钮出来,点开以下图: )、textLongMessage长讯息?、textPersonName人名、textPostalAddress地址、textPassword密码、textVisiblePassword可见密码、textWebEditText做为网页表单的文本、textFilte文本筛选过滤、textPhonetic拼音输入、numberSigned有符号数字格式、numberDecimal可带小数点的浮点格式、phone电话号码、datetime时间日期、date日期、time时间。部分参考这里。 |
android:marqueeRepeatLimit |
在ellipsize指定marquee的状况下,设置重复滚动的次数,当设置为 |
android:ems |
设置TextView的宽度为N个字符的宽度。参见TextView中此属性的截图。 |
android:maxEms |
设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。 |
android:minEms |
设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。 |
android:maxLength |
限制输入字符数。如设置为5,那么仅能够输入5个汉字/数字/英文字母。 |
android:lines |
设置文本的行数,设置两行就显示两行,即便第二行没有数据。 |
android:maxLines |
设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。 |
android:minLines |
设置文本的最小行数,与lines相似。 |
android:linksClickable |
设置连接是否点击链接,即便设置了autoLink。 |
android:lineSpacingExtra |
设置行间距。 |
android:lineSpacingMultiplier |
设置行间距的倍数。如”1.2” |
android:numeric |
若是被设置,该TextView有一个数字输入法。有以下值设置:integer正整数、signed带符号整数、decimal带小数点浮点数。 |
android:password |
以小点”.”显示文本 |
android:phoneNumber |
设置为电话号码的输入方式。 |
android:privateImeOptions |
提供额外的输入法选项(字符串格式)。依据输入法而决定是否提供,如这里所见。自定义输入法继承 InputMethodService。这篇文章也许有帮助。 |
android:scrollHorizontally |
设置文本超出TextView的宽度的状况下,是否出现横拉条。 |
android:selectAllOnFocus |
若是文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。TextView中设置后无效果。 |
android:shadowColor |
指定文本阴影的颜色,须要与shadowRadius一块儿使用。参见TextView中此属性的截图。 |
android:shadowDx |
设置阴影横向坐标开始位置。 |
android:shadowDy |
设置阴影纵向坐标开始位置。 |
android:shadowRadius |
设置阴影的半径。设置为0.1就变成字体的颜色了,通常设置为3.0的效果比较好。 |
android:singleLine |
设置单行显示。若是和layout_width一块儿使用,当文本不能所有显示时,后面用“…”来表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"将只显示“t…”。若是不设置singleLine或者设置为false,文本将自动换行 |
android:text |
设置显示文本. |
android:textAppearance |
设置文字外观。如“?android:attr/textAppearanceLargeInverse ”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,不然使用默认的外观。可设置的值以下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse |
android:textColor |
设置文本颜色 |
android:textColorHighlight |
被选中文字的底色,默认为蓝色 |
android:textColorHint |
设置提示信息文字的颜色,默认为灰色。与hint一块儿使用。 |
android:textColorLink |
文字连接的颜色. |
android:textScaleX |
设置文字缩放,默认为1.0f。参见TextView的截图。 |
android:textSize |
设置文字大小,推荐度量单位”sp”,如”15sp” |
android:textStyle |
设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 能够设置一个或多个,用“|”隔开 |
android:typeface |
设置文本字体,必须是如下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3] |
android:height |
设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米) |
android:maxHeight |
设置文本区域的最大高度 |
android:minHeight |
设置文本区域的最小高度 |
android:width |
设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width的区别看这里。 |
android:maxWidth |
设置文本区域的最大宽度 |
android:minWidth |
设置文本区域的最小宽度 |
EditText和TextView同样,既能够在Xml中声明实现,也能够在代码中动态的生成,关于在代码动态生成和TextView的相似,这里就不在赘述。下面以一个实例来讲明EditText的简单使用:
XML布局中:
<TextView android:text="TextView" android:id="@+id/textView1"
android:layout_height="wrap_content" android:layout_width="fill_parent"></TextView>
<!-- 用于输入数字的文本框 -->
<EditText android:id="@+id/editText1" android:inputType="date"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:maxLength="40" android:hint="输入电话号码" android:textColorHint="#FF000000"
android:phoneNumber="true" android:imeOptions="actionGo"></EditText>
<!-- 用于输入密码的文本框 -->
<EditText android:id="@+id/editText2" android:inputType="date"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:maxLength="40" android:hint="输入密码" android:textColorHint="#FF000000"
android:password="true" android:imeOptions="actionSearch"></EditText>
/rec/values/string.xml中:
string name="RadioButton1">Windows</string >
<string name="RadioButton2">Linux</string >
<string name="RadioButton3">Mocos</string >
<string name="RadioButton4">Java</string >
在Activity中让editText显示在屏幕上并实现监听:
/**
* 得到TextView对象
* 得到两个EditTextView对象
*/
textview = (TextView)findViewById(R.id.textView1);
edittext_num = (EditText)findViewById(R.id.editText1);
edittext_pass= (EditText)findViewById(R.id.editText2);
/**
* 对EditText进行监听
* 得到编辑框里面的内容并显示
*/
edittext_num.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//if(!(textview.getText().toString()==null))
textview.setText("edittext_num:"+edittext_num.getText().toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
edittext_pass.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//if(!(textview.getText().toString()==null))
textview.setText("你正在编辑edittext_pass");
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
}
示例的效果图以下:
Button类的层次关系以下:
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳android.widget.Button
直接子类:
CompoundButton
间接子类:
CheckBox, RadioButton, ToggleButton
方法 |
功能描述 |
返回值 |
Button |
Button类的构造方法 |
Null |
onKeyDown |
当用户按键时,该方法调用 |
Boolean |
onKeyUp |
当用户按键弹起后,该方法被调用 |
Boolean |
onKeyLongPress |
当用户保持按键时,该方法被调用 |
Boolean |
onKeyMultiple |
当用户屡次调用时,该方法被调用 |
Boolean |
invalidateDrawable |
刷新Drawable对象 |
void |
scheduleDrawable |
定义动画方案的下一帧 |
void |
unscheduleDrawable |
取消scheduleDrawable定义的动画方案 |
void |
onPreDraw |
设置视图显示,列如在视图显示以前调整滚动轴的边界 |
Boolean |
sendAccessibilityEvent |
发送事件类型指定的AccessibilityEvent。发送请求以前,须要检查Accessibility是否打开 |
void |
sendAccessibilityEventUnchecked |
发送事件类型指定的AccessibilityEvent。发送请求以前,不须要检查Accessibility是否打开 |
void |
setOnKeyListener |
设置按键监听 |
void |
因为Button是继承TextView,因此TextView有的属性,它都能用。
属性 |
描述 |
android:layout_height |
设置控件高度。可选值:fill_parent,warp_content,px |
android:layout_width |
设置控件宽度,可选值:fill_parent,warp_content,px |
android:text |
设置控件名称,能够是任意字符 |
android:layout_gravity |
设置控件在布局中的位置,可选项:top,left,bottom,right,center_vertical,fill_vertica,fill_horizonal,center,fill等 |
android:layout_weight |
设置控件在布局中的比重,可选值:任意的数字 |
android:textColor |
设置文字的颜色 |
android:bufferType |
设置取得的文本类别,normal、spannable、editable |
android:hint |
设置文本为空是所显示的字符 |
android:textColorHighlight |
设置文本被选中时,高亮显示的颜色 |
android:inputType |
设置文本的类型,none,text,textWords等 |
Button能够在xml中声明,也能够在代码中动态建立。
在xml中:
<Button android:orientation="vertical"
android:layout_height="wrap_content" android:id="@+id/button1"
android:layout_width="wrap_content"
android:textColor="#0000FF"
android:text="这是button1,能够点击" />
<Button android:orientation="vertical"
android:layout_height="wrap_content" android:id="@+id/button2"
android:layout_width="wrap_content"
android:textColor="#CD0000"
android:text="这是button2,能够点击" />
<Button android:orientation="vertical"
android:layout_height="wrap_content" android:id="@+id/button3"
android:layout_width="wrap_content"
android:textColor="#000000"
android:text="这是button3,能够点击" />
在代码中建立Button:
button4 = new Button(this);
button4.setId(100);
button4.setText("动态建立的Button");
button4.setTextColor(Color.GREEN);
建立好了Button后,咱们就能够对其进行监听了,其中有两种方式:
一种是继承OnClickListenner接口:
public class ButtonActivity extends Activity implements OnClickListener{
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(this);
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
.........
break;
}
}
}
另外一种方式是:
public class ButtonActivity extends Activity{
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
// TODO Auto-generated method stub
..........
}
});
}
效果图:
ImageButton是带有图标的按钮,它的类层次关系以下:
java.lang.Object
android.view.View
android.widget.ImageView
android.widget.ImageButton
方法 |
功能描述 |
返回值 |
ImageButton |
构造函数 |
null |
setAdjustViewBounds |
设置是否保持高宽比,须要与maxWidth和maxHeight结合起来一块儿使用 |
Boolean |
getDrawable |
获取Drawable对象,获取成功返回Drawable,不然返回null |
Drawable |
getScaleType |
获取视图的填充方式 |
ScaleType |
setScaleType |
设置视图的填充方式,包括矩阵、拉伸等七种填充方式 |
void |
setAlpha |
设置图片的透明度 |
void |
setMaxHeight |
设置按钮的最大高度 |
void |
setMaxWidth |
设置按钮的最大宽度 |
void |
setImageURI |
设置图片的地址 |
void |
setImageResource |
设置图片资源库 |
void |
setOnTouchListener |
设置事件的监听 |
Boolean |
setColorFilter |
设置颜色过滤 |
void |
属性 |
描述 |
android:adjustViewBounds |
设置是否保持宽高比,true或false |
android:cropToPadding |
是否截取指定区域用空白代替。单独设置无效果,须要与scrollY一块儿使用。True或者false |
android:maxHeight |
设置图片按钮的最大高度 |
android:maxWidth |
设置图片的最大宽度 |
android:scaleType |
设置图片的填充方式 |
android:src |
设置图片按钮的drawable |
android:tint |
设置图片为渲染颜色 |
两种实现方式,在xml和代码中均可以实现,但相比较而言,在xml中实现更有利于代码的改动:
在xml中声明 :
<ImageButton
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/p1" //使用本身的图片
/>
<ImageButton
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/sym_call_incoming " //使用系统自带的图片
/>
在代码中建立
magebutton3 = new ImageButton(this);
imagebutton3.setId(100);
//设置本身的图片
imagebutton3.setBackgroundDrawable(getResources().getDrawable(R.drawable.p2));
接下来就能够对imagebutton进行监听,咱们这里是在经过继承OnClickListener接口来实现的:
imagebutton1 = (ImageButton)findViewById(R.id.button1);
imagebutton2 = (ImageButton)findViewById(R.id.button2);
//注册监听
imagebutton1.setOnClickListener(this);
imagebutton2.setOnClickListener(this);
/注册监听
imagebutton3.setOnClickListener(this);
//加入布局
layout = new LinearLayout(this);
layout.addView(imagebutton3,param);
linnearlayout.addView(layout,param);
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.button1:
textveiw.setText("你刚才点击的是ImageButton1");
break;
case R.id.button2:
textveiw.setText("你刚才点击的是ImageButton2");
break;
case 100:
textveiw.setText("你刚才点击的是ImageButton3");
if(s){
imagebutton3.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.stat_sys_vp_phone_call_on_hold));
s=false;
break;
}
imagebutton3.setBackgroundDrawable(getResources().getDrawable(R.drawable.p2));
s = true;
break;
}
}
效果以下:
多项选择CheckBox组件也被称为复选框,该组件经常使用于某选项的打开或者关闭。它的层次关系以下:
java.lang.Object
android.widget.CompoundButton
android.widget.CheckBox
方法 |
功能描述 |
返回值 |
dispatchPopulateAccessibilityEvent |
在子视图建立时,分派一个辅助事件 |
boolean(true:完成辅助事件分发 false:没有完成辅助事件分发) |
isChecked |
判断组件状态是否勾选 |
boolean(true:被勾选,false:未被勾选) |
onRestoreInstanceState |
设置视图恢复之前的状态 |
void |
performClick |
执行click动做,该动做会触发事件监听器 |
boolean(true:调用事件监听器,false:没有调用事件监听器) |
setButtonDrawable |
根据Drawable对象设置组件的背景 |
void |
setChecked |
设置组件的状态 |
void |
setOnCheckedChangeListener |
设置事件监听器 |
void |
tooggle |
改变按钮当前的状态 |
void |
onCreateDrawableState |
获取文本框为空时,文本框里面的内容 |
CharSequence |
onCreateDrawableState |
为当前视图生成新的Drawable状态 |
int[] |
下面是一个使用ChekBox的实例:
在XML中声明定义4个CheckBox:
<TextView
android:id="@+id/TextView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<CheckBox
android:id="@+id/CheckBox1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/CheckBox1"
>
</CheckBox>
<CheckBox
android:id="@+id/CheckBox2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/CheckBox2"
>
</CheckBox>
<CheckBox
android:id="@+id/CheckBox3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/CheckBox3"
>
</CheckBox>
<CheckBox
android:id="@+id/CheckBox4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/CheckBox4"
>
</CheckBox>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交"
>
</Button>
在/rec/values/string.xml中定义四个选项:
<string name="CheckBox1">篮球</string>
<string name="CheckBox2">足球</string>
<string name="CheckBox3">乒乓球</string>
<string name="CheckBox4">排球</string>
而后在Activity中就可使用并监听CheckBox了:
//用来显示题目
TextView m_TextView1;
//“提交按钮”
Button m_Button1;
//4个多选项
CheckBox m_CheckBox1;
CheckBox m_CheckBox2;
CheckBox m_CheckBox3;
CheckBox m_CheckBox4;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m_TextView1 = (TextView) findViewById(R.id.TextView1);
m_Button1 = (Button) findViewById(R.id.button1);
/* 取得每一个CheckBox对象 */
m_CheckBox1 = (CheckBox) findViewById(R.id.CheckBox1);
m_CheckBox2 = (CheckBox) findViewById(R.id.CheckBox2);
m_CheckBox3 = (CheckBox) findViewById(R.id.CheckBox3);
m_CheckBox4 = (CheckBox) findViewById(R.id.CheckBox4);
//对每一个选项设置事件监听
m_CheckBox1.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(m_CheckBox1.isChecked())
{
DisplayToast("你选择了:"+m_CheckBox1.getText());
}
}
});
////////////////////
m_CheckBox2.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(m_CheckBox2.isChecked())
{
DisplayToast("你选择了:"+m_CheckBox2.getText());
}
}
});
/////////////////
m_CheckBox3.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(m_CheckBox3.isChecked())
{
DisplayToast("你选择了:"+m_CheckBox3.getText());
}
}
});
////////////////
m_CheckBox4.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(m_CheckBox4.isChecked())
{
DisplayToast("你选择了:"+m_CheckBox4.getText());
}
}
});
//对按钮设置事件监听
m_Button1.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
int num = 0;
if(m_CheckBox1.isChecked())
{
num++;
}
if(m_CheckBox2.isChecked())
{
num++;
}
if(m_CheckBox3.isChecked())
{
num++;
}
if(m_CheckBox4.isChecked())
{
num++;
}
DisplayToast("谢谢参与!你一共选择了"+num+"项!");
}
});
}
/* 显示Toast */
public void DisplayToast(String str)
{
Toast toast = Toast.makeText(this, str, Toast.LENGTH_SHORT);
//设置toast显示的位置
toast.setGravity(Gravity.TOP, 0, 220);
//显示该Toast
toast.show();
}
该实例的运行效果图以下所示;
RadioButton指的是一个单选按钮,它有选中和不选中两种状态,而RadioGroup组件也被称为单项按钮组,它能够有多个RadioButton。一个单选按钮组只能够勾选一个按钮,当选择一个按钮时,会取消按钮组中其余已经勾选的按钮的选中状态。
RadioButton的类层次关系以下:
java.lang.Object
android.widget.Button
android.widget.CompoundButton
android.widget.RadioButton
而RadioGroup类的层次关系以下:
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.LinearLayout android.widget.RadioGroup
RadioButton使用到的公共方法:
public void toggle ()
//将单选按钮更改成与当前选中状态相反的状态。
//若是这个单选按钮已经选中,这个方法将不切换单选按钮。
该方法的源码以下:
RadioGroup中使用到的公共方法:
(1)public void addView (View child, int index, ViewGroup.LayoutParams params)
功能:使用指定的布局参数添加一个子视图
参数:child 所要添加的子视图
index 将要添加子视图的位置
params 所要添加的子视图的布局参数
(2)public void check (int id)
若是传递-1做为指定的选择标识符来清除单选按钮组的勾选状态,至关于调用clearCheck()操做
参数:id 该组中所要勾选的单选按钮的惟一标识符(id)
参见 getCheckedRadioButtonId() clearCheck()
(3)public void clearCheck ()
功能:清除当前的选择状态,当选择状态被清除,则单选按钮组里面的全部单选按钮将取消勾选状态,getCheckedRadioButtonId()将返回null
参见
check(int)
getCheckedRadioButtonId()
(4)public RadioGroup.LayoutParams generateLayoutParams (AttributeSet attrs)
功能:基于提供的属性集合返回一个新的布局参数集合
参数: attrs 用于生成布局参数的属性
返回值:返回一个ViewGroup.LayoutParams或其子类的实例
(5)public int getCheckedRadioButtonId ()
功能:返回该单选按钮组中所选择的单选按钮的标识ID,若是没有勾选则返回-1
返回值:返回该单选按钮组中所选择的单选按钮的标识ID
参见
check(int)
clearCheck()
(6)public void setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener listener)
功能:注册一个当该单选按钮组中的单选按钮勾选状态发生改变时所要调用的回调函数
参数:listener 当单选按钮勾选状态发生改变时所要调用的回调函数
(7)public void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)
功能:注册一个当子内容添加到该视图或者从该视图中移除时所要调用的回调函数
参数:listener 当层次结构发生改变时所要调用的回调函数
RadioGroup中受保护的方法:
(1)protected LinearLayout.LayoutParams generateDefaultLayoutParams ()
功能:当布局为垂直方向时,将返回一个宽度为“填充父元素”(MATCH_PARENT),高度为“包裹内容”的布局参数集合,若是为水平方向时,将返回宽度为“包裹内容”,高度为“填充父元素”的布局参数集合
(match_parent即为fill_parent,public static final int FILL_PARENT/MATCH_PARENT = -1 )
返回值:返回一个默认的布局参数集合
(2)protected void onFinishInflate ()
功能:当视图从XML中加载,且相应的子视图被添加以后,调用该方法,
即便子类重写了该方法,应该确保去调用父类的方法(一般放在方法在第一句),这样才能完成相应的调用参数
返回值: 返回一个默认的布局参数集合
XML布局中:
<RadioGroup
android:id="@+id/RadioGroup01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_x="3px"
android:layout_y="54px"
>
<!-- 选项要在rec/values/string.xml中定义 -->
<RadioButton
android:id="@+id/RadioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/RadioButton1"
/>
<RadioButton
android:id="@+id/RadioButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/RadioButton2"
/>
<RadioButton
android:id="@+id/RadioButton3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/RadioButton3"
/>
<RadioButton
android:id="@+id/RadioButton4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/RadioButton4"
/>
</RadioGroup>
Avtivity中:
/**
* 得到TextView对象
* 得到RadioGroup对象
* 得到4个RadioButton对象
*/
m_TextView = (TextView) findViewById(R.id.TextView01);
m_RadioGroup = (RadioGroup) findViewById(R.id.RadioGroup01);
m_Radio1 = (RadioButton) findViewById(R.id.RadioButton1);
m_Radio2 = (RadioButton) findViewById(R.id.RadioButton2);
m_Radio3 = (RadioButton) findViewById(R.id.RadioButton3);
m_Radio4 = (RadioButton) findViewById(R.id.RadioButton4);
/* 设置事件监听 */
m_RadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
// TODO Auto-generated method stub
if (checkedId == m_Radio2.getId())
{
DisplayToast("正确答案:" + m_Radio2.getText() + ",恭喜你,回答正确!");
}
else
{
DisplayToast("请注意,回答错误!");
}
}
});
}
/* 显示Toast */
public void DisplayToast(String str)
{
Toast toast = Toast.makeText(this, str, Toast.LENGTH_LONG);
//设置toast显示的位置
toast.setGravity(Gravity.TOP, 0, 220);
//显示该Toast
toast.show();
}
示例的效果图以下:
Toast是Android提供的“快显讯息”类,它的用途不少,使用起来很是的简单。它是直接继承java.lang.Object的。所以它的类层次结构以下:
java.lang.Object
android.widget.Toast
Toast中有两个关于Toast显示时间长短的常量:
常量
int LENGTH_LONG
持续显示视图或文本提示较长时间。该时间长度可定制。
参见
int LENGTH_SHORT
持续显示视图或文本提示较短期。该时间长度可定制。该值为默认值。
参见
(1)public int cancel ()
若是视图已经显示则将其关闭,尚未显示则再也不显示。通常不须要调用该方法。正常状况下,视图会在超过存续期间后消失。
(2)public int getDuration ()
返回存续期间
(3)public int getGravity ()
取得提示信息在屏幕上显示的位置。
请参阅 Gravity
setGravity()
(4)public float getHorizontalMargin ()
返回横向栏外空白。
(5)public float getVerticalMargin ()
返回纵向栏外空白。
(6)public View getView ()
返回 View 对象。
(7)public int getXOffset ()
返回相对于参照位置的横向偏移像素量。
Toast msg = Toast.makeText(Main.this, "Message", Toast.LENGTH_LONG);
msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);
msg.show();
(8)public int getYOffset ()
返回相对于参照位置的纵向偏移像素量。
(9)public static Toast makeText (Context context, int resId, int duration)
生成一个从资源中取得的包含文本视图的标准 Toast 对象。
参数:
context 使用的上下文。一般是你的 Application 或 Activity 对象。
resId 要使用的字符串资源ID,能够是已格式化文本。
duration 该信息的存续期间。值为 LENGTH_SHORT 或 LENGTH_LONG
异常:
当资源未找到时抛异常Resources.NotFoundException
(10)public static Toast makeText (Context context, CharSequence text, int duration)
生成一个包含文本视图的标准 Toast 对象。
参数:
context |
使用的上下文。一般是你的 Application 或 Activity 对象。 |
resId |
要显示的文本,能够是已格式化文本。 |
duration |
该信息的存续期间。值为 LENGTH_SHORT 或 LENGTH_LONG |
|
|
(11)public void setDuration (int duration)
设置存续期间。
请参阅
(12)public void setGravity (int gravity, int xOffset, int yOffset)
设置提示信息在屏幕上的显示位置。
(自定义Toast的显示位置,toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0)能够把Toast定位在左上角。Toast提示的位置xOffset:大于0向右移,小于0向左移
请参阅
(13)public void setMargin (float horizontalMargin, float verticalMargin)
设置视图的栏外空白。
参数:
horizontalMargin 容器的边缘与提示信息的横向空白(与容器宽度的比)。
verticalMargin 容器的边缘与提示信息的纵向空白(与容器高度的比)。
(14)public void setText (int resId)
更新以前经过 makeText() 方法生成的 Toast 对象的文本内容。
参数: resId 为 Toast 指定的新的字符串资源ID。
(15)public void setText (CharSequence s)
更新以前经过 makeText() 方法生成的 Toast 对象的文本内容。
参数s 为 Toast 指定的新的文本
(16)public void setView (View view)
设置要显示的 View 。
(注意这个方法能够显示自定义的toast视图,能够包含图像,文字等等。是比较经常使用的方法。)
请参阅
(17)public void show ()
按照指定的存续期间显示提示信息。
咱们接下来的示例要实现的是Toast的直接显示以及toast显示view的内容:
首先咱们在XML布局中声明了两个Button按钮:
<Button android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Toast显示View"
/>
<Button android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Toast直接输出"
/>
而后在Activity中:
Button button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(bt1lis);
Button button2=(Button)findViewById(R.id.button2);
button2.setOnClickListener(bt2lis);
}
OnClickListener bt1lis=new OnClickListener(){
public void onClick(View v) {
showToast();
}
};
OnClickListener bt2lis=new OnClickListener(){
public void onClick(View v) {
Toast.makeText(Z_Toast1Activity.this,"直接输出测试", Toast.LENGTH_LONG).show();
}
};
public void showToast(){
LayoutInflater li=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view=li.inflate(R.layout.toast,null);
//把布局文件toast.xml转换成一个view
Toast toast=new Toast(this);
toast.setView(view);
//载入view,即显示toast.xml的内容
TextView tv=(TextView)view.findViewById(R.id.tv1);
tv.setText("Toast显示View内容");
//修改TextView里的内容
toast.setDuration(Toast.LENGTH_SHORT);
//设置显示时间,长时间Toast.LENGTH_LONG,短期为Toast.LENGTH_SHORT,不能够本身编辑
toast.show();
}
咱们实现的效果图以下:
Spinner功能相似RadioGroup,相比RadioGroup,Spinner提供了体验性更强的UI设计模式。一个Spinner对象包含多个子项,每一个子项只有两种状态,选择或未被选中。Spinner类的层次关系以下:
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.AdapterView<T extends android.widget.Adapter>
android.widget.AbsSpinner
android.widget.Spinner
(1)public int getBaseline()
返回这个控件文本基线的偏移量。若是这个控件不支持基线对齐,那么方法返回-1.
返回值:返回控件基线左边边界位置,不支持时返回-1
(这个类不知道干什么用,只找到下面的代码
(2)public CharSequence getPrompt()
返回值: 当对话框弹出的时候显示的提示(即:得到弹出视图上的标题字)
(3)public void onClick(DialogInterface dialog, int which)
当点击弹出框中的项时这个方法将被调用。
参数:dialog 点击弹出的对话框
which 点击按钮(如:Button)或者点击位置
(4)public Boolean performClick()
若是它被定义就调用此视图的OnClickListener(译者注:例如能够在加载时默认弹出下拉列表)。
返回值 : 为True一个指定的OnClickListener被调用,为false时不被调用。
(5)public void setOnItemClickListener(AdapterView.OnItemClickListener I)
Spinner不支持item的点击事件,调用此方法将引起异常。
参数:l 这个监听将被忽略
(6)public void setPromptId(CharSequence prompt)
设置对话框弹出的时候显示的提示(译者注:设置弹出视图上的标题字)
参数
prompt 设置的提示
(7)public void setPromptId(int promptId)
设置对话框弹出的时候显示的提示(译者注:设置弹出视图上的标题字)
参数:prompted 当对话框显示是显示这个资源id所表明的提示。
受保护的方法
(8)protected void onDetachedFromWindow ()
当这个视图从屏幕上卸载时候被调用。在这一点上再也不绘制视图。
(9)protected void onLayout(boolean changed, int l, int t, int r, int b)
当View要为全部子对象分配大小和位置时,调用此方法。派生类与子项们应该重载这个方法和调用布局每个子项。
参数:changed 这是这个视图的一个新的大小或位置
l 相对父空间的左位置
t 相对父空间的顶端位置
r 相对父空间的右端位置
b 相对父空间的底部位置
参见
Creates and positions all views
XML属性
属性名称 |
描述 |
android:prompt |
该提示在下拉列表对话框显示时显示。(也就是对话框的标题:
|
首先咱们在Xml中声明Spinner,这里同时声明了一个TextView方便等下显示Spinner的监听结果:
<TextView android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"/>
<Spinner android:id="@+id/Spinner01"
android:layout_width="300dip"
android:layout_height="wrap_content">
</Spinner>
而后就能够在Activity中使用了:
final TextView textview = (TextView)findViewById(R.id.TextView01);
Spinner spinner = (Spinner) findViewById(R.id.Spinner01);
final List<String> list = new ArrayList<String>();
list .add("Spinner子项1");
list .add("Spinner子项2");
list .add("Spinner子项3");
//将可选内容list与ArrayAdapter相链接
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list );
//设置下拉列表的风格
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//将Adapter添加到Spinner
spinner.setAdapter(adapter);
好了,到这步以及在屏幕上能够显示出Spinner了,接下来就是添加事件监听了
//添加事件监听
spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
textview.setText("你当前选择的是: "+list.get(arg2));
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
示例的使用效果图以下:
ListView是用来显示一个列表的控件,如下是ListView类的层次关系:
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.AdapterView<T extends android.widget.Adapter> android.widget.AbsListView android.widget.ListView
直接子类
ExpandableListView (使用竖滚动条查看的两级列表视图)
公共方法
(1)public void addFooterView (View v)
加一个固定显示于list底部的视图。若是此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。
注意:在调用setAdapter以前调用此方法。这样的话,能够利用点击光标来收起有header view和footer view的ListView。
参数:v 要加的视图
(2)public void addFooterView (View v, Object data, boolean isSelectable)
加一个固定显示于list底部的视图。若是此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。
注意:在调用setAdapter以前调用此方法。这样的话,能够利用点击光标来收起有header view和footer view的ListView。
参数:v 要加的视图
data 和此视图关联的数据
isSelectable 设为true则表示footer view能够被选中
(3)public void addHeaderView (View v)
加一个固定显示于list顶部的视图。若是此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。
注意:在调用setAdapter以前调用此方法。这样的话,能够利用点击光标来收起有header view和footer view的ListView。
参数:v 要加的视图
(4)public void addHeaderView (View v, Object data, boolean isSelectable)
加一个固定显示于list顶部的视图。若是此方法被调用超过一次,所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。
注意:在调用setAdapter以前调用此方法。这样的话,能够利用点击光标来收起有header view和footer view的ListView。
参数:v 要加的视图
data 和此视图关联的数据
isSelectable 表示此header view可选与否
(5)public void clearChoices ()
取消以前设置的任何选择
(6)public boolean dispatchKeyEvent (KeyEvent event)
按照能够得到焦点的顺序(从视图树的顶端到当前得到焦点的视图),分派一个按键事件给下一个视图。若此视图有焦点,事件将会分派给它本身。不然它将按照顺序,分派给下一个节点。此方法同时触动全部按键监听器。
参数:event 被分派的事件
返回:若事件被处理,则返回true;不然为false
(7)public boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)
在视图的子项目被构建时,分派一个辅助事件。
参数:event 事件
返回:若事件所有完成,则返回true
(8)public ListAdapter getAdapter ()
返回ListView当前用的适配器。返回的适配器不能够和传给setAdapter(ListAdapter)的参数同样,可是能够是WrapperListAdapter。
返回:当前用来显示ListView中数据的适配器
参见:setAdapter(ListAdapter)
(9)public long[] getCheckItemIds ()
此方法已通过时了。使用getCheckedItemIds()代替。
返回被选中项目的索引集合。只有当选择模式没有被设置为CHOICE_MODE_NONE时才有效。
(10)public long[] getCheckedItemIds ()
返回被选中项目的索引集合。只有当选择模式没有被设置为CHOICE_MODE_NONE,而且适配器有稳定的 ID(hasStableIds()==true) 时,结果才有效。
返回
一个新的数组,包含列表中每一个被选中的索引(id)
(11)public int getCheckedItemPosition ()
返回当前被选中的项目。只有当选择模式已被设置为CHOICE_MODE_SINGLE时 ,结果才有效。
返回:
返回当前被选中的项目的索引;若没有项目被选中,则返回INVALID_POSITION
参见
setChoiceMode(int)
(12)public SparseBooleanArray getCheckedItemPositions ()
返回当前被选中的项目集合。只有当选择模式没有被设置为CHOICE_MODE_NONE时 ,结果才有效。
返回
类型为SparseBooleanArray的值,其中,对每个索引所表明的项目,若被选中,则返回true;当选择模式被设置为CHOICE_MODE_NONE时 ,返回null。
(13)public int getChoiceMode ()
返回
返回当前的选择模式
参见
setChoiceMode(int)
(14)public Drawable getDivider ()
返回
返回当前画在列表元素之间,做为分隔符的图形
(15)public int getDividerHeight ()
返回
返回分隔符的高度
(16)public int getFooterViewsCount ()
返回
列表中的页脚视图数量;缺省实现时,数量为0
(17)public int getHeaderViewsCount ()
返回
列表中的页眉视图数量;缺省实现时,数量为0
(18)public boolean getItemsCanFocus ()
返回
ListAdapter所生成的视图是否能够包含能取得焦点的项目
(19)public int getMaxScrollAmount ()
返回
The maximum amount a list view will scroll in response to an arrow event.
响应箭头事件时,列表视图能够滚动的最大值。(译者注:此处翻译待改进,恐怕须要仔细查看源代码才能明白其含义,也能够用Google Code搜索相关的代码)
(20)public boolean isItemChecked (int position)
对于由position指定的项目,返回其是否被选中。只有当选择模式已被设置为CHOICE_MODE_SINGLE或CHOICE_MODE_MULTIPLE时 ,结果才有效。
参数
position 要返回选中状态的项目
返回
返回项目的选中状态;若选择模式无效,则返回false
(21)public boolean onKeyDown (int keyCode, KeyEvent event)
KeyEvent.Callback.onKeyMultiple()的缺省实现:若视图被激活而且能够被点击,当出现KEYCODE_DPAD_CENTER和KEYCODE_ENTER表明的行为时,作点击该视图的动做。
参数
keyCode 表示按某个按键的按键代号,参见KeyEvent
event 定义按键动做的按键事件对象
返回
若事件被成功处理,则返回true;若想要下一个接收器处理该事件,则返回false
(22)public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)
KeyEvent.Callback.onKeyMultiple()的缺省实现:老是返回false(不处理该事件)。
参数
keyCode 表示按某个按键的按键代号,参见KeyEvent
repeatedCount 实现动做的次数
event 定义按键动做的按键事件对象
返回
若事件被成功处理,则返回true;若想要下一个接收器处理该事件,则返回false
(23)public boolean onKeyUp (int keyCode, KeyEvent event)
KeyEvent.Callback.onKeyMultiple()的缺省实现:当出现KEYCODE_DPAD_CENTER和KEYCODE_ENTER表明的行为时,作点击该视图的动做。
参数
keyCode 表示按某个按键的按键代号,参见KeyEvent
event 定义按键动做的按键事件对象
返回
若事件被成功处理,则返回true;若想要下一个接收器处理该事件,则返回false
(24)public void onRestoreInstanceState (Parcelable state)
从新建立并显示一个视图,此视图拥有以前onSaveInstanceState()保存的内部状态。当state为null时,此方法不会被调用。
参数
state 以前onSaveInstanceState()保存的状态
(25)public Parcelable onSaveInstanceState ()
保存视图的内部状态,用于之后建立新的拥有一样状态的实例。可保存的状态只包含非持久性的,或者可从新组建的信息。好比,永远不可能保存你当前在屏幕上的位置,由于当新的实例被放置于视图层次体系中时,位置会被从新计算。
一些能够被保存的状态:文本视图(可是一般不是指文本自己,由于文本是被保存在内容提供商或其余持久性的储存体中)中当前的光标位置;列表视图中当前的选中项。
返回
返回一个包含视图当前动态状态的接口方法对象;若没有东西被保存,则返回null。缺省状况下返回null。
(26)public boolean onTouchEvent (MotionEvent ev)
此方法用于处理触摸屏的动做事件。
参数
ev 动做事件
返回
若事件被成功处理,则返回true;不然返回false
(27)public boolean performItemClick (View view, int position, long id)
调用定义好的OnItemClickListener。
参数
view AdapterView中被点击到的视图
position 视图在适配器中的索引
id 被点击到的项目的行id
返回
如有定义好的OnItemClickListener被成功调用,则返回true;不然返回false
(28)public boolean removeFooterView (View v)
删除以前加入的某个页脚视图。
参数
v 要删除的视图
返回
若视图被成功删除,则返回true;若此视图不是页脚视图,则返回false
(29)public boolean removeHeaderView (View v)
删除以前加入的某个页眉视图。
参数
v 要删除的视图
返回
若视图被成功删除,则返回true;若此视图不是页眉视图,则返回false
(30)public boolean requestChildRectangleOnScreen (View child, Rect rect, boolean immediate)
当组里的某个子项须要被定位在屏幕的某个矩形范围时,调用此方法。
重载此方法的ViewGroup可确认如下几点:
· 子项目将是组里的直系子项
· 矩形将在子项目的坐标体系中
重载此方法的ViewGroup必须保证如下几点:
· 若矩形已是可见的,则没有东西会改变
· 为使矩形区域所有可见,视图将能够被滚动显示
参数
child 发出请求的子项目
rect 子项目坐标系内的矩形,即此子项目但愿在屏幕上的定位
immediate 设为true,则禁止动画和缓释移动滚动条
返回
这个可滚动显示的组,是否接受请求
(31)public void setAdapter (ListAdapter adapter)
设置ListView背后的数据。根据ListView目前使用的特性,adapter可能被WrapperListAdapter收起。例如:加页眉和/或页脚会使adapter被收起。
参数
adapter 负责维护列表背后的数据,以及生成视图来显示数据里的项目
参见
getAdapter()
(32)public void setCacheColorHint (int color)
当color的值不为0时,此值表示的颜色将提示使用者,列表正在一片单色不透明的背景上被画出。
参数
color 背景色
(33)public void setChoiceMode (int choiceMode)
设置List的选择模式。缺省状况下,列表没有选择模式(即值为CHOICE_MODE_NONE)。
参数
choiceMode 值可为CHOICE_MODE_NONE,CHOICE_MODE_NONE和CHOICE_MODE_NONE中的一种
(34)public void setDivider (Drawable divider)
设置将画在列表中每一个项目之间的图形。若是图形没有已设定好的高度,则必须同时调用setDividerHeight(int)。
参数
divider 将用做分隔符的图形
(35)public void setDividerHeight (int height)
设置分隔符(画在列表中每一个项目之间)的高度。调用此方法将覆盖由setDivider(Drawable)设置的高度。
参数
height 分隔符的新高度,单位为像素
(36)public void setFooterDividersEnabled (boolean footerDividersEnabled)
设置能够或者不能够为页脚视图画上分隔符。
参数
headerDividersEnabled 设为true,代表能够画;设为false则不能够
参见
setHeaderDividerEnabled(boolean)
addFooterView(android.view.View)
(37)public void setHeaderDividersEnabled (boolean headerDividersEnabled)
设置能够或者不能够为页眉视图画上分隔符。
参数
headerDividersEnabled 设为true,代表能够画;设为false则不能够
参见
setFooterDividerEnabled(boolean)
addHeaderView(android.view.View)
(38)public void setItemChecked (int position, boolean value)
设置position所指定项目的选择状态。只有选择模式为CHOICE_MODE_SINGLE或者CHOICE_MODE_MULTIPLE时,此设置才有效。
参数
position 须要改变选择状态的项目的索引
value 新的选择状态
(39)public void setItemsCanFocus (boolean itemsCanFocus)
代表在由ListAdapter建立的视图中,可包含能得到焦点的项目。
参数
itemsCanFocus 若项目能得到焦点,则设为true;不然为false
(40)public void setSelection (int position)
选中position指定的项目。若为触摸模式,则指定项目不会被选中,但位置变化同样。若position的值小于0,则position为0的项目将被选中。
参数
position 须要选中的项目的索引(从0开始)
(41)public void setSelectionAfterHeaderView ()
选中页眉视图下的第一个列表项目。
(42)public void setSelectionFromTop (int position, int y)
选中position指定的项目,并将所选项置于距离ListView顶端y像素的位置(若为触摸模式,则指定项目不会被选中,但位置变化同样)。
参数
position 须要选中的项目的索引(从0开始)
y 距离ListView(包括间隙)顶端的位置
受保护方法
(43) protected boolean canAnimate ()
表示此视图组是否能够在第一次被布局后,仍能够动态调整其子项。
返回
若能够则为true,不然为false
(44)protected void dispatchDraw (Canvas canvas)
调用此方法来绘出子视图。可被衍生类重写,以便在其子项被画出以前取得控制权。
参数
canvas 绘出View所用的canvas(画布?)
(45)protected View findViewTraversal (int id)
参数
id 要找的View的id
返回值
有此id的View,若没有找到则为null
(46)protected View findViewWithTagTraversal (Object tag)
参数
tag 要找的View的标签
返回值
有此标签的View,若没有找到则为null
(47)protected void layoutChildren ()
子类必须重写此方法来布局其子项。
(48)protected void onFinishInflate ()
当View以及全部子项从XML中导入时被调用,是导入的最后一步。即便子类重写onFinishInflate,也必须保证有调用超方法,这样,方法才会被调用。
(49)protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect)
当View的焦点改变时被调用。重写时,要确保超类的直接调用,这样取得焦点的方式才是标准的。
参数
gainFocus 若View有焦点,则为True;不然为False。
direction 当requestFocus()被调用时,方向焦点被移动。其值可为FOCUS_UP,FOCUS_DOWN,FOCUS_LEFT或FOCUS_RIGHT。在使用缺省条件的状况下,direction并不老是可用。
previouslyFocusedRect 以前获得焦点的View的坐标系统所构成的矩形。若是可用,这个将被当成精确信息(代表焦点从何而来以及从何方向而来)来传递;不然将传递null。
(50)protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
View调用此方法来肯定自己和所包含内容的大小。此方法被measure(int,int)唤起,并且必须被子类重写以获得所包含内容的确切大小。
注意:当重写此方法时,必须调用setMeasureDimension(int,int)来保存View的大小。若是没有作到,将会引起一个measure(int,int)抛出的IllegalStateException(非法状态错误)。超类onMeasure(int,int)能够被调用。
编写基类的确认大小的方法,缺省状况下是根据其背景大小来确认,除非MeasureSepc容许有更大的高度或宽度。子类必须重写onMeasure(int,int)以获得对其内容大小的更准确的测量。
若此方法被重写,它的子类须要确保其高度和宽度至少达到View所规定的最小值(可经过getSuggestedMinimumHeight()和getSuggestedMinimumWidth()获得)。
参数
widthMeaureSpec 受上一层大小影响下的对水平空间的要求。可参看View.MeasureSpec。
heightMeasureSpec 受上一层大小影响下的对垂直空间的要求。可参看View.MeasureSpec。
protected void onSizeChanged (int w, int h, int oldw, int oldh)
当VIew的大小改变时此方法被调用。若是VIew是刚刚被加入,则视以前的值为0。
参数
w View的当前宽度
h View的当前高度
oldw View大小改变以前的宽度
oldh View大小改变以前的高度
XML属性
属性名称 |
描述 |
android:choiceMode |
规定此ListView所使用的选择模式。缺省状态下,list没有选择模式。 属性值必须设置为下列常量之一: none,值为0,表示无选择模式; singleChoice,值为1,表示最多能够有一项被选中; multipleChoice,值为2,表示能够多项被选中。 可参看全局属性资源符号choiceMode。 |
android:divider |
规定List项目之间用某个图形或颜色来分隔。能够用"@[+][package:]type:name"或者"?[package:][type:]name"(主题属性)的形式来指向某个已有资源;也能够用"#rgb","#argb","#rrggbb"或者"#aarrggbb"的格式来表示某个颜色。 可参看全局属性资源符号divider。 |
android:dividerHeight |
分隔符的高度。若没有指明高度,则用此分隔符固有的高度。必须为带单位的浮点数,如"14.5sp"。可用的单位如px(pixel像素),dp(density-independent pixels 与密集度无关的像素), sp(scaled pixels based on preferred font size 基于字体大小的固定比例的像素), in (inches英寸), mm (millimeters毫米)。 能够用"@[package:]type:name "或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。 可参看全局属性资源符号dividerHeight。 |
android:entries |
引用一个将使用在此ListView里的数组。若数组是固定的,使用此属性将比在程序中写入更为简单。 必须以"@[+][package:]type:name"或者 "?[package:][type:]name"的形式来指向某个资源。 可参看全局属性资源符号entries。 |
android:footerDividersEnabled |
设成flase时,此ListView将不会在页脚视图前画分隔符。此属性缺省值为true。 属性值必须设置为true或false。 能够用"@[package:]type:name "或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。 可参看全局属性资源符号footerDividersEnabled。 |
android:headerDividersEnabled |
设成flase时,此ListView将不会在页眉视图后画分隔符。此属性缺省值为true。 属性值必须设置为true或false。 能够用"@[package:]type:name "或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。 可参看全局属性资源符号headerDividersEnabled。 |
常量:
Int CHOICE_MODE_MULTIPLE
(常量值为2)列表容许同时选取多项
Int CHOICE_MODE_NONE
(常量值为0)普通列表,不指明选取模式
Int CHOICE_MODE_SINGLE
(常量值为1)列表只容许选取最多一项
首先在XML中声明一个ListView,一个TextView用来显示ListView的监听结果:
<TextView android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<ListView android:id="@+id/ListView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
而后在Avticity中:
final TextView textView = (TextView)findViewById(R.id.TextView01);
ListView listView = (ListView)findViewById(R.id.ListView01);
//建立数组list,用于存放要显示的内容
final List<String> list = new ArrayList<String>();
list.add("ListView子项1");
list.add("ListView子项2");
list.add("ListView子项3");
//将数据与适配器adapter链接
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, list );
//将adapter添加到ListView
listView.setAdapter(adapter);
//实现ListView的监听
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
textView.setText("你当前选择的是"+list.get(arg2).toString());
}
});
示例的效果图以下:
Google I/O 2010 - The world of ListView
ListView和getView的原理+如何在ListView中放置多个item
继承关系
public class TabHost extends FrameLayout implements ViewTreeObserver.OnTouchModeChangeListener
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.FrameLayout
android.widget.TabHost
内部类
interface TabHost.OnTabChangeListener
接口定义了当选项卡更改时被调用的回调函数
interface TabHost.TabContentFactory
当某一选项卡被选中时生成选项卡的内容
class TabHost.TabSpec
单独的选项卡,每一个选项卡都有一个选项卡指示符,内容和tag标签,以便于记录.
公共方法
(1)public void addTab (TabHost.TabSpec tabSpec)
新增一个选项卡
参数
tabSpec 指定怎样建立指示符和内容.
(2)public void clearAllTabs ()
从tab widget中移除全部关联到当前tab host的选项卡
(3)public boolean dispatchKeyEvent (KeyEvent event)
分发按键事件到焦点传递路线上的下一视图。焦点传递路线从视图树的顶层开始一直到当前获取焦点的视图中止。若是此视图已经获取焦点,将分发给它自身。不然,将分发到焦点传递路线的下一节点。此方法会触发任何一个按键监听器.
(译者注:关于focus path,能够参考如下地址:
http://blog.csdn.net/maxleng/archive/2010/05/04/5557758.aspx)
参数
event 分发的按键事件
返回值
若是事件已经处理则返回true,不然返回false.
(4)public void dispatchWindowFocusChanged (boolean hasFocus)
当窗口包含的此视图获取或丢失焦点时触发此方法.ViewGroups应该重写以路由到他的子元素
参数
hasFocus 若是窗口包含的此view依获取焦点,返回true,不然返回false.
(5)public int getCurrentTab ()
(译者注:获取当前选项卡的id)
(6)public String getCurrentTabTag ()
(译者注:当前选项卡的Tag标签内容)
(7)public View getCurrentTabView ()
(译者注:获取当前选项卡的视图view)
(8)public View getCurrentView ()
(译者注:获取当前的视图view)
(9)public FrameLayout getTabContentView ()
获取保存tab内容的FrameLayout
(10)public TabWidget getTabWidget ()
(译者注:根据系统规定的id:tabs来找到TabWidget,并返回,注意,这里的ID必须是tabs。源代码中表示以下:
private TabWidget mTabWidget;
mTabWidget=(TabWidget)findViewById(com.android.internal.R.id.tabs);)
(11)public TabHost.TabSpec newTabSpec (String tag)
获取一个新的TabHost.TabSpec,并关联到当前tab host
参数
tag 所需的选项卡标签(tag)
(12)public void onTouchModeChanged (boolean isInTouchMode)
当触摸模式发生改变时调用的回调函数.
参数
isInTouchMode 若是视图结构当前处于触摸模式,返回true,不然返回false.
(13)public void setCurrentTab (int index)
(译者注:设置当前的选项卡
参数
Index 为当前选项卡的索引。)
(14)public void setCurrentTabByTag (String tag)
(译者注:根据选项卡的Tab标签来设置当前的选项卡
参数
tag 想要被设置为当前选项卡的tag标签值。)
(15)public void setOnTabChangedListener(TabHost.OnTabChangeListener l)
注册一个回调函数,当选项卡中的任何一个tab的选中状态发生改变时调用。
(译者注:setCurrentTab(index)时会触发调用)
参数
l 将运行的回调函数
(16)public void setup ()
若是使用findViewById()加载TabHost,那么在新增一个选项卡tab以前,须要调用setup()。然而,当你在一个TabActivity里使用getTabHost()获取TabHost,你就再也不须要调用setup()了。(译者注:实现tab窗口的两种方法:继承activity时,使用findViewById()查找TabHost,而后调用setup();继承TabActivity,经过getTabHost()查找,此时不用调用setup())例子:
(17)public void setup (LocalActivityManager activityGroup)
若是你使用setContent(android.content.Intent),那么当activityGroup用于加载本地activity之时,必须调用此方法。若是你拓展(继承)TabActivity将自动调用setup()方法。
参数
activityGroup 用来为选项卡内容加载activities的ativityGroup
受保护方法
protected void onAttachedToWindow ()
当视图附加到窗口上时被调用。在这个点的表面进行绘制。注意此函数确保在onDraw(Cancas)以前调用,然而它可能在第一次执行onDraw以前的任什么时候间被调用——包括的onMeasure(int,int)的以前或以后。
protected void onDetachedFromWindow ()
当视图从窗口分离时被调用。在这个点的表面再也不有画面绘制。
咱们这里使用3个XML来实现
tab1.xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id = "@+id/layout01"
……
……
</LinearLayout>
tab2.xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout android:id="@+id/layout02"
……
……
</AbsoluteLayout>
tab3.xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/layout03"
……
……
</RelativeLayout>
注意:在Activity中咱们继承的是TabActivity:
public class TabDemo extends TabActivity {
TabHost tabHost = getTabHost();
LayoutInflater.from(this).inflate(R.layout.tab1,
tabHost.getTabContentView(),true);
LayoutInflater.from(this).inflate(R.layout.tab2,
tabHost.getTabContentView(),true);
LayoutInflater.from(this).inflate(R.layout.tab3,
tabHost.getTabContentView(),true);
tabHost.addTab(tabHost.newTabSpec("TAB1")
.setIndicator("线性布局").setContent(R.id.layout01));
tabHost.addTab(tabHost.newTabSpec("TAB2")
.setIndicator("绝对布局").setContent(R.id.layout02));
tabHost.addTab(tabHost.newTabSpec("TAB3")
.setIndicator("相对布局").setContent(R.id.layout03));
补充
文章连接
Android UI设计 Tab TabHost标签页的使用
LinearLayout是一种线性排列的布局,在线性布局中,全部的子元素都按照垂直或水平的顺序在界面上排列:
若是垂直排列,则每行仅包含一个界面元素,若是水平排列,则每列仅包含一个界面元素。能够经过属性android:orientation定义布局中子元素的排列方式。android.widget.LinearLayout类是android.view.viewGroup的子类,其中又派生了RadioGroup、TabWidget、TableLayout、TableRow、ZoomControls等类。
Android:id 为控件指定相应的ID
Android:text 指定控件当中显示的文字,须要注意的是,这里尽可能使用strings.xml文件当中的字符
Android:grivity 指定控件的基本位置,好比说居中,居右等位置Android:textSize 指定控件当中字体的大小 Android:background 指定该控件所使用的背景色,RGB命名法
Android:width 指定控件的宽度
Android:height 指定控件的高度
Android:padding* 指定控件的内边距,也就是说控件当中的内容
Android:sigleLine 若是设置为真的话,则将控件的内容在同一行当中进行显示
方法 |
功能描述 |
返回值 |
LinearLayout |
两个构造函数: LinearLayout(Contex context) LinearLayout(Contex contex,AttributeSet attrs) |
null |
getOrientation() |
获取布局的方向设置。0表明水平方向,1表明垂直方向 |
int |
isBaselineAligned() |
判断布局是否按照基线对齐 |
boolean |
setBaselineAligned(boolen baselineAligned) |
根据参数设置基线对齐 |
void |
setGravity(int gravity) |
根据指定的重力设置元素的大小 |
void |
setHorizontalGravity(int gravity) |
设置水平方向的重力 |
void |
setVerticalGravity(int gravity) |
设置垂直方向的重力 |
void |
gennerateDefaultLayoutParams |
返回包含宽度和高度的布局参数的集合 |
LayoutParams |
setGravity(int gravity) |
设置布局的重力 |
void |
|
|
|
在XML中设置以下:
<!-- 水平线性布局 -->
<LinearLayout android:layout_height="100dip"
android:orientation="horizontal" android:layout_width="fill_parent">
<TextView android:background="#aa0000" android:layout_width="wrap_content"
android:gravity="center_horizontal" android:text="第一列"
android:layout_weight="1" android:layout_height="50dip"></TextView>
<TextView android:background="#00aa00" android:layout_width="wrap_content"
android:gravity="center_horizontal" android:text="第二列"
android:layout_weight="1" android:layout_height="50dip"></TextView>
<TextView android:background="#0000aa" android:layout_width="wrap_content"
android:gravity="center_horizontal" android:text="第三列"
android:layout_weight="1" android:layout_height="50dip"></TextView>
</LinearLayout>
<!-- 垂直线性布局 -->
<LinearLayout
android:layout_height="100dip"
android:orientation="vertical" android:layout_width="fill_parent">
<TextView android:background="#aa0000" android:layout_width="fill_parent"
android:gravity="center_horizontal" android:text="第一行"
android:layout_weight="1" android:layout_height="50dip"></TextView>
<TextView android:background="#00aa00" android:layout_width="fill_parent"
android:gravity="center_horizontal" android:text="第二行"
android:layout_weight="1" android:layout_height="50dip"></TextView>
<TextView android:background="#0000aa" android:layout_width="fill_parent"
android:gravity="center_horizontal" android:text="第三行"
android:layout_weight="1" android:layout_height="50dip"></TextView>
></LinearLayout>
而后在就能够直接显示:
FrameLayout是布局中最简单的一个布局,在这个布局中,整个界面被当成一块空白备用区域,全部的子元素都不能被指定放置的位置,它们通通放于这块区域的左上角,而且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和所有遮挡。
FrameLayout的使用很简单,在XML中的声明为FrameLayout就能够:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="50dip"
android:textColor="#ffffff"
android:text="第一层"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="40dip"
android:textColor="#ffff00"
android:text="第二层"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="30dip"
android:textColor="#ff00ff"
android:text="第三层"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20dip"
android:textColor="#00ffff"
android:text="第四层"/>
</FrameLayout>
表格布局(TableLayout)也是一种经常使用的界面布局,它将屏幕划分网格,经过指定行和列能够将界面元素添加的网格中。
TableLayout事实上是LinearLayout的子类,它的层次关系以下:
java.lang.Object
android.view.View
android.widget.ViewGroup
android.widget.LinearLayout
android.widget.TableLayout
构造函数
public TableLayout (Context context)
为给定的上下文建立表格布局。
参数
context 应用程序上下文
public TableLayout (Context context, AttributeSet attrs)
使用指定的属性集合为给定的上下文建立表格布局。
参数
context 应用程序上下文
attrs 属性集合
公共方法
public void addView (View child)
添加子视图。若是子视图没有设置布局参数,则使用视图组(ViewGroup)的布局参数为该视图布局。
参数
child 添加的子视图
public void addView (View child, int index)
添加子视图。若是子视图没有设置布局参数,则使用视图组(ViewGroup)的布局参数为该视图布局。
参数
child 添加的子视图
index 子视图加入的位置索引
public void addView (View child, int index, ViewGroup.LayoutParams params)
用指定的布局参数添加一个子视图。
参数
child 添加的子视图
index 子视图加入的位置索引
params 为子视图指定得布局参数
public void addView (View child, ViewGroup.LayoutParams params)
使用指定的布局参数添加子视图。
参数
child 添加的子视图
params 设置到子视图上的布局参数
public TableLayout.LayoutParams generateLayoutParams (AttributeSet attrs)
返回一组基于提供的属性集合的布局参数集合。
参数
attrs 用于生成布局参数的属性集
返回值
ViewGroup.LayoutParams或其子类的实例
public boolean isColumnCollapsed (int columnIndex)
返回指定列的折叠状态。
参数
columnIndex 列索引
返回值
折叠时为true;不然为false
public boolean isColumnShrinkable (int columnIndex)
返回指定的列是否可收缩。
参数
columnIndex 列索引
返回值
若是列能够收缩,返回true;不然返回false
public boolean isColumnStretchable (int columnIndex)
返回指定的列是否可拉伸。
参数
columnIndex 列索引
返回值
若是列能够拉伸,返回true;不然返回false
public boolean isShrinkAllColumns ()
指示是否全部的列都是可收缩的。
返回值
若是全部列均可收缩,返回true;不然返回false
public boolean isStretchAllColumns ()
指示是否全部的列都是可拉伸的。
返回值
若是全部列均可拉伸,返回true;不然返回false
public void requestLayout ()
当某些变动致使视图的布局失效时调用该方法。该方法按照视图树的顺序调用。
public void setColumnCollapsed (int columnIndex, boolean isCollapsed)
折叠或恢复给定列。折叠时,列从屏幕上消失,其空间由其它列占用。 当列属于 TableRow 时才能够进行折叠/恢复操做。
调用该方法会请求布局操做。
相关XML属性
参数
columnIndex 列索引
isCollapsed 折叠时为true;不然为false
public void setColumnShrinkable (int columnIndex, boolean isShrinkable)
设置指定列是否可收缩。当行太宽时,表格能够收缩该列以提供更多空间。
调用该方法会请求布局操做。
相关XML属性
参数
columnIndex 列索引
isShrinkable 若是列能够收缩,设为真;不然设为假。默认是假。
public void setColumnStretchable (int columnIndex, boolean isStretchable)
设置指定列是否可拉伸。可拉伸时,列会尽量多的占用行中的可用空间。
调用该方法会请求布局操做。
相关XML属性
参数
columnIndex 列索引
isStretchable 若是列能够拉伸,设为真;不然设为假.默认是假
public void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)
注册当从视图中添加或移除子视图时发生的回调函数。
参数
listener 层次结构变动时执行的回调函数
public void setShrinkAllColumns (boolean shrinkAllColumns)
标记全部列为可收缩的便利的方法。
相关XML属性
参数
shrinkAllColumns 若是标记全部列为可收缩时为true
public void setStretchAllColumns (boolean stretchAllColumns)
标记全部列为可拉伸的便利的方法。
相关XML属性
参数
stretchAllColumns 若是标记全部列为可拉伸时为true
受保护方法
protected boolean checkLayoutParams (ViewGroup.LayoutParams p)
(译者注:检测是否是AbsoluteLayout.LayoutParams的实例)
protected LinearLayout.LayoutParams generateDefaultLayoutParams ()
返回宽度为MATCH_PARENT, 高度为WRAP_CONTENT的布局参数集合。
返回值
默认布局参数集合或空
protected LinearLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)
基于提供的布局参数返回一组安全的布局参数集合.当传入 ViewGroup 的视图的参数没有经过checkLayoutParams(android.view.ViewGroup.LayoutParams) 的检测时,调用该方法. 该方法会返回适合 ViewGroup 的新的布局参数,可能从指定的布局参数中复制适当的属性。
参数
p 要转换为适合于 ViewGroup 的布局参数的集合
返回值
ViewGroup.LayoutParams或其子类的实例
protected void onLayout (boolean changed, int l, int t, int r, int b)
该视图设置其子视图的大小及位置时调用.派生类能够重写此方法,并为其子类布局。
参数
changed 是否为视图设置了新的大小和位置
l 相对于父视图的左侧的位置
t 相对于父视图的顶部的位置
r 相对于父视图的右侧的位置
b 相对于父视图的底部的位置
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
评估视图及其内容,以决定其宽度和高度.此方法由measure(int, int) 调用,子类能够重载以提供更精确、更有效率的衡量其内容尺寸的方法。
约定: 覆盖该方法时,必须调用 setMeasuredDimension(int, int) 方法来保存评估结果的视图的宽度和高度.若是忘记将致使 measure(int, int) 方法抛出IllegalStateException
异常.要有效的利用父类的onMeasure(int, int)方法。
基类测量的是背景的大小,除非 MeasureSpec 容许超过背景.子类应该重写 onMeasure(int, int) 方法,觉得其内容提供更适合的大小。
若是重写了该方法,子类要确保其高度和宽度大于等于视图的最小高度和宽度. (getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth())
参数
widthMeasureSpec 父视图要求的横向空间大小.该要求由 View.MeasureSpec 进行了编码处理。
heightMeasureSpec 父视图要求的纵向空间大小.该要求由 View.MeasureSpec 进行了编码处理。
android:collapseColumns:以第0行为序,隐藏指定的列:
android:collapseColumns该属性为空时,以下图:
把android:collapseColumns=0,2--------------》意思是把第0和第2列去掉,以下图:
android:shrinkColumns:以第0行为序,自动延伸指定的列填充可用部分:
当LayoutRow里面的控件尚未布满布局时,shrinkColumns不起做用,以下图:
设置了shrinkColumns=0,1,2,布局彻底没有改变,由于LayoutRow里面还剩足够的空间。
当LayoutRow布满控件时,以下图:
设置设置了shrinkColumns=2,则结果以下图,控件自动向垂直方向填充空间:
android:stretchColumns:以第0行为序,尽可能把指定的列填充空白部分:
设置stretchColumns=1,则结果以下图,第1列被尽可能填充(Button02与TextView02同时向右填充,直到TextView03被压挤到最后边)。
若是如今咱们要实现下图所示的布局效果 :
咱们要在XML文件中做以下的相关声明和设置:
<TableLayout android:id="@+id/TableLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TableRow android:id="@+id/TableRow01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:id="@+id/label"
android:layout_height="wrap_content"
android:layout_width="160dip"
android:gravity="right"
android:text="用户名:"
android:padding="3dip" >
</TextView>
<EditText android:id="@+id/entry"
android:layout_height="wrap_content"
android:layout_width="160dip“
android:padding="3dip" >
</EditText>
</TableRow>
<TableRow android:id="@+id/TableRow02"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button android:id="@+id/ok"
android:layout_height="wrap_content"
android:padding="3dip"
android:text="确认">
</Button>
<Button android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dip"
android:text="取消">
</Button>
</TableRow>
</TableLayout>
相对布局(RelativeLayout)是一种很是灵活的布局方式,可以经过指定界面元素与其余元素的相对位置关系,肯定界面中全部元素的布局位置
特色:可以最大程度保证在各类屏幕类型的手机上正确显示界面布局。它的层次关系以下所示:
java.lang.Object
android.view.View
android.widget.ViewGroup
android.widget.RelativeLayout
方法 |
功能描述 |
返回值 |
RelativeLayout |
两个构造函数: RelativeLayout(Contex contex) RelativeLayout(Contex contex,AttributeSet attrs |
null |
checkLayoutParams(viewGroup.LayoutParams p |
检查参数指定的布局参数是不是LayoutParams实例 |
boolen |
isBaselineAligned() |
判断布局是否按照基线对齐 |
boolean |
set BaselineAligned(boolean baseelineAligned) |
根据参数设置基线对齐 |
void |
setGravityt (int gravity) |
根据指定的重力设置元素大小 |
void |
setHorizontalGravity(int gravity) |
设置水平方向的重力 |
void |
setVerticalGravity(int gravity) |
设置垂直方向的重力 |
void |
gennerateDefaultLayoutParams |
生成默认的布局参数实例 |
ViewGroup.LayoutParams |
android:layout_above 将该控件的底部至于给定ID的控件之上
android:layout_below 将该控件的顶部至于给定ID的控件之下
android:layout_toLeftOf 将该控件的右边缘和给定ID的控件的左边缘对齐
android:layout_toRightOf 将该控件的左边缘和给定ID的控件的右边缘对齐android:layout_alignBaseline 该控件的baseline和给定ID的控件的baseline对齐
android:layout_alignBottom 将该控件的底部边缘与给定ID控件的底部边缘
android:layout_alignLeft 将该控件的左边缘与给定ID控件的左边缘对齐
android:layout_alignRight 将该控件的右边缘与给定ID控件的右边缘对齐
android:layout_alignTop 将给定控件的顶部边缘与给定ID控件的顶部对齐
android:alignParentBottom 若是该值为true,则将该控件的底部和父控件的底部对齐
android:layout_alignParentLeft 若是该值为true,则将该控件的左边与父控件的左边对齐
android:layout_alignParentRight 若是该值为true,则将该控件的右边与父控件的右边对齐
android:layout_alignParentTop 若是该值为true,则将空间的顶部与父控件的顶齐
android:layout_centerHorizontal 若是值为真,该控件将被至于水平方向的中央
android:layout_centerInParent 若是值为真,该控件将被至于父控件水平方向和垂直方向的中央
android:layout_centerVertical 若是值为真,该控件将被至于垂直方向的中央
好比要实现上面的布局效果,咱们须要在 在xml中作以下的声明:
<RelativeLayout android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/label"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="用户名:">
</TextView>
<EditText android:id="@+id/entry"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_below="@id/label"> //肯定EditText控件在ID为label的元素下方
</EditText>
<Button android:id="@+id/cancel"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentRight="true" //声明该元素在其父元素的右边边界对齐
android:layout_marginLeft="10dip" //左移10dip
android:layout_below="@id/entry"
android:text="取消" >
</Button>
<Button android:id="@+id/ok"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_toLeftOf="@id/cancel" //声明该元素在ID为cancel元素的左边
android:layout_alignTop="@id/cancel“ //声明该元素与ID为cancel的元素在相同的水平位置
android:text=“确认”>
</Button>
</RelativeLayout>
绝对布局(AbsoluteLayout)能经过指定界面元素的坐标位置,来肯定用户界面的总体布局
绝对布局是一种不推荐使用的界面布局,由于经过X轴和Y轴肯定界面元素位置后,Android系统不可以根据不一样屏幕对界面元素的位置进行调整,下降了界面布局对不一样类型和尺寸屏幕的适应能力。
同其余布局同样,android.widget.AbsoluteLayout是android.view.ViewGroup类的子类,其层次关系以下:
java.lang.Object
android.view.View
android.widget.ViewGroup
android.widget.AbsoluteLayout
方法 |
功能描述 |
返回值 |
AbsoluteLayout |
提供了3个构造函数 |
null |
checkLayoutParams(ViewGroup.LayoutParams p) |
检查参数指定的布局参数是不是LayoutParams实例 |
|
onLayout(boolean changed,int l,int t,int r,int b) |
视图的布局改变时,该方法被调用 |
boolean |
setBaselineAligned(boolean baseelineAligned) |
根据参数设置基线对齐 |
boolen |
onMeasure(int widthMesureSpec, int h) |
该方法被measure调用,用于测量视图的高度和宽度 |
void |
setHorizontalGravity(int gravity) |
设置水平方向是的重力 |
void |
对与AbsoluteLayout标签,最主要的两个参数是
android:layout_x 指定X坐标的位置
android:layout_y 指定Y坐标的位置
AbsoluteLayout经常使用的属性有:
第一类:属性值为true或false
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素彻底居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 若是对应的兄弟元素找不到的话就以父元素作参照物
第二类:属性值必须为id的引用名“@id/id-name”
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
第三类:属性值为具体的像素值,如30dip,40px
android:layout_marginBottom 离某元素底边缘的距离
android:layout_marginLeft 离某元素左边缘的距离
android:layout_marginRight 离某元素右边缘的距离
android:layout_marginTop 离某元素上边缘的距离
要实现上图所示的效果,咱们能够在XML布局声明以下:
<AbsoluteLayout android:id="@+id/AbsoluteLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/label"
android:layout_x="40dip"
android:layout_y="40dip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="用户名:">
</TextView>
<EditText android:id="@+id/entry"
android:layout_x="40dip"
android:layout_y="60dip"
android:layout_height="wrap_content" 8. android:layout_width="150dip">
</EditText>
<Button android:id="@+id/ok"
android:layout_width="70dip"
android:layout_height="wrap_content"
android:layout_x="40dip"
android:layout_y="120dip"
android:text="确认">
</Button>
<Button android:id="@+id/cancel"
android:layout_width="70dip"
android:layout_height="wrap_content"
android:layout_x="120dip"
android:layout_y="120dip"
android:text="取消">
</Button>
</AbsoluteLayout>
文章链接:
个人Android学习之旅[6]——以示例程序来展现Android的几种布局方式
如何动态改变 AbsoluteLayout布局中其它布局的坐标
菜单是应用程序中很是重要的组成部分,可以在不占用界面空间的前提下,为应用程序提供了统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口
Android系统支持三种菜单
选项菜单(Option Menu)
子菜单(Submenu)
上下文菜单(Context Menu)
选项菜单是一种常常被使用的Android系统菜单
打开方式:经过“菜单键”(MENU key)打开
选项菜单分类:
图标菜单(Icon Menu)
扩展菜单(Expanded Menu)
(1)图标菜单可以同时显示文字和图标的菜单,最多支持6个子项
图标菜单不支持单选框和复选框
(2)扩展菜单是在图标菜单子项多余6个时才出现,经过点击图标菜单最后的子项“More”才能打开
扩展菜单是垂直的列表型菜单
不可以显示图标
支持单选框和复选框
下面咱们就要来实现选项菜单的功能:
子菜单是可以显示更加详细信息的菜单子项
菜单子项使用了浮动窗体的显示形式,可以更好适应小屏幕的显示方式
子菜单不支持嵌套
子菜单的添加是使用addSubMenu()函数实现
快捷菜单一样采用了动窗体的显示方式,与子菜单的实现方式相同,但两种菜单的启动方式却大相径庭
启动方式:快捷菜单相似于普通桌面程序中的“右键菜单”,当用户点击界面元素超过2秒后,将启动注册到该界面元素的快捷菜单
使用方法:与使用选项菜单的方法很是类似,须要重载onCreateContextMenu()函数和onContextItemSelected()函数
onCreateContextMenu()函数主要用来添加快捷菜单所显示的标题、图标和菜单子项等内容
上下文菜单经常使用的方法:
setHeaderIcon(int iconRes) 设置上下文菜单的图标
setHeaderIcon(Drawable icon) 上下文菜单的图标
setHeaderTitle(Charsequence title) 设置上下文菜单的标题
setHeaderTitle(int titleRes)设置上下文菜单的标题
add(int groupId,int itemId,int order, CharSequence title) 使用add方法添加 子菜单:
groupId:组Id
itemId:菜单项Id
order :顺序号
title :菜单项标题
AutoCompleteTextView控件是用户在文本框中输入的时候,在控件下方会显示一个相似 百度的下拉提示框,提示当前与输入相匹配的选项,用户能够直接选择,方便了用户的直接体验。
AutoCompleteTextView类的层次关系以下:
java.lang.Object
android.view.view
android.view.TextView
android.widget.EditText
android.widget. AutoCompleteTextView
方法 |
功能描述 |
返回值 |
setMarqueeRepeatLimit |
在指定的marquee的状况下,设置重复滚动的次数,当设置为marquee_forever时表示无限次 |
void |
enoughToFilter |
当文本长度超过阀值时过滤 |
boolean(true/False) |
performValidation |
肯定文本中单个符号的有效性 |
void |
setTokenzier |
设置分词组件,该组件决定用户正在输入文本的范围 |
void |
performFiltering |
过滤从函数findTokenStart()到函数getSelectionEnd()得到的长度为0或者超过了预约值的文本内容 |
void |
replaceText |
根据参数的文本替换从函数findTokenStart()到函数getSelectionEnd()得到的文本 |
void |
AutoCompleteTextView在XML中的声明方式以下:
<AutoCompleteTextView
android:id="@+id/AutoCompleteTextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</AutoCompleteTextView>
<MultiAutoCompleteTextView
android:id="@+id/MultiAutoCompleteTextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</MultiAutoCompleteTextView>
AutoCompleteTextView在代码中的实现步骤:
//关联关键字
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, autoString);
AutoCompleteTextView m_AutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.AutoCompleteTextView01);
//将adapter添加到AutoCompleteTextView中
m_AutoCompleteTextView.setAdapter(adapter);
///////////////////
MultiAutoCompleteTextView mm_AutoCompleteTextView = (MultiAutoCompleteTextView) findViewById(R.id.MultiAutoCompleteTextView01);
//将adapter添加到AutoCompleteTextView中
mm_AutoCompleteTextView.setAdapter(adapter);
mm_AutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
补充
相关文章连接
Android控件之AutoCompleteTextView、MultiAutoCompleteTextView探究
AutoCompleteTextView和MultiAutoCompleteTextView
DatePicker日期选择器是一个选择年月日的日历布局视图,它的类层次关系以下:
public class DatePicker extends FrameLayout
java.lang.Object
android.view.ViewGroup
android.widget.FrameLayout
android.widget.DatePicker
公共方法
(1)public int getDayOfMonth ()
获取选择的天数
(2)public int getMonth ()
获取选择的月份。(注意:返回数值为0..11,须要本身+1来显示)
(3) public int getYear ()
获取选择的年份
(4)public void init (int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)
初始化状态。(初始化年月日)
参数:
year : 初始年(注意使用new Date()初始化年时,须要+1900,以下:date.getYear() + 1900)
monthOfYear: 初始月。
dayOfMonth: 初始日。
onDateChangedListener: 日期改变时通知用户的事件监听,能够为空(null)。
(5)public void setEnabled (boolean enabled)
设置视图的启用状态。该启用状态随子类的不一样而有不一样的解释。
参数
enabled True if this view is enabled, false otherwise.设置为true表示启动视图,反之禁用。
(6)public void updateDate (int year, int monthOfYear, int dayOfMonth)
更新日期
受保护方法
(7)protected void dispatchRestoreInstanceState (SparseArray<Parcelable> container)
重写使咱们可以彻底控制这小部件的保存或恢复。(译者注:此处直接调用了父类的ViewGroup. dispatchThawSelfOnly方法)
参数
container SparseArray 持有保存之前的状态。The SparseArray which holds previously saved state.
(8)protected void onRestoreInstanceState (Parcelable state)
容许视图从新应用之前经过onSaveInstanceState()生成表明内部的状态。这个函数决不调用一个空的状态。
参数
state 返回之前调用onSaveInstanceState()保存下来的状态。
(9) protected Parcelable onSaveInstanceState ()
容许视图生成一个表明内部的状态,之后可用于建立一个与之相同的新的实例。这种状态应该只包含非持久或之后不可以重建的信息。例如,你决不存储你当前在屏幕上的位置,由于这会在视图的层面上从新计算放置一个新的实例。
你能够存储到这里的一些例子:一个文本框中当前光标的位置(但一般不是文字自己,文字一般保存在内容提供者(content provider)或其余持久的储存中),一个列表视图中的当前选中项。
返回值
返回一个包含视图当前状态的Parcelable对象,或没有什么状态保存时返回null。默认实现返回null。
首先在XML中声明一个DatePicker,和一个用户显示监听结果的TextView:
<DatePicker android:id="@+id/datePicker1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"></DatePicker>
<TextView
android:id="@+id/textview1"
android:layout_height="wrap_content"
android:text="@string/hello"
android:layout_width="wrap_content"/>
而后在Activity中显示DatePicker并实现监听事件
textview = (TextView)findViewById(R.id.textview1);
datepicker = (DatePicker)findViewById(R.id.datePicker1);
//获取当前时间
calendar = Calendar.getInstance();
//显示当前的时间
textview.setText("当前时间:"+calendar.get(Calendar.YEAR)+"年"
+(calendar.get(Calendar.MONTH)+1)+"月"+calendar.get(Calendar.DAY_OF_MONTH)+"日");
//注册监听事件,当日期改变时,更新TextView的内容
datepicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
textview.setText("当前时间:"+year+"年"
+(monthOfYear+1)+"月"+dayOfMonth+"日");
}
});
效果以下显示:
TimePicker时间选择器是用于选择一天中时间的视图,TimePicker类层次关系以下:
public class TimePicker extends FrameLayout
java.lang.Object
android.view.ViewGroup
android.widget.FrameLayout
android.widget.TimePicker
公共方法
(1)public int getBaseline ()
返回窗口空间的文本基准线到其顶边界的偏移量。若是这个部件不支持基准线对齐,这个方法返回-1/。
返回值
基准线的偏移量,若是不支持基准线对齐则返回-1。
(2) public Integer getCurrentHour ()
获取当前时间的小时部分。
返回值
当前小时(0-23)
(3)public Integer getCurrentMinute ()
获取当前时间的分钟部分。
返回值
当前分钟。
(4)public boolean is24HourView ()
获取当前系统设置是不是24小时制。
返回值
若是是24小时制返回true,不然返回false。
(5)public void setCurrentHour (Integer currentHour)
设置当前小时。
(6)public void setCurrentMinute (Integer currentMinute)
设置当前分钟(0-59)。
(7)public void setEnabled (boolean enabled)
设置可用的视图状态。可用的视图状态的解释在子类中改变。
参数
enabled 若是可用为true,不然为false。
(8)public void setIs24HourView (Boolean is24HourView)
设置是24小时仍是上午/下午制。
参数
is24HourView True表示 24小时制. False表示上午/下午制.
(9)public void setOnTimeChangedListener (TimePicker.OnTimeChangedListener onTimeChangedListener)
设置时间调整事件的回调函数。
参数
onTimeChangedListener 回调函数,不能为空。
受保护方法
(10)protected void onRestoreInstanceState (Parcelable state)
容许一个视图回复到以前用onSaveInstanceState()保存的状态,state参数不能为空。
参数
state 以前调用onSaveInstanceState()返回的状态。
(11)protected Parcelable onSaveInstanceState ()
用来容许一个视图保存当前的内部状态,以后能够建立新的实例应用相同的状态。状态信息不能包含常量或在以后从新构造。例如,你永远不能保存在屏幕上的当前位置,由于当建立一个新的视图时,它将会被放置到它的层次结构中,它的位置会被从新计算。
你能够存储到这里的一些例子:一个文本框中当前光标的位置(但一般不是文字自己,文字一般保存在内容提供者(content provider)或其余持久的储存中),一个列表视图中的当前选中项。
返回值
返回一个包含视图当前状态的Parcelable对象,或没有什么状态保存时返回null。默认实现返回null。
TimePicker和DatePicker的使用同样:
XML中:
<TimePicker android:id="@+id/timePicker1"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TimePicker>
<TextView
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
而后在 Activity中显示TimePicker并实现监听:
imepicker = (TimePicker)findViewById(R.id.timePicker1);
textview =(TextView)findViewById(R.id.textview1);
//获取当前时间
calendar = Calendar.getInstance();
//显示当前的时间
textview.setText("当前时间:"+calendar.get(Calendar.HOUR)+"时"
+calendar.get(Calendar.MINUTE)+"分");
//注册监听事件,当时间改变时,更新TextView的内容
timepicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
textview.setText("当前时间:"+hourOfDay+"时"
+minute+"分");
}
});
补充
文章连接
[示例代码]日期選擇器(DatePicker)和時間選擇器(TimePicker)
Android TimePicker DatePicker 简单说明
Android中实现对话框可使用AlterDialog.Builder类,还能够自定义对话框。若是对话框设置了按钮,那么就须要对其设置监听OnClickListener。
首先在Dialog.xml中定义一个对话框,咱们这里定义一个包含两个TextView和两个EditView的对话框
Dialog.xml中的布局以下:
<TextView
android:id="@+id/username"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:text="帐号"
android:gravity="left"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/username"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:scrollHorizontally="true"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/password"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:text="密码"
android:gravity="left"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/password"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:scrollHorizontally="true"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:password="true"
android:textAppearance="?android:attr/textAppearanceMedium" />
main.xml布局中:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
而后在Activity中使用AlterDialog建立对话框:
Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
.setTitle("登录提示")//设置标题
.setMessage("这里须要登陆!")//设置内容
.setPositiveButton("肯定",//设置肯定按钮
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
//点击“肯定”转向登录框
LayoutInflater factory = LayoutInflater.from(DialogActivity.this);
//获得自定义对话框
final View DialogView = factory.inflate(R.layout.dialog, null);
//建立对话框
AlertDialog dlg = new AlertDialog.Builder(DialogActivity.this)
.setTitle("登陆框")
.setView(DialogView)//设置自定义对话框的样式
.setPositiveButton("肯定", //设置"肯定"按钮
new DialogInterface.OnClickListener() //设置事件监听
{
public void onClick(DialogInterface dialog, int whichButton)
{
//输入完成后,点击“肯定”开始登录
m_Dialog = ProgressDialog.show
(
DialogActivity.this,
"请等待...",
"正在为你登陆...",
true
);
new Thread()
{
public void run()
{
try
{
sleep(3000);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
//登陆结束,取消m_Dialog对话框
m_Dialog.dismiss();
}
}
}.start();
}
})
.setNegativeButton("取消", //设置“取消”按钮
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
//点击"取消"按钮以后退出程序
DialogActivity.this.finish();
}
})
.create();//建立
dlg.show();//显示
}
}).setNeutralButton("退出",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
//点击"退出"按钮以后推出程序
DialogActivity.this.finish();
}
}).create();//建立按钮
// 显示对话框
dialog.show();
实现的效果图:
ImageView显示任意图像,例如图标。ImageView类能够加载各类来源的图片(如资源或图片库),须要计算图像的尺寸,比便它能够在其余布局中使用,并提供例如缩放和着色(渲染)各类显示选项。
继承关系
public class View.OnClickListner extends View
java.lang.Object
android.view.View
android.widget.ImageView
直接子类
ImageButton, QuickContactBadge
间接子类
ZoomButton
XML属性
属性名称 |
描述 |
|||||||||||||||||||||||||||
android:adjustViewBounds |
设置该属性为真能够在 ImageView 调整边界时保持图片的纵横比例。(译者注:须要与maxWidth、MaxHeight一块儿使用,不然单独使用没有效果。) |
|||||||||||||||||||||||||||
android:baseline |
视图内基线的偏移量 |
|||||||||||||||||||||||||||
android:baselineAlignBottom |
若是为true,图像视图将基线与父控件底部边缘对齐。 |
|||||||||||||||||||||||||||
android:cropToPadding |
若是为真,会剪切图片以适应内边距的大小。(译者注:是否截取指定区域用空白代替。单独设置无效果,须要与scrollY一块儿使用,效果以下,实现代码见代码部分: ) |
|||||||||||||||||||||||||||
android:maxHeight |
为视图提供最大高度的可选参数。(译者注:单独使用无效,须要与setAdjustViewBounds一块儿使用。若是想设置图片固定大小,又想保持图片宽高比,须要以下设置: 1) 设置setAdjustViewBounds为true; 2) 设置maxWidth、MaxHeight; 3) 设置layout_width和layout_height为wrap_content。) |
|||||||||||||||||||||||||||
android:maxWidth |
为视图提供最大宽度的可选参数。 |
|||||||||||||||||||||||||||
android:scaleType |
控制为了使图片适合 ImageView 的大小,应该如何变动图片大小或移动图片。必定是下列常量之一:
(译者注:设置图片的填充方式。) |
|||||||||||||||||||||||||||
android:src |
设置可绘制对象做为 ImageView 显示的内容 |
|||||||||||||||||||||||||||
android:tint |
为图片设置着色颜色。(译者注:将图片渲染成指定的颜色。见下图: 左边为原图,右边为设置后的效果,见后面代码。) |
公共方法
(1)public final void clearColorFilter ()
(译者注:清除颜色过滤,参见这里)
(2)public int getBaseline ()
返回部件顶端到文本基线的偏移量。若是小部件不支持基线对齐,该方法返回 -1。
返回值
小部件顶端到文本基线的偏移量;或者是 -1 当小部件不支持基线对齐时。
(3)public boolean getBaselineAlignBottom ()
返回当前视图基线是否将考虑视图的底部。
参见
setBaselineAlignBottom(boolean)
(4)public Drawable getDrawable ()
返回视图的可绘制对象;若是没有关联可绘制对象,返回空。
(5)public Matrix getImageMatrix ()
返回视图的选项矩阵。当绘制时,应用于视图的可绘制对象。若是没有矩阵, 函数返回空。不要更改这个矩阵。若是你要为可绘制对象设置不一样的矩阵, 请调用 setImageMatrix()。
(6)public ImageView.ScaleType getScaleType ()
返回当前 ImageView 使用的缩放类型。
相关 XML 属性
android:scaleType
参见
ImageView.ScaleType
(7)public void invalidateDrawable (Drawable dr)
使指定的可绘制对象失效。
参数
dr 要设为失效的可绘制对象。
(8)public void jumpDrawablesToCurrentState ()
调用与视图相关的全部可绘制对象的Drawable.jumpToCurrentState()方法。
(9)public int[] onCreateDrawableState (int extraSpace)
为当前视图生成新的 Drawable 状态时发生。当视图系统检测到缓存的可绘制对象失效时,调用该方法.你可使用 getDrawableState() 方法从新取得当前的状态。
参数
extraSpace 若是为非零,该值为你要在返回值的数组中存放的你本身的状态信息的数量。
返回值
返回保存了视图的当前 Drawable 状态的数组。
(10)public void setAdjustViewBounds (boolean adjustViewBounds)
当你须要在 ImageView 调整边框时保持可绘制对象的比例时,将该值设为真。
参数
adjustViewBounds 是否调整边框,以保持可绘制对象的原始比例。
相关 XML 属性
android:adjustViewBounds
(11)public void setAlpha (int alpha)
(译者注:设置透明度)
(12)public void setBaseline (int baseline)
设置部件顶部边界文本基线的偏移量。这个值覆盖setBaselineAlignBottom(boolean)设置的属性值。
参数
baseline 使用的基线,或不提供设置为-1。
相关 XML属性
android:baseline
参见
setBaseline(int)
(13)public void setBaselineAlignBottom (boolean aligned)
设置是否设置视图底部的视图基线。设置这个值覆盖setBaseline()的全部调用。
参数
aligned 若是为true,图像视图将基线与父控件底部边缘对齐。
相关 XML属性
android:baselineAlignBottom
(14)public final void setColorFilter (int color)
为图片设置着色选项。采用SRC_ATOP合成模式。
参数
color 应用的着色颜色。
相关 XML 属性
android:tint
(15)public void setColorFilter (ColorFilter cf)
为图片应用任意颜色滤镜。
参数
cf 要应用的颜色滤镜(可能为空)
(16)public final void setColorFilter (int color, PorterDuff.Mode mode)
为图片设置着色选项。
参数
color 应用的着色颜色。
mode 如何着色。标准模式为 SRC_ATOP。
相关 XML 属性
android:tint
(17)public void setImageBitmap (Bitmap bm)
设置位图做为该 ImageView 的内容。
参数
bm 设置的位图。
(18)public void setImageDrawable (Drawable drawable)
设置可绘制对象为该 ImageView 显示的内容。
参数
drawable 设置的可绘制对象。
(19)public void setImageLevel (int level)
设置图片的等级,当图片来自于 LevelListDrawable 时。(译者注:使用参见这里)
参数
level 图片的新的等级。
(20)public void setImageMatrix (Matrix matrix)
(译者注:矩阵变换)
(21) public void setImageResource (int resId)
经过资源ID设置可绘制对象为该 ImageView 显示的内容。
注意:该操做读取位图,并在 UI 线程中解码,所以可能致使反应迟缓。 若是反应迟缓,能够考虑用 setImageDrawable(Drawable)、 setImageBitmap(Bitmap) 或者 BitmapFactory 代替。
参数
resId 可绘制对象的资源标识。
相关 XML 属性
android:src
(21)public void setImageState (int[] state, boolean merge)
(译者注:设置视图的可见和不可见,使用参见这里)
(22)public void setImageURI (Uri uri)
设置指定的 URI 为该 ImageView 显示的内容。
注意:该操做读取位图,并在 UI 线程中解码,所以可能致使反应迟缓。 若是反应迟缓,能够考虑用 setImageDrawable(Drawable)、 setImageBitmap(Bitmap) 或者 BitmapFactory 代替。
参数
uri 图像的 URI。
(23)public void setMaxHeight (int maxHeight)
用于设置该视图支持的最大高度的可选参数。只有 setAdjustViewBounds(boolean) 为真时有效。要设置图像最大尺寸为 100×100,并保持原始比率,作法以下:
1) 设置 adjustViewBounds 为真;
2) 设置 maxWidth 和 maxHeight 为 100;
3) 设置宽、高的布局参数为 WRAP_CONTENT。
注意,若是原始图像较小,即便设置了该参数,图像仍然要比 100×100 小。若是要设置图片为 固定大小,须要在布局参数中指定大小,并使用 setScaleType(ImageView.ScaleType) 函数来检测,如何 将其调整到适当的大小。
参数
maxHeight 该视图的最大高度。
相关 XML 属性
android:maxHeight
(24)public void setMaxWidth (int maxWidth)
用于设置该视图支持的最大宽度的可选参数。只有 setAdjustViewBounds(boolean) 为真时有效。要设置图像最大尺寸为 100×100,并保持原始比率,作法以下:
4) 设置 adjustViewBounds 为真;
5) 设置 maxWidth 和 maxHeight 为 100;
6) 设置宽、高的布局参数为 WRAP_CONTENT。
注意,若是原始图像较小,即便设置了该参数,图像仍然要比 100×100 小。若是要设置图片为 固定大小,须要在布局参数中指定大小,并使用 setScaleType(ImageView.ScaleType) 函数来检测,如何 将其调整到适当的大小。
参数
maxWidth 该视图的最大宽度。
相关 XML 属性
android:maxWidth
(25)public void setScaleType (ImageView.ScaleType scaleType)
控制图像应该如何缩放和移动,以使图像与 ImageView 一致。
参数
scaleType 须要的缩放方式。
相关 XML 属性
android:scaleType
(26)public void setSelected (boolean selected)
改变视图的选中状态。视图有选中和未选中两个状态。注意,选择状态不一样于焦点。 典型的选中的视图是象 ListView 和 GridView 这样的 AdapterView 中显示的 内容;选中的内容会显示为高亮。
参数
selected 为真,将视图设为选中状态;不然为假。
受保护方法
(27)protected void drawableStateChanged ()
在视图状态的变化影响到所显示可绘制对象的状态时调用该方法。
覆盖该方法时,要确保调用了父类的该方法。
(28)protected void onDraw (Canvas canvas)
实现该方法,用于本身绘制内容。
参数
canvas 用于绘制背景的画布。
(29)protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
评估视图及其内容,以决定其宽度和高度.此方法由 measure(int, int) 调用,子类能够重载以提供更精确、更有效率的衡量其内容尺寸的方法。
约定: 覆盖该方法时,必须调用 setMeasuredDimension(int, int) 方法来保存评估结果的视图的宽度和高度.若是忘记将致使 measure(int, int) 方法抛出IllegalStateException异常。要有效的利用父类的 onMeasure(int, int)方法。
基类测量的是背景的大小,除非 MeasureSpec 容许超过背景.子类应该重写 onMeasure(int, int) 方法,觉得其内容提供更适合的大小。
若是重写了该方法,子类要确保其高度和宽度大于等于视图的最小高度和宽度. (getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth())
参数
widthMeasureSpec 父视图要求的横向空间大小.该要求由 View.MeasureSpec 进行了编码处理。
heightMeasureSpec 父视图要求的纵向空间大小.该要求由 View.MeasureSpec 进行了编码处理。
(30)protected boolean onSetAlpha (int alpha)
透明度改变时执行。子类可使用该方法指定透明度值,而后返回真; 在调用 onDraw() 时,使用该透明度值。若是返回假,则先在不可见的缓存中绘制视图, 完成该请求;看起来不错,可是可能相对于在子类中绘制要慢。默认实现返回假。
参数
alpha 应用到视图的透明度值 (0…255)。
返回值
若是该类能够绘制该阿尔法值返回真。
(31)protected boolean setFrame (int l, int t, int r, int b)
为视图指定大小和位置。 该方法有布局调用。
参数
l 左侧位置,相对于父容器。
t 顶部位置,相对于父容器。
r 右侧位置,相对于父容器。
b 底部位置,相对于父容器。
返回值
true 若是新的大小和位置与以前的不一样,返回真。
(32)protected boolean verifyDrawable (Drawable dr)
若是你的视图子类显示本身的可绘制对象,他应该重写此方法并为本身的每一个可绘制对象返回真。该函数容许为这些可绘制对象准备动画效果。
重写此方法时,要保证调用其父类的该方法。
参数
dr 待校验的可绘制对象.若是是你显示的对象之一,返回真;不然返回调用父类的返回值。
返回值
boolean 若是可绘制对象已经显示在视图上了,返回真;不然返回假,不容许动画效果。
若是如今咱们要显示一张图片,并动态更新它的透明度alpha,效果以下图所示
则咱们首先要在XML文件中声明一个ImageView和一个TextView :
<ImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</ImageView>
<TextView
android:id="@+id/TextView01"
android:layout_below="@id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</TextView>
而后在Activity中设置显示ImageView:
isrung = true;
//得到ImageView的对象
imageview = (ImageView) this.findViewById(R.id.ImageView01);
textview = (TextView) this.findViewById(R.id.TextView01);
//设置imageview的图片资源。一样能够再xml布局中像下面这样写
//android:src="@drawable/logo"
imageview.setImageResource(R.drawable.imag2);
//设置imageview的Alpha值
imageview.setAlpha(image_alpha);
以后就须要用一个线程来实时更新alpha:
//开启一个线程来让Alpha值递减
new Thread(new Runnable() {
public void run()
{
while (isrung)
{
try
{
Thread.sleep(200);
//更新Alpha值
updateAlpha();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}).start();
//接受消息以后更新imageview视图
mHandler = new Handler() {
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
imageview.setAlpha(image_alpha);
textview.setText("如今alpha值是:"+Integer.toString(image_alpha));
//更新
imageview.invalidate();
}
};
}
public void updateAlpha()
{
if (image_alpha - 7 >= 0)
{
image_alpha -= 7;
}
else
{
image_alpha = 0;
isrung = false;
}
//发送须要更新imageview视图的消息
mHandler.sendMessage(mHandler.obtainMessage());
}
补充
文章精选
Gallery是一个锁定中心条目而且拥有水平滚动列表的视图。
Gallery(画廊)使用Theme_galleryItemBackground做为Gallery(画廊)适配器中的各视图的默认参数。若是你没有设置,你就须要调整一些Gallery(画廊)的属性,好比间距。
Gallery(画廊)中的视图应该使用Gallery.LayoutParams做为它们的布局参数类型。
内部类
class Gallery.LayoutParams
Gallery(画廊)扩展了LayoutParams,以此提供能够容纳当前的转换信息和先前的位置转换信息的场所。
Galery是一个实现图片拖动的很是炫的一个效果,Gallery类的层次关系以下:
结构
继承关系
public class Gallery extends AbsSpinner
implements GestureDetector.OnGestureListener
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.AdapterView<T extends android.widget.Adapter>
android.widget.AbsSpinner
android.widget.Gallery
XML属性
属性名称 |
描述 |
|||||||||||||||||||||||||||||||||||||||
android:animationDuration |
设置布局变化时动画的转换所需的时间(毫秒级)。仅在动画开始时计时。该值必须是整数,好比:100。 |
|||||||||||||||||||||||||||||||||||||||
android:gravity |
指定在对象的X和Y轴上如何放置内容。指定一下常量中的一个或多个(使用 “|”分割)
|
|||||||||||||||||||||||||||||||||||||||
android:spacing |
(译者注:设置图片之间的间距) |
|||||||||||||||||||||||||||||||||||||||
android:unselectedAlpha |
设置未选中的条目的透明度(Alpha)。该值必须是float类型,好比:“1.2”。 |
公共方法
(1)public boolean dispatchKeyEvent (KeyEvent event)
在焦点路径上分发按钮事件到下一个视图。该路径从视图树的顶端遍历到当前得到焦点的视图。若是当前视图已得到焦点,就分发给自身。不然,就分发到下一个节点的焦点路径上。该方法监放任何按钮事件。
参数
event 被分发的按钮事件
返回值
boolean 时间被处理返回true,不然false
(2)public void dispatchSetSelected (boolean selected)
分发setSelected给视图的子类。
参数
selected 新选中的状态
(4)public ViewGroup.LayoutParams generateLayoutParams (AttributeSet attrs)
返回一个新的已设置属性集合的布局参数。
参数
attrs 用于生成布局参数的属性集合
返回值
一个ViewGroup.LayoutParams实例或者它的子类
(5)public boolean onDown (MotionEvent e)
当轻击和按下手势事件发生时通知该方法。任何按下事件都会直接触发该方法。全部其余的事件都要先于该方法。
参数
e 按下动做事件
(6)public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
当初始化的按下动做事件和松开动做事件匹配时通知fling(译者注:快滑,用户按下触摸屏、快速移动后松开)事件。该动做的速度经过计算X和Y轴上每秒移动多少像素得来。
参数
e1 致使开始fling的按下动做事件。
e2 触发当前onFling方法的移动动做事件
velocityX 测量fling沿X轴上的速度,像素/每秒
velocityY 测量fling沿Y轴上的速度,像素/每秒
返回值
若是该事件被消耗返回true,不然false。
(7)public boolean onKeyDown (int keyCode, KeyEvent event)
处理左,右和点击事件
参数
keyCode 表明按下按钮的按键码,来自KeyEvent。
event 定义按钮动做的KeyEvent对象。
返回值
若是已经处理了按钮事件,则返回true。若是你想让下一个事件接收者处理,就返回false
参见
(8)public boolean onKeyUp (int keyCode, KeyEvent event)
KeyEvent.Callback.onKeyMultiple()方法的默认实现:当KEYCODE_DPAD_CENTER 或者 KEYCODE_ENTER被释放时,执行点击视图操做。
参数
keyCode 表明按下按钮的按键码,来自KeyEvent。
event 定义按钮动做的KeyEvent对象。
返回值
若是已经处理了按钮事件,则返回true。若是你想让下一个事件接收者处理,就返回false
(9)public void onLongPress (MotionEvent e)
MotionEvent初始化并按下触发长按并通知本方法
。
参数
e 致使开始长按的初始按下动做事件。
(10)public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
当初始按下动做事件和当前移动动做事件致使滚动时通知本方法。为了方便提供了X和Y轴上的距离。
监听屏幕滚动事件。为了方便提供了X和Y轴上的距离。
参数
e1 致使滚动开始按下的动做事件。
e2 触发当前onScroll方法的移动动做事件。
distanceX 距离是自上一次调用onScroll方法在X轴上的距离。不是e1 和e2之间的距离。
distanceY 距离是自上一次调用onScroll方法在Y轴上的距离。不是e1 和e2之间的距离。
返回值
若是该事件被消耗返回true不然false
(11)public void onShowPress (MotionEvent e)
用户已经执行按下动做尚未执行移动或者弹起动做。该事件常经过高亮一个元素来向用户提供一个视觉反馈即用户的操做已经被辨识了。
参数
e 按下动做事件
(12)public boolean onSingleTapUp (MotionEvent e)
在轻击动做和up动做事件触发时通知本方法。(译者注:点击屏幕上的某项的执行流程 有两种状况,一种是时间很短,一种时间稍长:时间很短:onDown--->onSingleTapUp--->onSingleTapConfirmed,见这里1,这里2。)
参数
e 完成开始轻击的up动做事件
返回值
若是该事件被消耗返回true不然false
(13)public boolean onTouchEvent (MotionEvent event)
实现该方法来处理触摸屏动做事件
参数
event 动做事件
返回值
若是该事件被消耗返回true不然false
(14)public void setAnimationDuration (int animationDurationMillis)
设置当子视图改变位置时动画转换时间。仅限于动画开始时生效。
参数
animationDurationMillis 动画转换时间(毫秒级)
(15)public void setCallbackDuringFling (boolean shouldCallback)
当flinged时是否回调每个getOnItemSelectedListener()。若是设为false,只回调最终选中的项。若是为true,则全部的项都会回调。
参数
shouldCallback 设置抛滑的过程当中是否回调
(16)public void setGravity (int gravity)
描述子视图的对齐方式。
(17)public void setSpacing (int spacing)
设置Gallery中项的间距
参数
spacing Gallery中项的间距,以像素为单位
(18)public void setUnselectedAlpha (float unselectedAlpha)
设置Gallery中未选中项的透明度(alpha)值。
参数
unselectedAlpha 未选中项的透明度(alpha)值
(19)public boolean showContextMenu ()
显示该视图上下文菜单。
返回值
上下文菜单是否显示。
(20)public boolean showContextMenuForChild (View originalView)
为指定的视图或者其父类显示上下文菜单。
大部分状况下,子类不须要重写该方法。可是,若是子类被直接添加到窗口管理器(例如:addView(View.android.view.ViewGroup.LayoutParams)),此时就须要重写来显示上下文菜单
参数
originalView 上下文菜单初次调用的源视图
返回值
若是上下文菜单被显示了 则返回true。
受保护方法
(21)protected int computeHorizontalScrollExtent ()
在水平范围内计算滚动条滑块的滚动范围。该值用来计算滚动条滑块的长度。
该范围可使用任意的单位可是必须跟computeHorizontalScrollRange()和computeHorizontalScrollOffset()的单位
保持一致。
默认范围是视图的宽度。
返回值
滚动条滑块的水平滚动范围
(22)protected int computeHorizontalScrollOffset ()
在水平范围内计算滚动条滑块的偏移量。该值用来计算水平滑块的位置。
该范围可使用任意的单位可是必须跟computeHorizontalScrollRange()和computeHorizontalScrollExtent()的单位
保持一致。
默认偏移量是视图的偏移量。
返回值
滚动条滑块的水平偏移量。
(23)protected int computeHorizontalScrollRange ()
计算滚动条水平方向上的滚动范围。
该范围可使用任意的单位可是必须跟computeHorizontalScrollExtent()和computeHorizontalScrollOffset()的单位
保持一致。
返回值
水平滚动条表明的滑动总范围。
(24)protected void dispatchSetPressed (boolean pressed)
分发 setPressed到View的子类。
参数
pressed 新按下的状态
(25)protected ViewGroup.LayoutParams generateDefaultLayoutParams ()
返回默认的布局参数。当View做为参数传递给addView(View)而没有布局参数时就会请求这些参数。若是返回null,则addView会抛出异常。
返回值
默认的布局参数或null
(26)protected ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)
返回一组合法的受支持的布局参数。当把ViewGroup传递给View而该View的布局参数并无经过checkLayoutParams(android.view.ViewGroup.LayoutParams)的测试时,就会调用该方法。该方法应该返回一组适合该ViewGroup的新的布局参数,该过程可能须要从指定的一组布局参数中复制相关的属性。
参数
p 被转换成适合该ViewGroup的一组参数。
返回值
返回一个ViewGroup.LayoutParams的实例或者一个它的子类。
(27)protected int getChildDrawingOrder (int childCount, int i)
返回迭代的绘制子类索引。若是你想改变子类的绘制顺序就要重写该方法。默认返回 i 值。
提示:为了可以调用该方法,你必须首先调用setChildrenDrawingOrderEnabled(boolean)来容许子类排序。
参数
childCount 子类个数
i 当前迭代顺序
返回值
绘制该迭代子类的索引
(28)protected boolean getChildStaticTransformation (View child, Transformation t)
(译者注:setStaticTransformationsEnabled这个属性设成true的时候每次viewGroup(看Gallery的源码就能够看到它是从ViewGroup间接继承过来的)在从新画它的child的时候都会促发getChildStaticTransformation这个函数。这里1、这里2)
(29)protected ContextMenu.ContextMenuInfo getContextMenuInfo ()
Views若是有额外的信息跟上下文菜单有联系的话就须要实现该方法。返回的结果被用做回调方法onCreateContextMenu(ContextMenu, View, ContextMenuInfo)的参数。
返回值
显示上下文菜单的条目的额外信息。这些信息将会改变View不一样的子类
(30)protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect)
当该视图的焦点状态发生改变时将会调用视图系统。当导向的方向触发焦点事件时,方向和先前得到焦点的矩形提供焦点事件的来源。当用户重写该方法,必须调用父类方法来触发标准的焦点处理事件。
参数
gainFocus 若是View得到焦点为true,不然false
direction 当调用requestFocus()方法来给该视图焦点时焦点的移动方向。该值:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT 或 FOCUS_RIGHT。该参数不经常使用,一般使用它的默认值。
previouslyFocusedRect 该视图坐标系统中先前得到焦点的视图的矩形。若是适用,这将得到焦点事件来源的更细致的信息(除了方向之外)。不然为null。
(31)protected void onLayout (boolean changed, int l, int t, int r, int b)
当视图为每个子类分配大小和位置时从布局中调用该方法。有子类的派生类应该重写该方法在子类中调用布局。
参数
changed 该视图新的大小和位置。
l 相对父容器的左侧位置
t 相对父容器的顶部位置
r 相对父容器的右侧位置
b 相对父容器的底部位置
在XML中声明一个Gallery:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<Gallery xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:background="?android:galleryItemBackground"
/>
而后须要声明一个存放图片的容器ImageAdapter,以后就能够经过setAdapter方法把资源添加到Gallery中来显示,并设置好监听事件处理:
gallery = (Gallery)findViewById(R.id.gallery);
gallery.setAdapter(new ImageAdapter(this));//设置图片适配器
//设置监听器
gallery.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Toast.makeText(MyGallery.this, "点击了第"+arg2+"张图片", Toast.LENGTH_LONG).show();
}
});
}
}
声明一个存放图片的容器ImageAdapter:
class ImageAdapter extends BaseAdapter{
private Context context;
//图片源数组
private Integer[] imageInteger={
R.drawable.gallery_photo_1,
R.drawable.gallery_photo_2,
R.drawable.gallery_photo_3,
R.drawable.gallery_photo_4,
R.drawable.gallery_photo_5,
R.drawable.gallery_photo_6,
R.drawable.gallery_photo_7,
R.drawable.gallery_photo_8
};
public ImageAdapter(Context c){
context = c;
}
@Override
public int getCount() {
return imageInteger.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
imageView.setImageResource(imageInteger[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new Gallery.LayoutParams(136, 88));
return imageView;
}}
补充
文章精选
ImageSwitcher是Android中控制图片展现效果的一个控件,如:幻灯片效果...,很有感受啊,作相册一绝。
ImageSwitcher类的层次关系以下:
public class ImageSwitcher extends ViewSwitcher
java.lang.Object
android.view.ViewGroup
android.widget.FrameLayout
android.widget.ViewAnimator
android.widget.ViewSwitcher android.widget.ImageSwitcher
方法 |
功能描述 |
返回值 |
ImageSwitcher |
两个构造方法: ImageSwitcher(Context contex) ImageSwitcher(Contex contex,AttributeSet attrs) |
null |
setImageDrawable(Drawable drawable) |
设置图片为参数drawable指定的资源 |
void |
setImageResource(int resid) |
设置图片为参数resid所指定的资源。resid是编译器为资源生成惟一标识,例如R.id.pcil |
void |
setInAnimation(Context context,in id) |
设置图片进入屏幕时所显示的动画 |
void |
setOutAnimation(Context context,in id) |
设置图片退出屏幕时,所显示的动画 |
void |
setImageURI(Uri uri) |
设置图片为参数uri(例如一个图片的web连接)所指定的资源 |
void |
addView(View child,int index,ViewGroup.LayoutParams params) |
继承自ViewSwitcher的方法,用于添加视图。child是要添加的视图,params是视图的布局 |
View |
getNextView() |
继承自ViewSwitcher的方法,用于获取视图 |
|
getCurrentView() |
继承自ViewAnimator的方法,用于获取视图 |
View |
getDisplayedChild(); |
当前显示的子视图的索引 |
int |
removeAllViews() |
继承在ViewAnimator的方法,用于移除全部的子视图 |
void |
removeViewAt(int index) |
继承自ViewAnimator的方法,用于移除index所指定的视图 |
void |
setAnimateFirstView(boolean animate) |
继承自ViewAnimator的方法,用于设置视图是否在首次显示时播放动画 |
void |
removeViews(int start,int count) |
继承自ViewAnimator的方法,用于移除自start的count个子视图 |
void |
showNext() |
继承自ViewAnimator的方法,因为显示下一张图片 |
void |
咱们直接在Activity中实现,继承监听OnClickListenner和ViewFactory接口:
public class ImageSwitcherActivity extends Activity implements OnClickListener,ViewFactory
{
/* 全部要显示的图片资源索引 */
private static final Integer[] imagelist =
{
R.drawable.img1,
R.drawable.img2,
R.drawable.img3,
R.drawable.img4,
R.drawable.img5,
R.drawable.img6,
R.drawable.img7,
R.drawable.img8,
};
//建立ImageSwitcher对象
private ImageSwitcher m_Switcher;
//索引
private static int index = 0;
//“下一页”按钮ID
private static final int BUTTON_DWON_ID = 0x123456;
//“上一页”按钮ID
private static final int BUTTON_UP_ID = 0x123457;
//ImageSwitcher对象的ID
private static final int SWITCHER_ID = 0x123458;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//建立一个线性布局LinearLayout
LinearLayout main_view = new LinearLayout(this);
//建立ImageSwitcher对象
m_Switcher = new ImageSwitcher(this);
//在线性布局中添加ImageSwitcher视图
main_view.addView(m_Switcher);
//设置ImageSwitcher对象的ID
m_Switcher.setId(SWITCHER_ID);
//设置ImageSwitcher对象的数据源
m_Switcher.setFactory(this);
m_Switcher.setImageResource(imagelist[index]);
//设置显示上面建立的线性布局
setContentView(main_view);
//建立“下一张”按钮
Button next = new Button(this);
next.setId(BUTTON_DWON_ID);
next.setText("下一张");
next.setOnClickListener(this);
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(100, 100);
main_view.addView(next, param);
//建立“上一张”按钮
Button pre = new Button(this);
pre.setId(BUTTON_UP_ID);
pre.setText("上一张");
pre.setOnClickListener(this);
main_view.addView(pre, param);
}
//事件监听、处理
public void onClick(View v)
{
switch (v.getId())
{
//下一页
case BUTTON_DWON_ID:
index++;
if (index >= imagelist.length)
{
index = 0;
}
//ImageSwitcher对象资源索引
m_Switcher.setImageResource(imagelist[index]);
break;
//上一页
case BUTTON_UP_ID:
index--;
if (index < 0)
{
index = imagelist.length - 1;
}
//ImageSwitcher对象资源索引
m_Switcher.setImageResource(imagelist[index]);
break;
default:
break;
}
}
public View makeView()
{
//将全部图片经过ImageView来显示
return new ImageView(this);
}
实现的效果以下所示:
补充
文章连接
Image Switcher View | Android Developer Tutorial
GridView是一个在平面上可显示多个条目的可滚动的视图组件,该组件中的条目经过一个ListAdapter和该组件进行关联。好比android手机中显示的应用:
GridView类的层次关系以下:
public final class GridView extends AbsListView
java.lang.Object
android.view.ViewGroup
android.widget.AdapterView<T extends android.widget.Adapter>
android.widget.AbsListView
android.widget.GridView
XML属性
属性名称 |
描述 |
android:columnWidth |
设置列的宽度。关联的方法为:setColumnWidth(int) |
android:gravity |
设置此组件中的内容在组件中的位置。可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical 能够多选,用“|”分开。关联方法:setGravity (int gravity) |
android:horizontalSpacing |
两列之间的间距。关联方法:setHorizontalSpacing(int) |
android:numColumns |
列数。关联方法:setNumColumns(int) |
android:stretchMode |
缩放模式。关联方法:setStretchMode(int) |
android:verticalSpacing |
两行之间的间距。关联方法:setVerticalSpacing(int) |
构造函数
(1)public GridView (Context context)
建立一个默认属性的GridView实例
public GridView (Context context, AttributeSet attrs)
建立一个带有attrs属性的GridView实例
(2)public GridView (Context context, AttributeSet attrs, int defStyle)
建立一个带有attrs属性,而且指定其默认样式的GridView实例
公共方法
(3)public ListAdapter getAdapter ()
得到与此组件相关的适配器..
返回值
ListAdapter适配器实例
(4)public int getStretchMode ()
得到GridView的缩放模式..
(5)public boolean onKeyDown (int keyCode, KeyEvent event)
默认由KeyEvent.Callback.onKeyMultiple()实现,若是视图是可用的而且是可点击的,那么传入KEYCODE_DPAD_CENTER或KEYCODE_ENTER值是执行的是按下视图操做。
参数
keyCode 一个表示按下操做的键值.
event 表示按钮事件的对象.
返回值
若是你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,不然返回false。
(6)public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)
默认由KeyEvent.Callback.onKeyMultiple()实现,老是返回false(不处理此事件)。
参数
keyCode 键值.
repeatCount 该动做发生的次数.
event 事件对象.
返回值
若是你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,不然返回false。
(7)public boolean onKeyUp (int keyCode, KeyEvent event)
默认由KeyEvent.Callback.onKeyMultiple()实现,若是视图是可用的而且是可点击的,那么传入KEYCODE_DPAD_CENTER或KEYCODE_ENTER值是执行的是点击视图操做。
参数
keyCode 键值.
event 事件对象.
返回值
若是你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,不然返回false。
(8)public void setAdapter (ListAdapter adapter)
设置GridView的数据。
参数
adapter 为grid提供数据的适配器
(9)public void setColumnWidth (int columnWidth)
设置GridView的列宽.
参数
columnWidth 列的宽度,以像素为单位
(10)public void setGravity (int gravity)
设置控件内容的位置,默认值为:Gravity.LEFT.
参数
gravity 位置值
(11)public void setHorizontalSpacing (int horizontalSpacing)
设置列间距.
参数
horizontalSpacing 列间距值
(12)public void setNumColumns (int numColumns)
设置grid的列数
参数
numColumns 列数值.
(13)public void setSelection (int position)
设置选中的条目.
参数
position 数据条目在列表中的索引值(从0开始),若是在可触摸的模式下,在该索引值下的条目将不会被选中,可是该索引值仍然指向该条目。
(14)public void setStretchMode (int stretchMode)
设置grid中的条目以什么缩放模式去填充空间。.
参数
stretchMode 可选值:NO_STRETCH,STRETCH_SPACING,STRETCH_SPACING_UNIFORM,或STRETCH_COLUMN_WIDTH
(15)public void setVerticalSpacing (int verticalSpacing)
设置行间距.
参数
verticalSpacing 间距值,以像素为单位..
如今要实现以下图所示的效果:
咱们声明两个xml文件,一个是gridview.xml 声明一个GridView:
gridview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<GridView android:id="@+id/mygridview"
android:numColumns="3"
android:gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</GridView>
</LinearLayout>
一个是Grid_item.xml,包含要显示的一个ImageView和一个TextView
grid_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:id="@+id/image_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
<TextView android:id="@+id/text_item"
android:layout_below="@+id/image_item"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</TextView>
</RelativeLayout>
而后在Activity 中就能够实现显示了:
//准备要添加的数据条目
List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 10; i++) {
Map<String, Object> item = new HashMap<String, Object>();
item.put("imageItem", R.drawable.icon);
item.put("textItem", "text" + i);
items.add(item);
}
//实例化一个适配器
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.grid_item, new String[]{"imageItem", "textItem"}, new int[]{R.id.image_item, R.id.text_item});
//得到GridView实例
gridview = (GridView)findViewById(R.id.mygridview);
//gridview.setNumColumns(3);//能够在xml中设置
//gridview.setGravity(Gravity.CENTER);//同上
//将GridView和数据适配器关联
gridview.setAdapter(adapter);
ScrollView是一种可供用户滚动的层次结构布局容器,容许显示比实际多的内容。ScrollView是一种FrameLayout,意味须要在其上放置有本身滚动内容的子元素。子元素能够是一个复杂的对象的布局管理器。一般用的子元素是垂直方向的LinearLayout,显示在最上层的垂直方向可让用户滚动的箭头。
TextView类也有本身的滚动功能,因此不须要使用ScrollView,可是只有两个结合使用,才能保证显示较多内容时候的效率。但只有二者结合使用才能够实如今一个较大的容器中一个文本视图效果。
ScrollView只支持垂直方向的滚动。
ScrollView类的结构以下:
继承关系
public class ScrollView extends FrameLayout
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.FrameLayout
android.widget.ScrollView
构造函数
(1)public ScrollView (Context context)
建立一个默认属性的ScrollView实例。
(2)public ScrollView (Context context, AttributeSet attrs)
建立一个带有attrs属性的ScrollView 实例。
(3)public ScrollView (Context context, AttributeSet attrs, int defStyle)
建立一个带有attrs属性,而且指定其默认样式的ScrollView实例。
公共方法
(4)public void addView (View child)
添加子视图。若是事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。
参数
child 所添加的子视图
(5)public void addView (View child, int index)
添加子视图。若是事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。
参数
child 所添加的子视图
index 添加子视图的位置
(6)public void addView (View child, int index, ViewGroup.LayoutParams params)
根据指定的layout参数添加子视图
参数
child 所添加的子视图
index 添加子视图的位置
params 为子视图设置的layout参数
(7)public void addView (View child, ViewGroup.LayoutParams params)
根据指定的layout参数添加子视图。
参数
child 所添加的子视图
params 为子视图设置的layout参数
(8)public boolean arrowScroll (int direction)
响应点击上下箭头时对滚动条滚动的处理。
参数
direction 按下的箭头所对应的方向
返回值
若是咱们处理(消耗)了此事件返回true,不然返回false。
(9) public void computeScroll ()
被父视图调用,用于必要时候对其子视图的值(mScrollX和mScrollY)进行更新。典型的状况如:父视图中某个子视图使用一个Scroller对象来实现滚动操做,会使得此方法被调用。
(10)public boolean dispatchKeyEvent (KeyEvent event)
发送一个key事件给当前焦点路径的下一个视图。此焦点路径从视图树的顶层执行直到当前焦点视图。若是此视图为焦点视图,将为本身发送。不然,会为当前焦点路径的下一个节点发送。此方法也会激起一个key监听器。
参数
event 发送的key事件
返回值
事件被处理返回true,不然返回false。
(11)public void draw (Canvas canvas)
手动绘制视图(及其子视图)到指定的画布(Canvas)。这个视图必须在调用这个函数以前作好了总体布局。当实现一个视图时,不须要继承这个方法;相反,你应该实现onDraw(Canvas)方法。
参数
canvas 绘制视图的画布
(12)public boolean executeKeyEvent (KeyEvent event)
当接收到key事件时,用户能够调用此函数来使滚动视图执行滚动,相似于处理由视图体系发送的事件。
参数
event 须要执行key的事件
返回值
事件被处理返回true,不然返回false。
(13)public void fling (int velocityY)
滚动视图的滑动(fling)手势。(译者注: 如何监听android的屏幕滑动中止事件)
参数
velocityY Y方向的初始速率。正值表示手指/光标向屏幕下方滑动,而内容将向上滚动。
(14)public boolean fullScroll (int direction)
对响应“home/end”短按时响应滚动处理。此方法将视图滚动到顶部或者底部,而且将焦点置于新的可视区域的最顶部/最底部组件。若没有适合的组件作焦点,当前的ScrollView会收回焦点。
参数
direction滚动方向:FOCUS_UP表示视图向上滚动;FOCUS_DOWN表示视图向下滚动
返回值
若key事件被消耗(consumed)返回true,其余状况返回false。
(15)public int getMaxScrollAmount ()
返回值
当前滚动视图响应箭头事件可以滚动的最大数。
(16)public boolean isFillViewport ()
指示当前ScrollView的内容是否被拉伸以填充视图可视范围(译者注:viewport可视范围,参见决定Scrollviewer里面Control的可视范围)。
返回值
内容填充视图返回true,不然返回false。
(17)public boolean isSmoothScrollingEnabled ()
返回值
按箭头方向滚动时,是否显示滚动的平滑效果。
(18)public boolean onInterceptTouchEvent (MotionEvent ev)
实现此方法是为了拦截全部触摸屏幕时的运动事件。能够像处理发送给子视图的事件同样去监视这些事件,而且获取当前手势在任意点的ownership
使用此方法时候须要注意,由于它与View.onTouchEvent(MotionEvent)有至关复杂的交互,而且前提须要正确执行View.onTouchEvent(MotionEvent)。事件将按照以下顺序接收到:
1. 收到down事件
2. Down事件或者由视图组的一个子视图处理,或者被用户本身的onTouchEvent()方法处理;此处理意味你应该执行onTouchEvent()时返回true,这样才能继续看到剩下的手势(取代找一个父视图处理)。若是onTouchEvent()返回true时,你不会收到onInterceptTouchEvent()的任何事件而且全部对触摸的处理必须在onTouchEvent()中发生。
3. 若是此方法返回false,接下来的事件(up to and including the final up)将最早被传递当此,而后是目标的onTouchEvent()。
4. 若是返回true,将不会收到如下任何事件:目标view将收到一样的事件可是会伴随ACTION_CANCEL,而且全部的更进一步的事件将会传递到你本身的onTouchEvent()方法中而不会再在这里出现。
参数
ev 体系向下发送的动做事件
返回值
若是将运动事件从子视图中截获而且经过onTouchEvent()发送到当前ViewGroup ,返回true。当前目标将会收到ACTION_CANCEL事件,而且再也不会有其余消息传递到此。
(译者注:onInterceptTouchEvent和onTouchEvent调用时序)
(19)public boolean onTouchEvent (MotionEvent ev)
执行此方法为了处理触摸屏幕的运动事件。
参数
ev 运动事件
返回值
事件被处理返回true,其它返回false。
(20)public boolean pageScroll (int direction)
响应短按“page up/ down”时候对滚动的处理。此方法将向上或者向下滚动一屏,而且将焦点置于新可视区域的最上/最下。若是没有适合的component做为焦点,当前scrollView将收回焦点。
参数
direction 滚动方向:FOCUS_UP表示向上翻一页,FOCUS_DOWN表示向下翻一页。
返回值
此key事件被消耗(cosumed)返回true,其余返回false。
(21)public void requestChildFocus (View child, View focused)
当父视图的一个子视图的要得到焦点时,调用此方法。
参数
child 要得到焦点的父视图的子视图。此视图包含了焦点视图。若是没有特殊徐要求,此视图实际上就是焦点视图。
focused 子视图的子孙视图而且此子孙视图是真正的焦点视图
(22)public boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)
当组里的某个子视图须要被定位在屏幕的某个矩形范围时,调用此方法。重载此方法的ViewGroup可确认如下几点:
* 子项目将是组里的直系子项
* 矩形将在子项目的坐标体系中
重载此方法的ViewGroup应该支持如下几点:
* 若矩形已是可见的,则没有东西会改变
* 为使矩形区域所有可见,视图将能够被滚动显示
参数
child 发出请求的子视图
rectangle 子项目坐标系内的矩形,即此子项目但愿在屏幕上的定位
immediate 设为true,则禁止动画和平滑移动滚动条
返回值
进行了滚动操做的这个组(group),是否处理此操做。
(23)public void requestLayout ()
当有改变引发当前视图从新布局时,调用此函数。它将规划一个视图树的layout路径。
(24)public void scrollTo (int x, int y)
设置当前视图滚动到的位置。此函数会引发对onScrollChanged(int, int, int, int)函数的调用而且会让视图更新。
当前版本取消了在子视图中的滚动。
参数
x 滚动到的X位置
y 滚动到的Y位置
(25)public void setFillViewport (boolean fillViewport)
设置当前滚动视图是否将内容高度拉伸以填充视图可视范围(译者注:viewport可视范围,参见决定Scrollviewer里面Control的可视范围)。
参数
fillViewport 设置为true表示拉伸内容高度来适应视口边界;其余设为false。
(26)public void setOverScrollMode (int mode)
为视图设置over-scroll模式。有效的over-scroll模式有OVER_SCROLL_ALWAYS(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS(只容许当视图内容大过容器时,进行over-scrolling)和OVER_SCROLL_NEVER。只有当视图能够滚动时,此项设置才起做用。
(译者注:这个函数是2.3 r1 中新增的,API Level 9。关于over-scroll这里译为弹性滚动,即,参见帖子:相似iPhone的弹性ListView滚动)
参数
mode The new over-scroll mode for this view.
(27)public void setSmoothScrollingEnabled (boolean smoothScrollingEnabled)
用来设置箭头滚动是否能够引起视图滚动。
参数
smoothScrollingEnabled 设置箭头滚动是否能够引发内容的滚动的bool值
(28)public final void smoothScrollBy (int dx, int dy)
相似于scrollBy(int, int),可是滚动时候是平缓的而不是当即滚动到某处。
参数
dx 在X方向滚动的像素数
dy 在Y方向滚动的像素数
(29)public final void smoothScrollTo (int x, int y)
相似于scrollTo(int, int),可是滚动时候是平缓的而不是当即滚动到某处。
参数
x 要滚动到位置的X坐标
y 要滚动到位置的Y坐标
受保护方法
(30)protected int computeScrollDeltaToGetChildRectOnScreen (Rect rect)
计算X方向滚动的总合,以便在屏幕上显示子视图的完整矩形(或者,若矩形宽度超过屏幕宽度,至少要填满第一个屏幕大小)。
参数
rect 矩形
返回值
滚动差值
(31)protected int computeVerticalScrollOffset ()
计算垂直方向滚动条的滑块的偏移。此值用来计算滚动条轨迹的滑块的位置。
范围能够以任意单位表示,可是必须与computeVerticalScrollRange()和computeVerticalScrollExtent()的单位一致。
缺省的偏移是在当前视图滚动的偏移。
返回值
滚动条的滑块垂直方向的偏移。
(32)protected int computeVerticalScrollRange ()
滚动视图的可滚动范围是全部子元素的高度。
返回值
由垂直方向滚动条表明的全部垂直范围,缺省的范围是当前视图的画图高度。
(33)protected float getBottomFadingEdgeStrength ()
返回滚动底部的能见度。能见度的值的范围是0.0(没有消失)到1.0(彻底消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类须要重载这个方法来提供一个平缓的渐隐的实现。
返回值
滚动底部能见度,值的范围在浮点数0.0f到1.0f之间。
(34)protected float getTopFadingEdgeStrength ()
返回滚动顶部的能见度。能见度的值的范围是0.0(没有消失)到1.0(彻底消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类须要重载这个方法来提供一个平缓的渐隐的实现。
返回值
滚动顶部能见度,值的范围在浮点数0.0f到1.0f之间。
(35)protected void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)
要求当前视图的一个子视图测量本身,同时兼顾到当前视图的MeasureSpec的要求和它的空白。子视图必须有MarginLayoutParams。比较复杂的工做是在getChildMeasureSpec中完成的。
参数
child 须要本身测量的子视图
parentWidthMeasureSpec 当前视图要求的宽度
parentHeightMeasureSpec 当前视图要求的宽度
(36)protected void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)
要求当前视图的一个子视图测量本身,同时兼顾到当前视图的MeasureSpec的要求和它的空白和边界。子视图必须有MarginLayoutParams。比较复杂的工做是在getChildMeasureSpec中完成的。
参数
child 须要测量的子视图
parentWidthMeasureSpec 当前视图要求的宽度
widthUsed 水平方向上由父视图使用的空白 (也多是视图的其余子视图使用的)
parentHeightMeasureSpec 当前视图要求的宽度
heightUsed 垂直方向上由父视图使用的空白 (也多是视图的其余子视图使用的)
(37)protected void onLayout (boolean changed, int l, int t, int r, int b)
当前视图须要为子视图分配大小和位置时候调用,子类继承必需要重载此方法并调用本身子视图的layout函数。
参数
changed 当前视图的新的大小或者位置
l 相对父视图,左边界位置
t 相对父视图,上边界位置
r 相对父视图,右边界位置
b 相对父视图,下边界位置
(38)protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
测量视图以肯定其内容宽度和高度。此方法被measure(int, int)调用。须要被子类重写以提供对其内容准确高效的测量。
约定:当重写此方法时,你必须调用setMeasuredDimension(int, int)来保存当前视图view的宽度和高度。不成功调用此方法将会致使一个IllegalStateException异常,是由measure(int, int)抛出。因此调用父类的onMeasure(int, int)方法是必须的。
父类的实现是以背景大小为默认大小,除非MeasureSpec(测量细则)容许更大的背景。子类能够重写onMeasure(int,int)以对其内容提供更佳的尺寸。
若是此方法被重写,那么子类的责任是确认测量高度和测量宽度要大于视图view的最小宽度和最小高度(getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()),使用这两个方法能够取得最小宽度和最小高度。
参数
widthMeasureSpec 受主窗口支配的水平空间要求。这个需求经过 View.MeasureSpec.进行编码。
heightMeasureSpec 受主窗口支配的垂直空间要求。这个需求经过 View.MeasureSpec.进行编码。
(39)protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)
被overScrollBy(int, int, int, int, int, int, int, int, boolean)调用,来对一个over-scroll操做的结果进行响应。(译者注:这个函数是2.3 r1 中新增的,API Level 9)
参数
scrollX 新的X滚动像素值
scrollY 新的Y滚动像素值
clampedX 当scrollX被over-scroll的边界限制时,值为true
clampedY 当scrollY被over-scroll的边界限制时,值为true
(40)protected boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)
当在滚动视图的子视图中查找焦点视图时,须要注意不要将焦点设置在滚动出屏幕外的控件上。此方法会比执行缺省的ViewGroup代价高,不然此行为也会设置为缺省
参数
direction 指定下列常量之一:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT
previouslyFocusedRect 可以给出一个较好的提示的矩形(当前视图的坐标系统)表示焦点从哪里得来。若是没有提示为null。
返回值
是否取得了焦点
(41)protected void onSizeChanged (int w, int h, int oldw, int oldh)
布局期间当视图的大小发生改变时调用。若是只是添加到视图,调用时显示的是旧值0。(译者注:也就是添加到视图时,oldw和oldh返回的是0)。
参数
w 视图当前宽度
h 视图当前高度
oldw 视图改变前的宽度
oldh 视图改变前的高度
(1)android:scrollbarFadeDuration
设置滚动条淡出效果(从有到慢慢的变淡直至消失)时间,以毫秒为单位。Android2.2中滚动条滚动完以后会消失,再滚动又会出来,在1.五、1.6版本里面会一直显示着。
(2)android:scrollbarSize
设置滚动条的宽度。
(3)android:scrollbarStyle
(4)设置滚动条的风格和位置。设置值:insideOverlay、insideInset、outsideOverlay、outsideInset。这里没有试出太多效果。
(5)android:scrollbarThumbHorizontal
设置水平滚动条的drawable。
(6)android:scrollbarThumbVertical
设置垂直滚动条的drawable.
(7)android:scrollbarTrackHorizontal
设置水平滚动条背景(轨迹)的色drawable
(8)android:scrollbarTrackVertical
设置垂直滚动条背景(轨迹)的色drawable
(9)android:background
设置背景色/背景图片。能够经过如下两种方法设置背景为透明:"@android:color/transparent"和"@null"。注意TextView默认是透明的,不用写此属性,可是Buttom/ImageButton/ImageView想透明的话就得写这个属性了
ScrollView卷轴视图是指当拥有不少内容,一屏显示不完时,须要经过滚动跳来显示的视图.的使用,所以咱们这里利用动态的增长Button,当一屏显示不完时,就能够看到滚动的效果了。
首先咱们在xml布局中做以下声明,
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:scrollbars="vertical">
<LinearLayout android:id="@+id/LinearLayout"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/TestView" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="TestView0" />
<Button android:id="@+id/Button" android:text="Button0" android:layout_width="fill_parent"
android:layout_height="wrap_content"></Button>
</LinearLayout>
</ScrollView>
而后在Activity中实现显示并建立监听:
// 建立一个线性布局
mLayout = (LinearLayout) this.findViewById(R.id.LinearLayout);
// 建立一个ScrollView对象
sView = (ScrollView) this.findViewById(R.id.ScrollView);
Button mBtn = (Button) this.findViewById(R.id.button_01);
mBtn.setOnClickListener(mClickListener);// 添加点击事件监听
}
public boolean onKeyDown(int keyCode, KeyEvent event){
Button b = (Button) this.getCurrentFocus();
int count = mLayout.getChildCount();
Button bm = (Button) mLayout.getChildAt(count-1);
if(keyCode==KeyEvent.KEYCODE_DPAD_UP && b.getId()==R.id.button_01){
bm.requestFocus();
return true;
}else if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN && b.getId()==bm.getId()){
this.findViewById(R.id.button_01).requestFocus();
return true;
}
return false;
}
// Button事件监听,当点击第一个按钮时增长一个button和一个textview
private Button.OnClickListener mClickListener = new Button.OnClickListener() {
private int index = 1;
@Override
public void onClick(View v) {
TextView tView = new TextView(ScrollViewActivity.this);//定义一个TextView
tView.setText("TextView" + index);//设置TextView的文本信息
//设置线性布局的属性
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
mLayout.addView(tView, params);//添加一个TextView控件
Button button = new Button(ScrollViewActivity.this);//定义一个Button
button.setText("Button" + index);//设置Button的文本信息
button.setId(index++);
mLayout.addView(button, params);//添加一个Button控件
mHandler.post(mScrollToButton);//传递一个消息进行滚动
}
};
private Runnable mScrollToButton = new Runnable() {
@Override
public void run() {
int off = mLayout.getMeasuredHeight() - sView.getHeight();
if (off > 0) {
sView.scrollTo(0, off);//改变滚动条的位置
}
}
};
显示的效果以下:
文章精选
Android ApiDemos/ScrollView2 添加自动滚动和智能焦点切换
[Android学习指南]使用ScrollView实现滚动效果
Android中ScrollView与ListView共用问题的解决方案
progressBar进度条是一个显示进度的控件,Android提供了两大类进度条样式,长形进度条样式progress-BarStyleHorizontal和圆形进度条progressBarStyleLarge.ProgressBar类的层次关系以下:
java.lang.Object
android.view.View
android.widget.ProgressBar
方法 |
功能描述 |
返回值 |
ProgressBar |
3个构造函数: ProgressBar(Context contex) ProgressBar(Context contex,AttributeSet attrs) ProgressBar(Context contex,AttributeSet attrs,intdefStyle)
|
null |
onAttachedToWindow() |
视图附加到窗体时调用 |
void |
onDraw(Canvas canvas) |
绘制视图时,该方法被调用 |
void |
onMeasure(int widthMeasureSpec,int heightMeasureSpec) |
该方法被重写时,必须调用setMeasedDimension(int,int)来存储已测量视图的高度和宽度,不然将经过measure(int,int)抛出一个IllegalStateException异常 |
void |
onDetachedFromWindow() |
从窗体分离事件的响应方法。当视图Progress从窗体上分离或移除时调用 |
void |
addFocusables(ArrayList<View>views,int direction) |
继承自android.view.View的方法,用于为当前ViewGroup中的全部子视图添加焦点获取能力 |
void |
addTouchables(ArrayList<View views>) |
继承自android.view.View的方法,用于为子视图添加触摸能力 |
void |
getBaseline |
继承自android.view.View的方法。返回窗口空间的文本基准线到其顶边界的偏移量 |
int |
dispatchDisplayHint(int hint) |
继承自android.view.View的方法。分发视图是否显示的提示 |
void |
dispatchDraw(Canvas canvas) |
继承自android.view.View的方法。调用次方法来绘制子视图 |
void |
要实现一个简单的进度条的效果,咱们能够首先在XML文件中声明一个长形进度条和一个圆形进度条:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<ProgressBar
android:id="@+id/ProgressBar01"
style="?android:attr/progressBarStyleHorizontal" //设置样式为长形进度条
android:layout_width="200dp"
android:layout_height="wrap_content"
android:visibility="gone" //设置当前不可见
/>
<ProgressBar
android:id="@+id/ProgressBar02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleLarge" //设置样式为圆形进度条
android:max="100"
android:progress="50"
android:secondaryProgress="70"
android:visibility="gone" //设置当前不可见
/>
<Button
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始" />
而后在Activity中实现监听并经过线程来改变ProgressBar的值:
/设置窗口模式,,由于须要显示进度条在标题栏
requestWindowFeature(Window.FEATURE_PROGRESS);
setProgressBarVisibility(true);
setContentView(R.layout.main);
//取得ProgressBar
m_ProgressBar = (ProgressBar) findViewById(R.id.ProgressBar01);
m_ProgressBar2= (ProgressBar) findViewById(R.id.ProgressBar02);
mButton01 = (Button)findViewById(R.id.Button01);
m_ProgressBar.setIndeterminate(false);
m_ProgressBar2.setIndeterminate(false);
//当按钮按下时开始执行,
mButton01.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
//设置ProgressBar为可见状态
m_ProgressBar.setVisibility(View.VISIBLE);
m_ProgressBar2.setVisibility(View.VISIBLE);
//设置ProgressBar的最大值
m_ProgressBar.setMax(100);
//设置ProgressBar当前值
m_ProgressBar.setProgress(0);
m_ProgressBar2.setProgress(0);
//经过线程来改变ProgressBar的值
new Thread(new Runnable() {
public void run()
{
for (int i = 0; i < 10; i++)
{
try
{
intCounter = (i + 1) * 20;
Thread.sleep(1000);
if (i == 4)
{
Message m = new Message();
m.what = ProgressBarActivity.GUI_STOP_NOTIFIER;
ProgressBarActivity.this.myMessageHandler.sendMessage(m);
break;
}
else
{
Message m = new Message();
m.what = ProgressBarActivity.GUI_THREADING_NOTIFIER;
ProgressBarActivity.this.myMessageHandler.sendMessage(m);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}).start();
}
});
}
Handler myMessageHandler = new Handler()
{
// @Override
public void handleMessage(Message msg)
{
switch (msg.what)
{
//ProgressBar已是对大值
case ProgressBarActivity.GUI_STOP_NOTIFIER:
m_ProgressBar.setVisibility(View.GONE);
m_ProgressBar2.setVisibility(View.GONE);
Thread.currentThread().interrupt();
break;
case ProgressBarActivity.GUI_THREADING_NOTIFIER:
if (!Thread.currentThread().isInterrupted())
{
// 改变ProgressBar的当前值
m_ProgressBar.setProgress(intCounter);
m_ProgressBar2.setProgress(intCounter);
// 设置标题栏中前景的一个进度条进度值
setProgress(intCounter*100);
// 设置标题栏中后面的一个进度条进度值
setSecondaryProgress(intCounter*100);//
}
break;
}
super.handleMessage(msg);
}
};
效果以下:
SeekBar是ProgressBar的扩展,在其基础上增长了一个可滑动的滑片(注:就是那个可拖动的图标)。用户能够触摸滑片并向左或向右拖动,再或者可使用方向键均可以设置当前的进度等级。不建议把能够获取焦点的widget放在SeekBar的左边或右边。
SeekBar能够附加一个SeekBar.OnSeekBarChangeListener以得到用户操做的通知。
SeekBar类的层次关系以下:
public class SeekBar extends AbsSeekBar
java.lang.Object
android.widget.ProgressBar
android.widget.AbsSeekBar
android.widget.SeekBar
方法 |
功能描述 |
返回值 |
SeekBar |
3个构造函数: SeekBar(Context contex) SeekBar(Context contex,AttributeSet attrs) SeekBar(Context contex,AttributeSet attrs,intdefStyle) |
null |
setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener) |
用于注册拖动条的监听器,这个监听器用于监听改变拖动条状态的事件 |
void |
drawableStateChanged() |
继承自ProgressBar的方法。该方法在视图状态的变化影响到所显示的可绘制对象的状态时调用。 |
void |
onAttacedToWindow() |
继承自ProgressBar的方法。该方法在视图添加到窗体时调用 |
|
onDraw(Canvas canvas) |
继承自ProgressBar的方法。该方法在绘制视图时调用 |
void |
onMessure(int w,int h) |
继承自ProgressBar的方法。该方法被重写时,必须调用setMeasedDimension(int,int)来存储已测量视图的高度和宽度,不然将经过measure(int,int)抛出一个IllegalStateException异常 |
void |
XML属性
属性名称 |
描述 |
android:thumb |
Seekbar上绘制的thumb(可拖动的那个图标) |
在xml中声明一个SeekBar,两个TextView,一个用于显示当前SeekBar的值,一个用于显示调节的状态(正在调节或者以及中止调节):
<SeekBar android:id="@+id/seek"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="50"
android:secondaryProgress="75" />
<TextView android:id="@+id/progress"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView android:id="@+id/tracking"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
而后在Activity中:
//取得SeekBar对象
mSeekBar = (SeekBar) findViewById(R.id.seek);
mSeekBar.setOnSeekBarChangeListener(this);
mProgressText = (TextView) findViewById(R.id.progress);
mTrackingText = (TextView) findViewById(R.id.tracking);
}
//在拖动中--即值在改变
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch)
{
mProgressText.setText("当前值:"+progress);
}
public void onStartTrackingTouch(SeekBar seekBar)
{
mTrackingText.setText("正在调节");
}
//中止拖动
public void onStopTrackingTouch(SeekBar seekBar)
{
mTrackingText.setText("中止调节");
}
效果以下:
补充
文章连接
在android里作一个竖着的seekbar
http://blog.csdn.net/saintswordsman/archive/2010/01/23/5248233.aspx
Android UI设计 SeekBar拖动条用法
http://www.pocketdigi.com/20100813/36.html
RatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户能够触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndicator),其中大的只适合指示,不适合于用户交互。
当使用能够支持用户交互的RatingBar时,不管将控件(widgets)放在它的左边仍是右边都是不合适的。
只有当布局的宽被设置为wrap content时,设置的星星数量(经过函数setNumStars(int)或者在XML的布局文件中定义)将显示出来(若是设置为另外一种布局宽的话,后果没法预知)。
次级进度通常不该该被修改,由于他仅仅是被看成星型部份内部的填充背景。
RatingBar的层次关系以下所示:
public class RatingBar extends AbsSeekBar
java.lang.Object
android.widget.ProgressBar
android.widget.RatingBar
XML属性
属性名称 |
描述 |
android:isIndicator |
RatingBar是不是一个指示器(用户没法进行更改) |
android:numStars |
显示的星型数量,必须是一个整形值,像“100”。 |
android:rating |
默认的评分,必须是浮点类型,像“1.2”。 |
android:stepSize |
评分的步长,必须是浮点类型,像“1.2”。 |
公共方法
(1) public int getNumStars ()
返回显示的星型数量
返回值: 显示的星型数量
(2)public RatingBar.OnRatingBarChangeListener getOnRatingBarChangeListener ()
返回值
监听器(可能为空)监听评分改变事件
(3)public float getRating ()
获取当前的评分(填充的星型的数量)
返回值
当前的评分
(4)public float getStepSize ()
获取评分条的步长
返回值
The step size.
步长
(5)public boolean isIndicator ()
返回值
判断当前的评分条是否仅仅是一个指示器(注:即可否被修改)
(6)public void setIsIndicator (boolean isIndicator)
设置当前的评分条是否仅仅是一个指示器(这样用户就不能进行修改操做了)
参数
isIndicator Bool值,是不是一个指示器
(7)public synchronized void setMax (int max)
设置评分等级的范围,从0到max
参数
max 评分条最大范围。
(8)public void setNumStars (int numStars)
设置显示的星型的数量。为了可以正常显示它们,建议将当前widget的布局宽度设置为wrap content
参数
numStars 星型的数量
(9)public void setOnRatingBarChangeListener (RatingBar.OnRatingBarChangeListener listener)
设置当评分等级发生改变时回调的监听器
参数
listener 监听器
(10)public void setRating (float rating)
设置分数(星型的数量)
参数
rating 设置的分数
(11)public void setStepSize (float stepSize)
设置当前评分条的步长(step size)
参数
stepSize 评分条的步进。例如:若是想要半个星星,它的值为0.5。
受保护方法
(12)protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
权衡 view 和 content 来决定它的宽度和高度的整齐。它被measure(int, int) 调用 而且应该被子类所覆盖,以便提供准确高效的布局测量。
规定: 当覆盖这个方法的时候,你必须调用 setMeasuredDimension(int, int)以便存储精确的视图的宽和高。若是不这样作的话将触发llegalStateException异常,被函数 measure(int, int)抛出。调用父类 onMeasure(int, int)是合理的。
尺寸的基本类的实现默认是背景大小,除非经过MeasureSpec容许大的尺寸。子类应该覆盖 onMeasure(int, int) 以便提供更好的布局大小。
若是这个方法被覆盖,子类应该负责确保标准的宽和高至少是视图的最小宽度和高度的值(分别为getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()两方法)。
参数
widthMeasureSpec 受主窗口支配的水平空间要求。这个需求经过 View.MeasureSpec.进行编码。
heightMeasureSpec 受主窗口支配的垂直空间要求。这个需求经过 View.MeasureSpec.进行编码。
咱们在xml中声明三种 样式的RatingBar:
<RatingBar android:layout_width="wrap_content"
android:layout_height="wrap_content" style="?android:attr/ratingBarStyleIndicator"
android:id="@+id/ratingbar_Indicator" />
<RatingBar android:layout_width="wrap_content"
android:layout_height="wrap_content" style="?android:attr/ratingBarStyleSmall"
android:id="@+id/ratingbar_Small" android:numStars="20" />
<RatingBar android:layout_width="wrap_content"
android:layout_height="wrap_content" style="?android:attr/ratingBarStyle"
android:id="@+id/ratingbar_default" />
在Activity中声明并显示:
final RatingBar ratingBar_Small = (RatingBar)findViewById(R.id.ratingbar_Small);
final RatingBar ratingBar_Indicator = (RatingBar)findViewById(R.id.ratingbar_Indicator);
final RatingBar ratingBar_default = (RatingBar)findViewById(R.id.ratingbar_default);
ratingBar_default.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener(){
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromUser) {
ratingBar_Small.setRating(rating);
ratingBar_Indicator.setRating(rating);
Toast.makeText(RatingBarActivity.this, "rating:"+String.valueOf(rating),
Toast.LENGTH_LONG).show();
}});
补充
文章连接
前面,咱们学习了对话框和进度条,如今将进度条加入到对话框,使得对话框更加的完善。咱们知道进度条有长形进度条和圆形进度条,因此也就有对话框中的长形进度条和对话框中的圆形进度条。
setProgressStyle : 设置进度条风格,风格为圆形,旋转的或者风格为长形的;
setTitle : 设置ProgressDialog的标题
setMessage : 设置ProgressDialog的提示信息
setIcon :设置ProgressDialog的标题图标
setIndeterminate :设置ProgressDialog的进度条是否不明确
setCancelable :设置ProgressDialog是否能够按回退键取消
setButton :设置ProgressDialog的一个Button(须要监听Button事件)
show :显示ProgressDialog
要实现29.1节中图形中所示的效果,咱们首先在xml中声明两个Button:
<Button
android:id="@+id/yuan_button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="圆形进度条" />
<Button
android:id="@+id/chang_button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="长形进度条" />
在Activity中获得Button对象,并分别实现监听,在监听里面生成咱们所须要的带进度条的对话框,对于长形进度条咱们须要用线程来实时更新进度条的值。具体代码以下:
/获得按钮对象
mButton01 = (Button)findViewById(R.id.yuan_button01);
mButton02 = (Button)findViewById(R.id.chang_button02);
//设置mButton01的事件监听
mButton01.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
//建立ProgressDialog对象
m_pDialog = new ProgressDialog(ProgressDialogActivity.this);
// 设置进度条风格,风格为圆形,旋转的
m_pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// 设置ProgressDialog 标题
m_pDialog.setTitle("提示");
// 设置ProgressDialog 提示信息
m_pDialog.setMessage("这是一个圆形进度条对话框");
// 设置ProgressDialog 标题图标
m_pDialog.setIcon(R.drawable.imag1);
// 设置ProgressDialog 的进度条是否不明确
m_pDialog.setIndeterminate(false);
// 设置ProgressDialog 是否能够按退回按键取消
m_pDialog.setCancelable(true);
// 设置ProgressDialog 的一个Button
m_pDialog.setButton("肯定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i)
{
//点击“肯定按钮”取消对话框
dialog.cancel();
}
});
// 让ProgressDialog显示
m_pDialog.show();
}
});
//设置mButton02的事件监听
mButton02.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
m_count = 0;
// 建立ProgressDialog对象
m_pDialog = new ProgressDialog(ProgressDialogActivity.this);
// 设置进度条风格,风格为长形
m_pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置ProgressDialog 标题
m_pDialog.setTitle("提示");
// 设置ProgressDialog 提示信息
m_pDialog.setMessage("这是一个长形对话框进度条");
// 设置ProgressDialog 标题图标
m_pDialog.setIcon(R.drawable.imag2);
// 设置ProgressDialog 进度条进度
m_pDialog.setProgress(100);
// 设置ProgressDialog 的进度条是否不明确
m_pDialog.setIndeterminate(false);
// 设置ProgressDialog 是否能够按退回按键取消
m_pDialog.setCancelable(true);
// 让ProgressDialog显示
m_pDialog.show();
new Thread()
{
public void run()
{
try
{
while (m_count <= 100)
{
// 由线程来控制进度。
m_pDialog.setProgress(m_count++);
Thread.sleep(100);
}
m_pDialog.cancel();
}
catch (InterruptedException e)
{
m_pDialog.cancel();
}
}
}.start();
}
});
当有未接电话或者短信的时候,在Android手机的顶部状态栏会出现一个小图标,提示用户有没有处理的快讯,这时用触笔按住状态栏往下拖动时就能够展开并查看这些快讯,Android提供了NotificationManager来管理这些状态栏信息,提供了Notification来处理这些快讯信息。
Notification经常使用的属性:
audioStreamType :当声音响起时,所用的音频流的类型
contentIntent :当通知条目被点击时,就执行被设置的Intent
contentView :当通知被显示在状态条上的时候,同时这个被设置的视图被显示
default 指定哪一个值是要被设置为默认的
deleteIntent :当用户点击“Clear All Notifications”按钮区域删除全部通知的时候,这个被设置的Intent被执行
icon 状态条所用的图片
iconLevel :假如状态条的图片有几个级别,就设置这里
ledARGB : LED灯的颜色
ledOffMS LED : 关闭时的闪光时间,以毫秒计算
ledOnMS LED :开始时的闪光时间,以毫秒计算
number :这个通知表明事件的号码
sound :通知的声音
tickerText :通知被显示在状态栏时,所显示的信息
vibrate :振动模式
when :通知的时间戳
Notification经常使用的字段:
DEFAULT_ALL 使用全部默认值,好比声音,震动,闪屏等等
DEFAULT_LIGHTS 使用默认闪光提示
DEFAULT_SOUNDS 使用默认提示声音
DEFAULT_VIBRATE 使用默认手机震动
【说明】:加入手机震动,必定要在manifest.xml中加入权限:
<uses-permission android:name="android.permission.VIBRATE" />
以上的效果常量能够叠加,即经过
mNotifaction.defaults =DEFAULT_SOUND | DEFAULT_VIBRATE ;
或mNotifaction.defaults |=DEFAULT_SOUND (最好在真机上测试,震动效果模拟器上没有)
//设置flag位
FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
FLAG_NO_CLEAR 该通知能被状态栏的清除按钮给清除掉
FLAG_ONGOING_EVENT 通知放置在正在运行
FLAG_INSISTENT 是否一直进行,好比音乐一直播放,知道用户响应
Notification.build构造Notification方法介绍:
void setLatestEventInfo(Context context , CharSequencecontentTitle,CharSequence contentText,PendingIntent contentIntent)
功能: 显示在拉伸状态栏中的Notification属性,点击后将发送PendingIntent对象
参数: context 上下文环境
contentTitle 状态栏中的大标题
contentText 状态栏中的小标题
contentIntent 点击后将发送PendingIntent对象
说明:要是在Notification中加入图标,在状态栏和状态条中显示图标必定要用这个方法,不然报错!
NotificationManager类的经常使用方法:
过获取系统服务来获取该对象:
NotificationManager mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE) ;
public void cancelAll() 移除全部通知 (只是针对当前Context下的Notification)
public void cancel(int id) 移除标记为id的通知 (只是针对当前Context下的全部Notification)
public void notify(String tag ,int id, Notification notification) 将通知加入状态栏, 标签为tag,标记为id
public void notify(int id, Notification notification) 将通知加入状态栏,,标记为id
首先咱们定义了2个XMl文件,一个xml中声明了一个TextView和一个Button。一个xml中咱们只有一个TextView.,这个TextView是用来查看快讯的。
main.xml:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:paddingBottom="4dip"
/>
<Button
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button01"
>
<requestFocus/>
</Button>
main2.xml:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="谢谢使用!"
/>
在Activity NotificantionActivity01里面:
Button m_Button1;
//声明通知(消息)管理器
NotificationManager m_NotificationManager;
Intent m_Intent;
PendingIntent m_PendingIntent;
//声明Notification对象
Notification m_Notification;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化NotificationManager对象
m_NotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//获取4个按钮对象
m_Button1 = (Button) findViewById(R.id.Button01);
//点击通知时转移内容
m_Intent = new Intent(NotificantionActivity01.this, NotificantionActivity02.class);
//主要是设置点击通知时显示内容的类
m_PendingIntent = PendingIntent.getActivity(NotificantionActivity01.this, 0, m_Intent, 0);
//构造Notification对象
m_Notification = new Notification();
m_Button1.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
//设置通知在状态栏显示的图标
m_Notification.icon = R.drawable.img1;
//当咱们点击通知时显示的内容
m_Notification.tickerText = "Button1通知内容...........";
//通知时发出默认的声音
m_Notification.defaults = Notification.DEFAULT_SOUND;
//设置通知显示的参数
m_Notification.setLatestEventInfo(NotificantionActivity01.this, "Button1", "Button1通知", m_PendingIntent);
//能够理解为执行这个通知
m_NotificationManager.notify(0, m_Notification);
}
});
而后在NotificantionActivity02里:
//这里直接限制一个TextView
setContentView(R.layout.main2);
显示的效果为: