Android 布局 & 一些控件

布局 & 一些控件







布局


LinearLayout 线性布局

  • 布局都在一条线上
  • android:orientation=”horizeontal/vertical”(水平(默认)/垂直)

TableLayout 表格布局

  • 类似于html里面的表格
  • 里面要分为一行一行 行内容

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上调用就好了” ^_^




控件属性

属性 效果
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)

图片要放在res/drawable*里面,@drawable/name 或 R.drawable.name调用

显示属性 效果
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() //被选中时为TRUE




Spinner 下拉框控件

直接赋予数据:android:entries=”@array/xllb”

//数据源
String[] xanr = getResources().getStringArray(R.array.xllb);    //获取res/values/strings.xml中的数组

//定义适配器
ArrayAdapter adapter = new ArrayAdapter(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, int which) {
        StringBuffer sb = new StringBuffer();
        for(int i=0; iif(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

http://www.114la.com/other/rgb.htm







你可能感兴趣的:(Android,Basics)