基本布局方式:LineearLayout (线性布局)
RelativeLayout (相对布局)
TableLayout (表格布局)
FrameLayout (帧布局)
参考文档:
file://D:\FProjects\FAndroid\FTools\androidSDK tools\android-sdk\docs\guide\topics\ui\layout\
LineearLayout (线性布局):按照垂直或水平方向依次摆放控件
RelativeLayout (相对布局):依据与父元素或同级元素的相对位置摆放控件
TableLayout (表格布局):与网页表格布局类似
FrameLayout (帧布局):后面的控件叠加显示在前面的控件之上
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时,第一次单击会得到焦点,第二次单击才会触发单击事件。
控件介绍:
显示文本的控件:
使用方法设置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());
使用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;
}
单击图像4的图像可以打开百度:
此外,还可以自定义单击连接打开的activity。
为指定文本添加前景色和背景色
/**
* 可以设置字体颜色和字体背景色
* @author Administrator
*textColor 字体颜色
*backgroundColor背景色
*/
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做背景图