Android 布局 & 一些控件
2017-02-20 23:15
232 查看
布局 & 一些控件
布局
LinearLayout 线性布局
布局都在一条线上android:orientation=”horizeontal/vertical”(水平(默认)/垂直)
TableLayout 表格布局
类似于html里面的表格里面要分为一行一行
<TableRow 行宽 行高> 行内容 </TableRow>
GridLayout 网格布局
布局属性:android:columnCount=”4” 每行四个网格
android:numColumns=”auto_fit” —–列数设置为自动
android:columnWidth=”90dp” —–每列的宽度,也就是Item的宽度
android:stretchMode=”columnWidth” —–缩放与列宽大小同步
android:verticalSpacing=”10dp” —–垂直边距
android:ho
4000
rizontalSpacing=”10dp” —–水平边距
控件属性:
android:layout_gravity=”fill” 只有这个 (默认占一个网格大小)
android:layout_rowSpan=”2” 占竖两个网格
android:layout_columnSpan=”2” 占横两个网格
RelativeLayout 相对布局
控件与控件之间的位置都是相对放置的android:layout_centerHorizontal=”true” 水平方向居中
android:layout_centerVertical=”true” 垂直方向居中
android:layout_centerInParent=”true” 居中对齐
android:layout_alignParentTop=”true” 与父窗体顶部对齐
android:layout_alignParentBottom=”true” 与父窗体底部对齐
android:layout_alignParentRight=”true” 与父窗体右对齐
android:layout_alignParentLeft=”true” 与父窗体左对齐
android:layout_toRightOf=”控件ID” 在指定控件的右边
android:layout_toLeftOf=”控件ID” 在指定控件的左边
android:layout_=above=”控件ID” 在指定控件的上边
android:layout_below=”控件ID” 在指定控件的下边
android:layout_alignBaseline=”控件ID” 与指定控件水平对齐
android:layout_alignLeft=”控件ID” 与指定控件左对齐
android:layout_alignRight=”控件ID” 与指定控件右对齐
android:layout_alignTop=”控件ID” 与指定控件顶部对齐
android:ayout_alignBottom=”控件ID” 与指定控件底部对齐
FrameLayout 帧布局
div标签,每一层都是互相覆盖的类似一个背景,,在上面放几个按钮
AbsloteLayout 绝对布局
需要指定每个控件相对屏幕的绝对位置(android:layout_x,android:layout_y)
一些控件
Android:OnClick=”在显示的Activity上调用就好了” ^_^控件属性
属性 | 效果 |
---|---|
android:id=”@+id/txt1” | 控件ID |
android:layout_width=”wrao_content” | 控件宽度 |
android:layout_height=”wrap_content” | 控件高度 |
android:layout_weight=”1” | 权重(要求把要设置权重的高/宽度设置为0dp)(如果三个控件都设置为1,那么每个控件1/3/如果一个为2,两个为1,,则2的占2/4,1的占1/4) |
android:gravity=”center” | 内部内容居中 |
android:layout_gravity=”center” | 外部相对居中 |
android:layout_margin=”10dp” | 外边距 上下左右 |
android:layout_marginLeft | 左外边距 |
android:layout_marginRight | 右外边距 |
android:layout_marginTop | 顶外边距 |
android:layout_marginBottom | 底外边距 |
android:padding | 内边距 同上 |
android:visibility=”gone” | 隐藏控件 (visible可见/invisible不可见,代码:控件.setVisibility(View.GONE/VISIBLE) |
android:scrollbars=”none” | 设置滚动条显示,有以下设置none(隐藏),horizontal(水平),vertical(垂直) |
android:clickable=”true” | 接收单击事件 很好用 |
TextView 文本控件
属性 | 效果 |
---|---|
android:text=”文本内容” | |
android:textAppearance=”?android:attr/textAppearanceLarge” | 字体样式(?表示系统是否有这种外观,否则使用默认的 textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmal ) |
android:textColor=”@color/red” | 字体颜色”#0000ff” |
android:textSize=”35sp” | 字体大小 |
android:textScaleX | 设置文字之间间隔,默认为1.0f |
android:password=”true” | 密码* |
android:textStyle | 设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“ |
android:hint=”请输入对象” | 提示语 |
android:textColorHint | 设置提示信息文字的颜色hint的颜色 |
android:autoLink | 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选(none/web/email/phone/map/all) |
android:linksClickable | 设置链接是否点击连接 |
android:textColorLink | 文字链接的颜色 |
android:capitalize | 设置英文字母大写类型 |
android:digits | 设置允许输入哪些字符。如“1234567890.+-*/% ()” |
drawableTop | 在text上方输出一个drawable,如图片、颜色 |
android:drawableBottom | 在text下方输出一个drawable |
android:drawableLeft | 在text左边输出一个drawable |
android:drawableRight | 在text右边输出一个drawable |
android:drawablePadding | 设置text与drawable(图片)的间隔 |
android:editable | 设置是否可编辑 |
android:ellipsize | 设置当文字过长时,该控件该如何显示(start省略号显示在开头/end省略号显示在结尾/middle省略号显示在中间/marquee以跑马灯的方式显示(动画横向移动) |
android:maxLength | 限制显示的文本长度 |
android:lines | 设置文本的行数 |
android:maxLines | 设置文本的最大显示行数 |
android:phoneNumber | 设置为电话号码的输入方式 |
android:numeric | 如果被设置,该TextView有一个数字输入法 |
android:shadowColor | 指定文本阴影的颜色,需要与shadowRadius一起使用 |
android:shadowRadius | 设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好 |
android:shadowDx | 设置阴影横向坐标开始位置 |
android:shadowDy | 设置阴影纵向坐标开始位置 |
android:singleLine | 设置单行显示 |
ImageView 图片控件
属性 | 效果 |
---|---|
android:src=”@drawable/cc” | 设置图片(不用扩展名) |
imgageview.setImageResource(R.drawable.图片ID) | 设置图片 |
android:scaleType=”centerInside” | 设置图片怎样显示(即ImageView.setScaleType) |
显示属性 | 效果 |
---|---|
CENTER | 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示 |
CENTER_CROP | 按比例扩大显示到布满View |
CENTER_INSIDE | 按比例缩放显示到布满View |
FIT_CENTER | 按比例扩大/缩小到View的宽度 |
FIT_END | 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置 图片靠右显示 |
FIT_START | 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置 图片靠左显示 |
FIT_XY | 不按比例扩大/缩小到布满View |
MATRIX | 用矩阵来绘制 |
ScrollView 滚动条控件
只能包裹一个控件/布局,让它具有垂直滚动条的功能不建议和ListView一起使用?可能会导致多次刷新重绘
android:scrollbars=”none” | 设置滚动条显示,有以下设置none(隐藏),horizontal(水平),vertical(垂直)
CheckBox 单选框
checkbox.isChecked() //被选中时为TRUESpinner 下拉框控件
直接赋予数据:android:entries=”@array/xllb”//数据源 String[] xanr = getResources().getStringArray(R.array.xllb); //获取res/values/strings.xml中的数组 //定义适配器 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,xanr); //适配器设置下拉列表下拉时的菜单样式 adapter.setDropDownViewResource(android.R.layout.select_dialog_singlechoice); //android.R.layout.simple_spinner_dropdown_item mySpinner.setAdapter(adapter); //设置,捆绑数据 mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { //选项改变时 @Override public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { TextView txtView = (TextView) mySpinner.getSelectedView(); //获取选择界面中的文本框信息 Toast.makeText(MainActivity.this, txtView.getText().toString()+"-"+arg2, Toast.LENGTH_LONG).show(); } public void onNothingSelected(AdapterView<?> arg0) { //没有选择 } });
Builder 对话框
普通对话框
Builder builder = new Builder(this); builder.setTitle("标题"); builder.setNegativeButton("取消", null); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) //按下确定执行 } }); builder.show();
单选对话框
AlertDialog.Builder builder = new Builder(this); builder.setTitle("请选择(单选)"); final String items[] = {"A", "B", "C", "D"}; builder.setSingleChoiceItems(items, -1, new OnClickListener() { //选项切换监听 (-1::默认不选中任何项) @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "你选择了:"+items[which], 0).show(); //dialog.dismiss();//关闭对话框 } }); builder.setNegativeButton("取消", null); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "已提交", 1).show(); } }); builder.show();
多选对话框
AlertDialog.Builder builder = new Builder(this); builder.setTitle("请选择(多选)"); final String items[] = {"A", "B", "C", "D"}; final boolean[] checkedItems={true,true,false,false}; //初始状态 是否被选中 builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { //Toast.makeText(MainActivity.this, "你选择了 "+item, 1).show(); } }); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, i cc66 nt which) { StringBuffer sb = new StringBuffer(); for(int i=0; i<checkedItems.length; ++i){ if(checkedItems[i]) sb.append(items[i]+" "); } Toast.makeText(MainActivity.this, "已提交数据:" + sb.toString(), 0).show(); } }); builder.show();
进度条对话框
/* 与进度相关的都可以在子线程更新UI */final ProgressDialog dialog = new ProgressDialog(this); dialog.setTitle("加载中..."); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//进度条样式 很多自带样式 dialog.show(); new Thread(){ public void run(){ dialog.setMax(100); //设置进度条最大值 for(int i=0; i<=100; ++i){ dialog.setProgress(i); //设置进度条进度 SystemClock.sleep(10); //睡眠10毫秒 } dialog.dismiss(); //关闭进度条对话框 //线程中修改UI MainActivity.this.runOnUiThread(new Runnable(){ @Override public void run(){ Toast.makeText(getApplicationContext(), "加载成功", 0).show(); } }); }; }.start();
View对话框
//设置View final ImageView img = new ImageView(this); img.setBackgroundResource(R.drawable.my_anim); //设置背景资源 AnimationDrawable r = (AnimationDrawable) img.getBackground(); //获取AnimationDrawable r.start(); //开始动画 /*//4.0以下低版本兼容写法 new Thread(){public void run(){ SystemClock.sleep(20); //等待一点时间,让系统识别动画 AnimationDrawable r = (AnimationDrawable) img.getBackground(); //获取AnimationDrawable r.start(); //开始动画 };}.start();*/ //部署对话框 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("嘿嘿嘿"); builder.setView(img); builder.setPositiveButton("Close", null); builder.show();
ProgressDialog 对话框
http://blog.csdn.net/caesardadi/article/details/11982721在代码中更改布局
加载布局 这样写到时候可以直接改布局文件,增加或者减少item都行
view = View.inflate(context, R.layout.fragment_abc, null);
获取/设置控件的宽和高
onCreate()里面获取控件的高宽都是0方法零
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); //宽高 lp = 控件.getLayoutParams(); lp.width=100; lp.height=200; lp.gravity = Gravity.CENTER; lp.setMargins(10,10,10,10); //左上右下 lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); //还可以这样添加规则: lp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 控件.setLayoutParams(lp);
方法一 一般 重绘几次
int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); imageView.measure(w, h); int height =imageView.getMeasuredHeight(); int width =imageView.getMeasuredWidth(); textView.append("\n"+height+","+width);
方法二 好点 重绘2、3次
ViewTreeObserver vto = imageView.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { int height = imageView.getMeasuredHeight(); int width = imageView.getMeasuredWidth(); textView.append("\n"+height+","+width); return true; } });
方法三 最好 重绘1、2次
ViewTreeObserver vto2 = imageView.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this); textView.append("\n\n"+imageView.getHeight()+","+imageView.getWidth()); } });
更具需求选择最合适的
属性值
Name | Capacity |
---|---|
wrap_content | 包裹内容(能多小多小) |
match_parent | 填充窗体(能多大多大) |
fill_parent | 填充窗体(能多大多大) |
Name | Ability |
px | 像素 |
dp | 根据像素密度(屏幕大小:分辨率) |
sp | 与dp类似,用于字体(可以根据系统设置调节大小) |
mm | 毫米 |
in | 英寸(1英寸=2.54厘米(约) |
pt | 1pt=1/72英寸=0.035厘米 |
颜色
电脑颜色 | bgr | 23C6FF |
---|---|---|
Android颜色 | rgb | FFC623 |
相关文章推荐
- 主题:三,android编码规范 & 常用布局 & 常用控件
- android面试题目大全<第一部分>,android基本的UI控件和布局文件知识
- Android中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shape有了大体的了解,稍作总结: 先看下面的代码: <shape>
- android编码规范 & 常用布局 & 常用控件
- (3)Android入门——android编码规范 & 常用布局 & 常用控件
- android编码规范 & 常用布局 & 常用控件
- 一些关于android控件布局的小细节记录
- 三,android编码规范 & 常用布局 & 常用控件
- 有关Android控件以及一些布局的设计
- Android开发:ListView控件:Your content must have a ListView whose id attribute is'android.R.id.list'
- 一些非常有用的Android Intent Action & android receiver
- 【Android】7.1 布局控件常用的公共属性
- android布局也好,框架也好总之xml中控件中的name属性对应类时,貌似必须跟类名完全相同?
- android代码中动态设置布局中控件的属性
- Android 中控件RecyclerView详解及实现瀑布流式布局
- Android布局(控件高度的确定)
- android:scaleType="matrix"布局文件加载图片时候的显示方式
- Android入门(2) 基本控件介绍、4种布局
- Android根据布局文件动态添加控件
- android:scaleType="matrix"布局文件载入图片时候的显示方式