【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