xml中的控件布局在运行时会在内存中生成对应的对象实例。

布局:

1、linearLayout(线性布局)
2、RelativeLayout(相对布局)
3、absoluteLayout(绝对布局)
4、tableLayout(表格布局)

5、frameLayout(框架布局)


px:表示屏幕实际的像素单位

dp:是屏幕的物理尺寸,大小为1英寸的1/72

sp:与刻度无关的像素,与dp类似,但是可以根据用户的字体大小首选项进行缩放



线性布局:
gravity=""//文本内容如何对齐(右对齐)
layout_weight//指定在父容器中所占的(权重)比例,比例越大,显示的大小越大。按权重之和来划分父容器空间
orientation=""//子控件是水平排列还是垂直排列
框架布局:
框架布局是最简单的布局方式,所有添加到这个布局中的视图都是以层叠的方式显示,第一个添加到框架布局中的视图显示在最底层,最后一个被放在最顶层,上一层的视图会覆盖下一层的视图,因此,框架布局类似堆栈布局
marginTop//外边距离顶部的距离(在FrameLayout中结合gravity一起用)
visibility//是否可见,invisible与gone的区别:invisible的控件还占着位置(隐藏),gone表示不占位置(移除)
foreground属性//设置绘制在所有子控件之上的内容

foregroundGravity属性//设置绘制在所有子控件之上内容的对齐属性

Toast.makeText(MainActivity.this,"刷新完成",Toast.LENGTH_SHORT).show();



相对布局:
控件的位置相对兄弟控件或父容器而定
layout_below=“@id/” //在某元素的下方
layout_above= //在某元素的上方
layout_toLeftOf= //在某元素的左边

layout_toRightOf=//在某元素的右边

alignTop属性//与给定ID控件的顶部对齐

layout_centerHorizontal//水平居中

layout_alignParentTop属性//对齐父容器的顶部

ignoreGravity属性//忽略哪个子控件元素不受gravity属性的影响



表格布局(TableLayout):

每一行为一个TableRow,TableRow可以添加子控件,每添加一个为一列。

colapseColumns属性//设置指定列号的列为是否隐藏
shrinkColumns属性//设置指定的列号的列的宽度是否可进行收缩,这样当内容过多时不会被挤出屏幕
stretchColumns属性//设置指定列号的列的宽度是否可进行拉伸,以填满剩下的多余的空白空间。



view:
用代码创建控件:
View _view=View.inflate(this,R.layout.main_activity_layout)
TextView _textView=new TextView()
LayoutParams _layoutParam=new LayoutParams()//控件的属性,如宽、高
_textView.setLayoutParams()//
_view.addView(_textView)
setContentView(_view)



textView:
相当于c#中的label
autoLink=""//产生连接的效果
_textView.setMovementMethod(LinkMovementMethod.getInstance())
TextView通常用来显示普通文本,但是有时候需要对其中的某些文本进行样式、事件方面的设置。android系统通过SpannableString类进行相关处理
SpannableString _spanStr=new SpannableString()
_spanStr.setSpan(new ClickableSpan()
{
onclick()
{
逻辑处理区域
}
}
,start,end,flag)
_textView.setMovementMethod(linkMovementMethod.getInstance())
singleLine属性//文字单行显示
ellipsize属性//文字太多时怎么显示,省略号在前或后,或滚动(滚动时此控件必须具有焦点,所以为了当焦点被其他控件占有时仍具有滚动效果,可以创建一个MyTextView的类继承TextView,然后重载isFocused(),让其返回true),然后在布局中使用自己定义的MyTextView
focusable属性//是否能够具有焦点(能够具有焦点不代表此时有焦点)
focusableInTouchMode属性//在触摸模式时具有焦点



EditText:
    editText继承与textView,所以textView能做的事editView都能做
    digits属性//限定editText只能输入哪些字符
    inputType属性//同上
    _editText.setError()//设置错误信息

    TextUtils.isEmpty()//判断文本子串是否为空

    hint属性:当没有文字时默认显示的提示语

   BitmapFactory.decodeResource(getResource(),R.drawable.image)  //得到Bitmap图像的对象

AutoCompleteTextView:
    具有自动匹配的效果。

    用法:创建一个ArrayAdapter适配器,在适配器中用layout布局文件和数据源绑定,layout布局文件中必须包含TextView节点,数据源是个数组

        _autoCompleteTextView.setAdapter();//适配器中包含数据源



button:

获取屏幕尺寸:getWindow().getWindowManager().getDefaultDisplay().getWidth()//屏幕宽

OnClickListener类//点击监听器

OnTouchListener类//触摸监听器,// MotionEvent.ACTION_UP==event.getAction()

OnFocusChangeListener类//焦点改变监听器

OnKeyListener类//键盘监听器  // KeyEvent.ACTION_DOWN==event.getAction()

drawableTop="@drawable/a.jpg"//图片在文字的上面
drawablePadding="";//图片与文字的距离
SpannableString _spannableString=new SpannableString();
ImageSpan _imageSpan=new ImageSpan(BitmapFactory.decodeResource().R.drawable.myImage);
_spannableString.setSpan(_imageSpan,)
alignParentRight=//与父容器的右边对齐


margin:外边框
padding:内边框
border:边框



radioButton:
如果想radioButton在选中后其他radioButton处于未选中状态,则将这几个应该互斥的radioButton放在RadioGroup中(多选一的效果)



toggleButton:
表示2中状态的按钮,有checked属性,textOn,textOff属性
setOnCheckedChangeListener()//checked属性改变时发生调用
在代码中用指定的资源id创建一个View:CheckBox _checkBox=View.inflate(this,R.layout.ui_checkBox,null)

SeekBar:
值可以通过拖动的方式调节,比如像调节音量那样
onSeekBarChangeListener()类
onProgressChanged()//进度值发生改变时调用

onStartTrackingTouch()//开始拖动时调用

thumb属性//自定义滑块图形



ImageView:
主要是用来显示图片的控件
scaleType//怎么填充图片,比如拉伸,重复填充等
fitCenter//图片按View的比例缩放
DisplayMetrics _displayMetrics=new DisplayMetrics();
GetWindowManager().getDefaultDisplay().getMetrics(_displayMetrics)//获取屏幕量度(像素宽,高等)
Matrix.setRotate()//设置图片旋转角度。matrix是对图片进行处理的类
URL类//可以从网络上请求资源
HttpURLConnection类//通过Http协议连接URL表示的资源
_url.openConnection()//创建一个到url的连接
_connection.setDoInput(true)//能够获取服务器的响应内容
_connection.setRequestMethod("GET")//HTTP请求方式
_connection.getResponseCode()//获取响应状态码
InputStream _is=_connection.getInputStream()//获取输入流,用于读取响应内容



datePicker和timePicker:
DatePickerDialog和timePickerDialog:
日期时间控件
onDateChangeListener//日期改变监听器
onTimeChangeListener//时间改变监听器



AnalogClock和DigitalClock:
时钟控件
dial属性//表盘



ProgressBar:
进度条
style属性



RatingBar

评分控件(5个五角星)



Gallery控件

一般是用于显示图像列表,支持水平滑动效果,向左向右滑动,直到显示到最后一个图像为止



Spinner:
下拉列表控件
_spinner.setSpinner(_apater)//_apater绑定了数据源
setOnItemSelectedListener()//列表项监听器



ImageSwitch:

图片切换控件
setFactory()
setImageResource()
setAnimation(AnimationUtils.loadAnimation(R.anim.1123.xml))


ScrollView:

垂直滚动控件(只支持垂直滚动),只能包含一个控件,一般是包含LinearLayout控件

scrollBars//属性,可以去掉右边的滚动条效果




HorizontalScrollView:
水平滚动控件(只能包含一个控件),一般是包含linearLayout控件



include:
静态加载

可以在当前布局文件中引用其他的布局文件:<include   layout="@layout/title"



ViewStub:
动态加载,需要的时候才会加载到内存中
在当前布局文件中加载其他布局文件
_viewStub.inflate()//加载viewStub中引用的布局



Raw:
存放声音文件的目录(自行创建)

MediaPlayer类//媒体播放器

    graviry:
         gravity属性:设置线性布局内部元素的布局方式
       (自己理解:设置元素在父控件中的布局方式)
     自定义颜色资源:
           在res下的values下创建colors.xml文件



TabHost

标签控件,相当于c#中的TabControl

如果在屏幕上要放置很多的控件,可能一个屏幕放不下,除了使用滚动视图的方式外,还可以使用标签控件TabHost对屏幕进行分页显示,当单击不同的标签页时,会显示当前标签下的内容

TabHost是标签控件的核心类,也是一个标签的集合,每一个标签是TabHost.TabSpec对象,通过TabHost类的addTab方法添加多个TabSpec对象

OnTabChangedListener//标签页改变监听器




ListView控件:

  ArrayAdapter, SimpleAdapter,BaseAdapter,

  BaseAdapter:

    可以和ListView,GridView一起使用

    BaseAdapter//基础适配器,可以自定义自己的LisView每项布局
要实现getCount,getItem,getItemId,getView方法。
@Override
        public View getView(int i, View view, ViewGroup viewGroup) {
           View _itemView= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout1,null);
            TextView _itemViewName=(TextView) _itemView.findViewById(R.id.name);
            _itemViewName.setText(_list.get(i));
            return  _itemView;
        }



ExpandableListView控件:

    可展开的ListView控件(效果个c#中的treeView相似),使用和ListView相似,只是适配器用ExpandableAdapter(SimpleExpandableListAdapter,BaseExpandableListAdapter)。

@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
    View _view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout1,null);
    TextView _tvOutItemTitle=(TextView) _view.findViewById(R.id.name1);
    _tvOutItemTitle.setText(_strOutItemTitle[i]);
    return _view;
}

    效果:

   




GridView控件:

     网格控件

 

 继承BaseAdapter类,实现其中的4个方法:getCount(),getItem(),getItemId(),getView()。在这4个方法中关联数据源(List <自定义类对象 >   _dataSource )   

   getView() 方法中LayoutInflater.from(viewGroup.getContext() ).inflate( R.layout.mylayout1)的mylayout1布局表示的是每一个项。




ViewPager控件:

    分页控件。

    创建一个布局文件,表示要用LayoutInflater.from()实例化的每个页。
用LayoutInflater.from(this).inflate()实例化后用List装起来当做PagerAdapter适配器的数据源。
然后重载PaterAdapter方法:_viewPager.SetAdapter(new PagerAdapter();
必须实现的PagerAdapter的两个方法:
instantiateItem(){container.addView(_listView.get(position));  return _listView.get(position)}
destroyItem(){container.remove(_listView.get(position))}

并且:

isViewFromObject(view,object){ return view==object }
OverScrollMode属性//去掉过度滑动时出现的阴影效果



menu控件:

当我们按下menu的硬件按钮时,OptionMenu将会被触发显示。

menu有两种形式:OptionMenu(用的多)和ContextMenu(用的少)

要创建OptionMenu,则可以在每个Activity类中的重载OnCreateOptionMenu(Menu  _menu)

        1,、{ _menu. add("菜单1");_menu . add("菜单2");return  true;}

        2、或者在res下创建一个menu文件夹,然后创建一个menu resource file的xml文件,然后在OnCreateOptionMenu()函数中用new  MneuInflater(this) . inflate(R.menu .              myMainMenu , _menu)

        并且可以给每个菜单项添加点击事件:OnOptionItemSelected(MenuItem _item)

       { if ( _item.getTitle() . equals("菜单1"))}



PopupWindow控件:

    popupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮爱当前activity之上的,位置可以随意。

    创建方式:创建一个layout布局文件,然后在代码中用View _view = LayoutInflater.from(this). inflate(R.layout.myPopupWindowLayout,null);

    然后PopupWindow  _popupWindow =new  PopupWindow(_view , WindowManager. LayoutParams. WRAP_CONTENT,     WindowManager.LayoutParams.WRAP_CONTENT);

_popupWindow.setBacngroundDrawable(new BitmapDrawable());

_popupWindow.setFocusable(true);//使弹出框不为阻塞状态

_popupWindow.setBackgroundDrawable(new BitmapDrawable());

  然后可以用_popupWindow.showAsDropdown(v);使其显示出来

_popupWindow.dismiss();//使弹出框消失

使_popupWindow显示在中间:_popupWindow.showAtLocation(MainActivity.this.getWindow().getDecorView(),Gravity.CENTER,0,0);

MainActivity.this.getWindow().getDecorView();//得到mianActivity的布局视图对象。



Fragment控件:

   中文意思:碎片的意思
Activity与Fragment的关系:房子与房间的关系
创建步骤:

1、静态方法:

创建一个CMyFragment类继承系统的Fragment类(v4包下的类),然后重载View OnCreateView(LayoutInflater _inflater,@Nullable ViewGroup     container,@Nullable Bundle savedInstanceState)
{View _view=_inflater.inflate(R.layout.myFragmentLayout);return _view}。
myFragmentLayout是创建的xml布局文件,表示这个fragment视图。
Fragment和Activity关联:在Activity的xml布局文件中添加fragment节点,并且必须指定id,不然会报错,然后name属性指定一个包名和类名表示的继承自系统的Fragment的自己定义的Fragment类

同时MainActivity也要继承v4包下的FragmentActivity

 2、动态方法:

   添加:

   创建一个CMyFragment类继承系统的Fragment类(v4包下的类),然后重载View OnCreateView(LayoutInflater _inflater,@Nullable ViewGroup     container,@Nullable Bundle savedInstanceState)
{View _view=_inflater.inflate(R.layout.myFragmentLayout);return _view}。
myFragmentLayout是创建的xml布局文件,表示这个fragment视图。
Fragment布局文件中的Fragment节点下必须指定id,不然会报错。

Fragment和Activity关联:在Activity的xml布局文件中添加一个FrameLayoutt节点,此时FrameLayout节点表示在Activity中的占位,通过代码会将Fragment视图设置到这个占位元素上面,在代码中如下设置:下图中的ft . replace表示替换,还有add表示增加,remove表示移除。。同时MainActivity也要继承v4包下的FragmentActivity


Fragment与Activity的通讯:

1、可以在继承Fragment的类中提供给外部调用的方法,方法中可以通过getView()获取这个Fragment关联的Layout布局View视图对象,然后就可以用这个View视图对象获取它上面的其他控件(_view. findViewById(R.id.xxx)),从而设置各值。

相反的过程,在继承的Fragment类中调用getActivity() 可以得到实例化这个Fragment类的Activity类对象,然后就可以用这个得到的activity对象更改activity的layout布局。

layout_weight属性//在父容器中所占的百分比



SwipeRefreshLayout控件:
下拉刷新控件,是V4包下的控件,执行刷新动作时可以在事件中添加代码,改变刷新后的显示内容。
在布局文件中要被刷新的控件如ListView要放置在SwipeRefreshLayout标签(控件)下面,并且一个SwipeRefreshLayout只能包含一个View控件
setOnRefreshListener(),设置下拉监听器,当用户下拉的时候回去回调
setColorSchemeColors(),设置进度条(那个旋转的框框)的颜色变化,最多4种
setProgressViewOffset(),调整进度条距离屏幕顶部的距离
setRefreshing(),设置SwipeRefreshLayout当前是否处于刷新状态,一般在请求数据的时候设置true,在数据加载到view中后设置为false
如果绑定到Adapter的数据源改变了,则应该用_adapter.notifyDataSetChanged();通知数据改变了

new  Handler(). postDelayed(new Runnable()  { @override   run(.....)},2000),此方法可以延时执行某个方法。




DrawerLayout控件:
v4包下的一个侧滑菜单控件,是一个容器控件,相当于ViewGroup控件
用法:内容第一个View为内容区域,第二个View为左侧菜单,第三个View为右侧侧滑菜单,第三个是可选的
注意:第一个View的宽高应当设置为match_parent,当然了,这也理所当然
第二,三个View需要设置layout_gravity="left"和layout_gravity="right",且一般高度设置为match_parent,宽度为固定值,即侧滑菜单的宽度




RecyclerView控件:
循环复用控件,提供了一种插拔式的体验

在build.gradle中的dependencies下添加compile 'com.android.support:recycleview-v7:23.4.0'
通过布局管理器LayoutManager控制其显示方式,通过ItemDecoration控制Item间的间隔,通过ItemAnimation控制Item增删的动画
RecyclerView有自己的适配器:RecyclerView.Adapter

如果修改了列表项的布局文件(xml文件)中的属性,则在onCreateViewHolder()中用View itemView=LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view , parent , false);






Shape:
可以定义控件的样式
用法:早Res下的drawable文件夹下创建根节点为shape的xml文件,然后指定shape的各种属性。
shape属性值:rectangle矩形,oval椭圆,line线,ring圆环
Solid纯色填充,通过android:color即可指定填充色
Stroke描边:width描边的宽度,color描边的颜色,dashWidth虚线的线段的宽度,dashGap虚线线段之间的间隔
corners表示shape四个角的角度
gradient表示渐变效果:type=  linear线性渐变,radial径向渐变,sweep扫描线渐变
控件和shape的关联:设置控件的background属性为drawable下的这个xml文件的shape



StateListDrawable:
状态选择器控件,它可以根据状态的不同为同一个图形更换不同的图片
在Item标签中设置属性,android:drawable属性时必须的,为当前控件指定资源,并且放置在其他属性之后。
用法:在Res下drawable文件夹下创建根节点为selector的xml文件
控件和StateListDrawable的关联:设置控件的background属性为drawable下的这个xml文件的StateListDrawable


Notification:
作用:Notification,俗称通知,是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知的具体内容
相关对象:
1、NotificationManager,是状态栏的管理者,负责发通知,清除通知等,是一个系统Server,必须通过getSystemService()方法获取:
NotificationManager _notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
2、Notification,是具体的状态栏通知对象,可以设置icon,文字,提示音,震动等等参数
用法:

PendingIntent:挂起的意图,可以看做是对Intent的包装,对于通知Notification来说,它是一个系统级的全局通知,并不确定这个意图被执行的时间(因为不知道啥时候才被用户点击这个通知)



主题和样式:
主题:Theme,是针对窗体级别的,改变Activity窗体的界面形式,它只能在application和activity标签下使用。
样式:style,是针对UI控件级别的,改变指定单个控件的界面形式
theme用法:
1、在Res下的values文件夹下的styles文件中添加自己的Style节点
2、在activity或application的theme属性中指定值,如android:theme="@style/myActivityTheme"
style用法:同上,只不过是在控件的style属性中指定,如style=“@style/myButtonStyle”


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐