Android 布局 & 一些控件
来源:互联网 发布:淘宝营销手段 编辑:程序博客网 时间:2024/04/29 03:27
布局 & 一些控件
布局
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:horizontalSpacing=”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上调用就好了” ^_^
控件属性
TextView 文本控件
ImageView 图片控件
图片要放在res/drawable*里面,@drawable/name 或 R.drawable.name调用
ScrollView 滚动条控件
只能包裹一个控件/布局,让它具有垂直滚动条的功能
不建议和ListView一起使用?可能会导致多次刷新重绘
android:scrollbars=”none” | 设置滚动条显示,有以下设置none(隐藏),horizontal(水平),vertical(垂直)
CheckBox 单选框
checkbox.isChecked() //被选中时为TRUE
Spinner 下拉框控件
直接赋予数据: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_itemmySpinner.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, int 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对话框
//设置Viewfinal ImageView img = new ImageView(this);img.setBackgroundResource(R.drawable.my_anim); //设置背景资源AnimationDrawable r = (AnimationDrawable) img.getBackground(); //获取AnimationDrawabler.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()); } });
更具需求选择最合适的
属性值
颜色
http://www.114la.com/other/rgb.htm
1 0
- Android 布局 & 一些控件
- 一些关于android控件布局的小细节记录
- 有关Android控件以及一些布局的设计
- android之布局控件
- android布局控件隐藏
- android控件布局
- android控件大小布局
- Android 布局控件属性
- android基础控件,布局
- android 布局及控件
- Android布局常用控件
- android View控件布局
- Android布局控件LinearLayout
- Android布局控件属性
- android 控件布局
- Android布局控件属性
- Android控件布局
- Android布局控件
- opencv gpu cuda项目整理
- html开端
- Javascript 原型中的哲学思想 __proto__和prototype
- jQuery 对象与 JavaScript DOM 对象
- AsyncTask使用在哪些场景?它的缺陷是什么?如何解决?
- Android 布局 & 一些控件
- ubuntu设置超级用户的密码
- mac80211解析四
- 影响Redis性能的因素
- js实现手机端图片双指缩放变大变小插件
- 本体概述
- Spring Boot 之FilterRegistrationBean --支持web Filter 排序的使用
- 【lintcode笔记】两数组的交
- 整理ImageNet Classification with Deep Convolutional Neural Networks中的要点