天天看点

Android 布局学习笔记

基本布局方式:LineearLayout (线性布局)

              RelativeLayout (相对布局)

              TableLayout (表格布局)

              FrameLayout (帧布局)

参考文档:

file://D:\FProjects\FAndroid\FTools\androidSDK tools\android-sdk\docs\guide\topics\ui\layout\

LineearLayout (线性布局):按照垂直或水平方向依次摆放控件

RelativeLayout (相对布局):依据与父元素或同级元素的相对位置摆放控件

TableLayout (表格布局):与网页表格布局类似

FrameLayout (帧布局):后面的控件叠加显示在前面的控件之上

所有可视控件都可以使用的XML属性:

Android:id :在R文件id下新增加名字为idname的资源,以后可以用名称idname来应用该控件。

android:id="@+id/idname"

在代码中使用

overlayView=(GestureOverlayView)this.findViewById(R.id.idname)

就可以找到该控件并赋给overlayView。

Android:layout_width

Android:layout_height

设置宽度和高度,单位建议用dp.

有两个经常用到的值:match_parent:填满父元素

wrap_content:包裹内容

Android:layout_marginLeft:设置左边距

Android:layout_marginRight:设置右边距

Android:layout_marginTop:设置上边距

Android:layout_marginBottom:设置下边距

Android:layout_margin:相当于上面四个一起使用,此标签比上面四个优先级高,设置完此标签,上面四个就失效了。

Android:padingLeft

Android:padingRight

Android:padingTop

Android:padingBottom

Android:pading  :用法同上,优先级比上面四个要高。设置内边距的标签。

Android:layout_weight:取值为任意正整数。为零表示控件保持原大小。假设有四个控件,第一个Android:layout_weight设为0,其余三个分别为1,2,3.则第一个按原大小显示,剩余空间被分成1+2+3=6等份,第二个占1份,第三个占2份,第四个占3份。

Android:gravity 控件中内容的位置

Android:layout_gravity: 控件的位置

可取的值:center_horizontal 水平居中,center_vertical 垂直居中,

Center 在水平和垂直都居中,left,right,top,bottom.

Android:visible 决定当前控件是否可见

可取的值:visible 可见,invisible 不可见,但是保留位置,相当于控件透明。,gone 不可见也不保留位置。

Android:background 设置背景色或者背景图像

Android:background=”#FF00FF” 设置背景色

Android:background=”@drawable/background” 设置背景图像

Android:onClick 指定单击该控件后响应该事件的方法名称。

Android:clickable 是否接受单击事件

Android:longClickable  是否接受长按单击事件

Android:focusable:是否可以将焦点移动到当前控件,使用鼠标或键盘

Android:focusableInTouchMode 是否可以触摸获得焦点,当为true时,第一次单击会得到焦点,第二次单击才会触发单击事件。

控件介绍:

1.TextView:

显示文本的控件:

使用方法设置TextView的属性:

TextView.setText

TextView.setTextColor

TextView.setTextBackGround

TextView.setTextSize

TextView.setLineSpacing(50,1.2f)  设置为50dp和1.2倍行间距较大的那一个值。

TextView.setEllipsize(TextUtils.TruncateAt.START) 在开始加省略号

使用XML属性设置属性:

设置行间距:

Android:lineSpacingExtra=”20dp”设置行间距为20dp

Android:lineSpacingMultiplier=”1.8” 设置行间距为行宽的1.8倍

设置省略号:

Android:ellipsize=”start|middle|end” 在前|中|后加省略号

文本水平滚动显示:

Android:ellipse=”marquee”

Android:marqueeRepeatLimit=”marquee_forever”  设置循环次数

Android:fousable=”true”

必须三项同时设置才行。

文本垂直滚动显示:

Android:scollbars=”vertical”

Android:text=”需要一段较长的文本”

Android:scollbarStyle=”outsideOverlay|insideOverlay”滚动条在右侧显示|滚动条在右侧文本上显示

Android:scollbarFadeDuration=”200”滚动条从出现到消失200ms

基本用法

<TextView 

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:gravity="center"

    android:textSize="16sp"

    android:textColor="#000099"  文本颜色

        android:id="@+id/textView"

        android:text="@string/phone"  显示的文本

    />

在代码中使用TextView.setText可以改变要显示的文本

显示富文本:

<font>设置颜色和字体

<big>设置大号字

<small>设置小号字

<i>斜体

<b>粗体

<tt>等宽字体

<br>换行

<p>换两行

<a>链接地址

<img>插入图像

富文本不能简单的使用TextView.setText改变显示的内容。具体做法如下:

TextView textView =(TextView) findViewById(R.id.textview);

String  html = "<font color='red'>十月一放假七天</font><br>";

html += "<font color='#00FF00'><big><i>十月一放假七天</i></big></font><p>";

html += "<font color='white' ><tt><b><big><u>十月一放假七天</u></big></b></tt></font><p>";

html += "<big><a href='http://www.baidu.com'>百度一下,你就知道</a></big>";

//此时html里面存的是一串字符

//将字符串转成CharSequence对象

CharSequence charSequence = Html.fromHtml(html);

//为TextView控件设置要显示的富文本

textView.setText(charSequence);

//设置单击链接时调用浏览器

textView.setMovementMethod(LinkMovementMethod.getInstance());

Android 布局学习笔记

显示表情和文字:

使用img标签可以引入图像,src指定要显示的图像,但是系统不会自动解析src指定的路径,需要用户使用ImageGetter对象的getDrawable方法。Src值的具体含义,需要早getDrawable方法中确定。

String html2 = "图像1<img src='image1'>";

html2 += "图像2<img src='image2'>";

html2 += "图像3<img src='image3'>";

html2 += "图像4<a href='http://www.baidu.com'><img src='image4'></a>";

CharSequence charSequence2 = Html.fromHtml(html2,new ImageGetter(){

public Drawable getDrawable(String source){

//装载图像资源

Drawable drawable = getResources().getDrawable(getResouseId(source));

//如果是image4,按原来大小的50%显示

if(source.equals("image4")){

drawable.setBounds(0,0,drawable.getIntrinsicWidth()/2,drawable.getIntrinsicHeight()/2);

}

//其余按原来大小显示

else{

//setBounds设置图像的显示区域,默认是0,也就是不会显示出来,所以必须设置。

drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());

}

return drawable;

}

}, null);

textView.setText(charSequence2);

textView.setMovementMethod(LinkMovementMethod.getInstance());

//自定义获取资源的方法,利用反射技术将     文件名  映射成资源  ID

public  int getResouseId(String name){

try{

//根据图像资源的文件名得到Field对象

Field filed = R.drawable.class.getField(name);

//取得并返回资源ID字段的值

return Integer.parseInt(filed.get(null).toString()) ;

}

catch(Exception e){

}

return 0;

}

Android 布局学习笔记

单击图像4的图像可以打开百度:

Android 布局学习笔记

此外,还可以自定义单击连接打开的activity。

为指定文本添加前景色和背景色

Android 布局学习笔记

public class ColorSpan extends CharacterStyle{

private int mTextColor;

private int mBackgroundColor;

public ColorSpan(int textColor,int backgroundColor){

mTextColor = textColor;

mBackgroundColor = backgroundColor;

}

public void updateDrawState(TextPaint tp) {

              tp.bgColor = mBackgroundColor;

              tp.setColor(mTextColor);

}

}

String html3 = "1234567890abcdefghijk";

//第一步,将字符串转换成SpannableString对象

SpannableString spannableString = new SpannableString(html3);

//第二部,确定子串的开始和结束位置

int start = 10;

int end = 16;

//第三步,创建BackgroundColorSpan对象

BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.YELLOW);

//第四步,使用setSpan方法将指定子串转换成backgroundColorSpan对象

spannableString.setSpan(backgroundColorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

ColorSpan colorSpan = new ColorSpan(Color.RED, Color.BLUE);

spannableString.setSpan(colorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

//第五步,用spannableString对象设置TextView对象

textView.setText(spannableString);

还可以在布局文件中指定显示富文本:

<string name="hello_world"><a href="tel:12345678">call me</a></string>

带边框的TextView:

方法1:编写一个继承TextView的类,实现onDraw方法。

方法2:用9-patch做背景图