【Android学习】View
来源:互联网 发布:线程之间共享数据 编辑:程序博客网 时间:2024/05/24 03:50
1,概念
1)View
是Android中所有控件(Button、RelativeLayout、ListView)的基类。
View可以是单个控件也可以是多个控件(ViewGroup)组成的一组控件。
2)ViewGroup(控件组)
包含一组View,同时也继承了View。
RelativeLayout不但是一个View,也是一个ViewGroup。
2,View的位置参数
top、left、right、bottom。
Android3.0增加的参数:x、y(View左上角的坐标)、translationX、translationY(View左上角相对于父容器的偏移量,默认值为0)。
x = left + translationX;y = top + translationY.
3,事件
1)MotionEvent
手指接触屏幕后产生的一系列事件。
ACTION_DOWN 手指刚接触屏幕;ACTION_MOVE 手指在屏幕上移动;ACTION_UP 手机从屏幕上松开的一瞬间。
该事件提供的两组方法:
getX/getY:相对于当前View左上角的x和y坐标。
getRawX/getRawY:相对于手机屏幕左上角的坐标。
TouchSlop是系统所能识别出的被认为最小的滑动距离(小于这个距离判定为不滑动)。
4,事件分发机制
1)事件分发过程
当一个MotionEvent产生后,系统要把这个事件传递给一个具体的View,这个传递的过程就是分发过程。
①public boolean dispatchTouchEvent(MotionEvent ev)
用来进行事件的分发。
②public boolean onInterceptTouchEvent(MotionEvent event)
③public boolean onTouchEvent(MotionEvent event)
2)注意
①一个事件序列只能被一个View拦截且消耗。
②某个View一旦开始处理事件,则不再消耗ACTION_DOWN事件(onTouchEvent返回了false),同一事件序列中的其他事件将交给它的父元素去处理。
5,View常见回调方法
1)构造方法
2)onAttach
3)onVisibilityChanged
4)onDetach
6,View绘制流程
1)measure
测量View的宽、高。
2)layout
确定View在父容器中的放置位置。
3)draw
负责把View绘制在屏幕。
7,常用View
1)TextView
①设置TextView顶部图片
②常用属性
--android:autoLink当文本为URL链接/email/电话号码/map时,文本显示是否为可点击的链接。可选值(none/web/email/phone/map/all) --android:linksClickable设置链接是否点击连接,即使设置了autoLink。 --android:textColorLink文字链接的颜色。--android:maxLength限制显示的文本长度,超出部分不显示。可作用于EditText。代码:editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});--android:typeface设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3] --android:editable设置是否可编辑。--android:bufferType指定getText()方式取得的文本类别。选项editable 类似于StringBuilder可追加字符,也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式。--android:gravity设置文本位置,如设置成“center”,文本将居中显示。--android:layout_gravity是本元素对父元素的重力方向。--android:drawableBottom在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色。同时和background使用时覆盖后者。 --android:drawablePadding设置text与drawable(图片)的间隔,与drawableLeft等一起使用,可设置为负数,单独使用没有效果。 --android:ellipsize设置当文字过长时,该控件该如何显示。有如下值设置:start:省略号显示在开头;end:省略号显示在结尾;middle:省略号显示在中间; marquee:以跑马灯的方式显示(动画横向移动) --android:height设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米) --android:maxHeight设置文本区域的最大高度。与android:minHeight类似。--android:width设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width的区别看这里。 --android:maxWidth设置文本区域的最大宽度。与android:minWidth类似。--android:includeFontPadding设置文本是否包含顶部和底部额外空白,默认为true。 --android:ems设置TextView的宽度为N个字符的宽度。--android:maxEms设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。 和android:minEms同理。 --android:marqueeRepeatLimit在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为marquee_forever时表示无限次。 --android:lines设置文本的行数,设置两行就显示两行,即使第二行没有数据。 --android:maxLines设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。对应还有android:minLines。 --android:lineSpacingExtra设置行间距。 --android:lineSpacingMultiplier设置行间距的倍数。如”1.2” --android:singleLinetrue为单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用“…”来表示。如android:text="test_ singleLine " --android:scrollHorizontally设置文本超出TextView的宽度的情况下,是否出现横拉条。 --android:shadowColor指定文本阴影的颜色,需要与shadowRadius一起使用。 --android:shadowDx设置阴影横向坐标开始位置。 类似有:android:shadowDy--android:shadowRadius设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好。 --android:textStyle设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“|”隔开 --android:textAppearance设置文字外观。如"?android:attr/textAppearanceLargeInverse"这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可设置的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse --android:textColor--android:textColorHighlight被选中文字的底色,默认为蓝色 --android:textColorHint设置提示信息文字的颜色,默认为灰色。与hint一起使用。 --android:textScaleX设置文字之间间隔,默认为1.0f。 --android:textSize设置文字大小,推荐度量单位sp。
2)Button
// 模拟点击事件btn1.performClick();
3)EditText
①属性
--android:hint 注释--android:macLines 输入框的最大行数。--android:inputType设置文本的类型,用于帮助输入法显示合适的键盘类型。android:inputType="number"--android:password="true"密码格式。代码中设置密码不可见:editText.setTransformationMethod(PasswordTransformationMethod.getInstance());--android:phoneNumber="true"电话号码的输入方式。 --android:text设置显示文本。--android:numeric只接收数字。三种数字类型:integer(正整数)、signed(带符号整数,有正负)和decimal(浮点数)。 --android:editorExtras设置文本的额外的输入数据。 --android:hintText为空时显示的文字提示信息,可通过textColorHint设置提示信息的颜色。此属性在EditView中使用,但是这里也可以用。 --android:privateImeOptions设置输入法选项。--android:imeActionId设置IME动作ID。 --android:imeActionLabel设置IME动作标签。 --android:imeOptions附加功能,设置输入法右下角IME动作与编辑框相关的动作,如:actionDone:效果:完成;对应常量EditorInfo.IME_ACTION_DONEactionUnspecified:回车键;对应常量EditorInfo.IME_ACTION_UNSPECIFIED actionNone:没有任何提示;对应常量EditorInfo.IME_ACTION_NONEactionGo:去往、开始;对应常量EditorInfo.IME_ACTION_GOactionSearch: 搜索,对应常量EditorInfo.IME_ACTION_SEARCH actionSend: 发送,对应常量EditorInfo.IME_ACTION_SENDactionNext: 下一个,对应常量EditorInfo.IME_ACTION_NEXTflagNoExtractUi:回车键;使软键盘不全屏显示,只占用一部分屏幕。--android:capitalize设置英文字母大写类型。 android:capitalize="cwj1987" 这样仅允许接受输入cwj1987,一般用于密码验证。--android:digits设置允许输入哪些字符。如“1234567890.+-*/% ()” --android:autoText如果设置,将自动执行输入值的拼写纠正。--android:inputMethod为文本指定输入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是这里报错找不到。
②EditText输入监听,小写字母自动转换为大写字母
③带清除功能的EditText重写
④EditText、TextView左边/顶部图片
⑤屏幕不会被软键盘挤上去
使用Manifest中的Activity的android:windowSoftInputMode的"adjustPan"
属性。
⑥软键盘的调起、关闭
i>EditText有焦点(focusable为true)阻止输入法弹出
editText=(EditText)findViewById(R.id.txtBody); editText.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View v, MotionEvent event){ editText.setInputType(InputType.TYPE_NULL); //关闭软键盘 return false; } });
ii>当EidtText无焦点(focusable=false)时阻止输入法弹出
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(),0);
iii>调用数字键盘并设置输入类型和键盘为英文
etNumber.setInputType(InputType.TYPE_CLASS_NUMBER); //调用数字键盘 rlEditText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//设置输入类型和键盘为英文 或者:android:inputType="textUri|textMultiLine"
iv>android:focusable=”false”//键盘永远不会弹出
<activity android:name=".AddLinkman"android:windowSoftInputMode="adjustUnspecified|stateHidden"/>//不自动弹出键盘//关闭键盘(比如输入结束后执行) InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(etEditText.getWindowToken(), 0);//自动弹出键盘((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);etEditText.requestFocus();//让EditText获得焦点,但是获得焦点并不会自动弹出键盘
⑦光标
edittext.requestFocusFromTouch();//让光标放入到点击位置。 edittext.requestFocus();//默认方式获得焦点EditText editor = (EditText)getCurrentView();//光标处插入 int cursor = editor.getSelectionStart(); editor.getText().insert(cursor,delta); //让光标移到末端(这样文字就会向前显示) et.setText(text); et.setSelection(text.length());--android:cursorVisible="false" 隐藏光标--android:background="#00000000"不要文本框背景 --android:freezesText 设置保存文本的内容以及光标的位置--android:selectAllOnFocus如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。
4)AlertDialog
构造对话框:
AlertDialog.Builder builder = new AlertDialog.Builder(context);
或
ProgressDialog dialog = new ProgressDialog(context);
5)Toast
6)progressBar(进度条)
7)ProgressDialog(进度提示框)
就是在AlterDialog上添加Progress, 不需要在xml中进行配置,直接在代码中进行生成即可。
如下例子,在按钮点击的委托代理方法中添加的ProgressDialog,点击按钮时就显示ProgressDialog。
/** * Called when a view has been clicked. * * @param v The view that was clicked. */ @Override public void onClick(View v) { switch (v.getId()){ case R.id.click_button: ProgressDialog myProgressDialog = new ProgressDialog(MainActivity.this); myProgressDialog.setTitle("ProgressDialog"); myProgressDialog.setMessage("Loading……"); myProgressDialog.setCancelable(true); myProgressDialog.show(); break; default: break; } }
8)webView
WebView详解
android与H5互相调用
弹框
9)GLSurfaceView
①概念
OpenGL即Open Graphics Library(开放的图形库接口),主要用于三维图形编程。
OpenGL ES:OpenGL的子集,嵌入式开放图形库接口。OpenGL ES提供了GLSurfaceView组件。
②特性
i>管理一个surface(平面), 这个平面是一个特殊的内存块 , 它可以和 android 视图系统混合 .
ii>管理一个EGL display(EGL 显示) , 它能够让 OpenGL 渲染到一个surface(平面 ).
iii>接受一个用户提供的实际显示的Renderer 对象 .
iv>使用一个专用线程去渲染从而和UI 线程解耦 .
v>支持on-demand 和连续的渲染.
vi>可选的包, 追踪 和 / 或者错误检查这个渲染器的 OpenGL 调用 .
10)RemoteView
①概念
RemoteView是用来描述一个垮进程显示的view。
它inflate于layout资源文件。并且提供了可以修改过view内容的一些简单基础的操作。
②场景
AppWidget
Notification
11)NavigationView(导航菜单、侧拉菜单)
Android5.0推出。
12)(滚动视图)
①概念
由FrameLayout派生而来,需要在其上放置有自己滚动内容的子元素。
ScrollView用于设置垂直滚动条;
HorizontalScrollView用于设置水平滚动条。
②特点
scrollView只能有一个孩子,它并不是传统意义上的容器
scrollView和HorizontalScrollView可以互相嵌套
③举例
<?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:textSize="90sp" /> </LinearLayout> </ScrollView> </HorizontalScrollView>
12)spinner列表
13)ListView列表
14)android.view.ViewStub
15)CheckBox(复选按钮)
双状态(选中或不选中)按钮,可添加如下监听:setOnClickListener。
checkBtn.setChecked(true);//指定默认值checkBtn.isChecked();//判定是否选中
16)RadioGroup和RadioButton
①概念
RadioGroup用于创建一组互斥的单选按钮,只能选中一个。
初始状态下,所有的单选按钮都未选中。
②实现
<RadioGroup android=……> <RadioButton android=……></RadioButton> <RadioButton android=……></RadioButton></RadioGroup>
radioBtn1 = ……radioBtn2 = ……rg = (RadioGroup)findViewById(……);rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){ @Override public void onCheckedChanged(RadioGroup group, int checkedId){ if(radioBtn1.getId() == checkedId){ }else{} }}
可以通过rg.clearCheck()
清除选中。
17)AutoCompleteTextView
AutoCompleteTextView类似与百度搜索框,输入信息后会弹出提示相关内容,用户可以从下拉菜单中选择一项以完成输入。
MultiAutoCompleteTextView继承了AutoCompleteTextView,能够对用户输入的文本进行有效的扩充提示,而不需要用户输入整个内容。用户必须提供一个MultiAutoCompleteTextView.Tokenizer以区分不同的子串。
18)ToggleButton(开关按钮)
有两种状态:选中和未选中,需要为不同状态设置不同的显示文本(ON OFF)。
--android:checked 设置按钮是否被选中--android:textOff 没有被选中时显示的文本--android:textOn 被选中时显示的文本--setOnCheckedChangeListener 选中状态发生改变时的动作
19)AnalogClock和DigitalClock(时钟控件)
AnalogClock显示模拟时钟,只显示时针和分针。
DigitalClock显示数字时钟,可精确到秒。
20)DatePicker(日期选择器)、TimePicker(时间选择器)
DatePicker用于选择年月日的布局视图。
TimePicker用于选择一天中时间的视图。
21)ImageSwitch(图像切换器)、Gallery(画廊视图)
①ImageSwitch
是Android中控制图片展示效果的一个控件,如幻灯片效果。
需要设置ImageSwitch.ViewFactory,通常实现一个makeView方法,该方法返回一个ImageView,由ImageSwitch负责显示。
②Gallery
与Spinner有共同的父类。区别在于:
Spinner是垂直的列表选择框,Gallery是水平的。
22)GridView(网络视图)
用于在界面上按行、列分布的方式显示多个控件,类似于ListView。
23)ZoomButton和ZoomControls(缩放按钮)
ZoomButton允许自定义样式,显示的只能是图片,没有Text属性。
ZoomControls是一个包含放大、缩小按钮的控件。
24)TextSwitcher(文字交换器)
仅仅包含类型TextView,用来使屏幕上的Label产生动画效果。
调用setText时,TextSwitcher使用动画方式更换当前文字内容。
25)TabHost和TabActivity
①TabHost
该标签控件提供选项卡(Tab页)的窗口视图容器,是一种特殊的FrameLayout布局。
包含两个子对象:
用户可以选择指定Tab页的标签;
FrameLayout:用来显示内容。
②TabActivity
继承自Activity,其内部定义了TabHost,可以通过getTabHost获取。
26)ImageView(图片视图)
android:src 设置一张图片。android:scaleType 缩放图片的边界,用于视图边界的选取设定。
27)Menu
实现最容易的方法是通过引用res资源下的menu资源:
在res目录下创建Menu文件,然后创建xml_menu.xml资源:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id=""> <item android:id="" android:title=""/> <item android:id="" android:title=""/> </group></menu>
@Overridepublic boolean onCreateOptionsMenu(Menu menu){ //menu.add(""); MenuInflaterinflater = getMenuInflater(); inflater.inflate(R.menu.xml_menu, menu); return true;}
①option Menu
②context Menu
③sub Menu
- View学习(android)
- Android View学习示例
- Android View学习示例
- Android View学习示例
- Android学习 自定义View
- android view 的学习
- android学习View Animation
- android view的学习
- android view 动画学习
- 【学习】Android View
- android学习---自定义View
- Android 自定义View学习
- 【Android学习】View
- 【Android学习】android.view.ViewStub
- Android View学习笔记(一):View基础知识
- Android View 学习第一篇--View 探秘
- android中View坐标学习
- Android的View, SurfaceView学习
- 设备直通下,中断处理流程
- 不看OCJP考题,不会知道自己的Java基础有多差(一)
- 欢迎使用CSDN-markdown编辑器
- python学习之结构体
- CodeFestival 2017 Final 题解
- 【Android学习】View
- 第一篇:centos7下svn的安装与卸载
- web开发——1.概述
- PAT1040
- 一些关键字的使用解析
- Java学习_String类型转换等问题
- Spring-01-IOC控制反转/DI依赖注入
- 经典的基于ProxyBeanFactory的Spring AOP
- linux CentOS7 下 mysql6.5安装