你的位置:首页 > 操作系统

[操作系统]android基本控件学习


 一、TextView的讲解

《实例一》

<??><LinearLayout  ="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"                                      

《属性讲解》

  基本使用

    id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置,又或者使用RelativeLayout时,参考组件用的也是id!

    layout_width:组件的宽度,一般写:**wrap_content**或 者**match_parent(fill_parent)**,前者是控件显示的内容多大,控件就多大,而后者会填满该控件所在的父容器;当然也可以设 置成特定的大小,比如我这里为了显示效果,设置成了200dp。

    layout_height:组件的宽度,内容同上。

    gravity:设置控件中内容的对齐方向,TextView中是文字,ImageView中是图片等等。

    text:设置显示的文本内容,一般我们是把字符串写到string.

    textColor:设置字体颜色,同上,通过colors.

    textStyle:设置字体风格,三个可选值:**normal**(无效果),**bold**(加粗),**italic**(斜体)

    textSize:字体大小,单位一般是用sp!  

    background:控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片哦!

  带有阴影的TextView

    android:shadowColor:设置阴影颜色,需要与shadowRadius一起使用哦!

    android:shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0  

    android:shadowDx:设置阴影在水平方向的偏移,就是水平方向阴影开始的横坐标位置

    android:shadowDy:设置阴影在竖直方向的偏移,就是竖直方向阴影开始的纵坐标位置

 带有边框的TextView

  (1)没有圆角:在drawable目录下面定义shape类型的在TextView的background属性中使用

<??><shape ="http://schemas.android.com/apk/res/android">  <!--设置一个黑色宽度为5px的一个边框-->  <stroke android:color="#000000" android:width="5px"/>  <!--渐变-->  <gradient    android:angle="270"    android:endColor="#C0C0C0"    android:startColor="#FCD209"/>  <!-- 设置一一下边距-->  <padding    android:top="5px"    android:bottom="5px"    android:left="5px"    android:right="5px"/></shape>

(2)有圆角:在drawable目录下面定义shape类型的

 

<??><shape ="http://schemas.android.com/apk/res/android">  <!--设置一个黑色宽度为5px的一个边框-->  <stroke android:color="#000000" android:width="5px"/>  <!-- 设置边距-->  <padding    android:top="5dp"    android:bottom="5dp"    android:left="5dp"    android:right="5dp"/>  <!-- 设置一个透明背景色-->  <solid android:color="#87CEEB"/>  <!-- 设置圆角-->  <corners    android:bottomLeftRadius="50px"    android:bottomRightRadius="50px"    android:topLeftRadius="50px"    android:topRightRadius="50px"/></shape>

 

实例二:带有图片的TextView

<??><LinearLayout  ="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  android:gravity="center">  <TextView    android:id="@+id/text1"    android:layout_width="200dp"    android:layout_height="200dp"    android:gravity="center"    android:textSize="20sp"    android:background="#ccffee"    android:padding="3sp"    android:text="Android"    android:textColor="#cd0000"    android:textStyle="bold"    android:drawableTop="@mipmap/ic_launcher"    android:drawableBottom="@mipmap/ic_launcher"    android:drawableLeft="@mipmap/ic_launcher"    android:drawableRight="@mipmap/ic_launcher"    />  <LinearLayout    android:layout_width="match_parent"    android:layout_height="100dp"    android:layout_marginTop="50dp"    android:orientation="horizontal">    <TextView      android:id="@+id/text2"      android:layout_width="0dp"      android:layout_weight="1"      android:layout_height="match_parent"      android:gravity="center"      android:textSize="20sp"      android:background="#ccffee"      android:padding="3sp"      android:text="Android1"      android:textColor="#cd0000"      android:textStyle="bold"      android:drawableTop="@mipmap/ic_launcher"      />    <TextView      android:id="@+id/text3"      android:layout_width="0dp"      android:layout_weight="1"      android:layout_height="match_parent"      android:gravity="center"      android:textSize="20sp"      android:background="#ccffee"      android:padding="3sp"      android:text="Android2"      android:textColor="#cd0000"      android:textStyle="bold"      android:drawableTop="@mipmap/ic_launcher"      />    <TextView      android:id="@+id/text4"      android:layout_width="0dp"      android:layout_weight="1"      android:layout_height="match_parent"      android:gravity="center"      android:textSize="20sp"      android:background="#ccffee"      android:padding="3sp"      android:text="Android3"      android:textColor="#cd0000"      android:textStyle="bold"      android:drawableTop="@mipmap/ic_launcher"      />    <TextView      android:id="@+id/text5"      android:layout_width="0dp"      android:layout_weight="1"      android:layout_height="match_parent"      android:gravity="center"      android:textSize="20sp"      android:background="#ccffee"      android:padding="3sp"      android:text="Android4"      android:textColor="#cd0000"      android:textStyle="bold"      android:drawableTop="@mipmap/ic_launcher"      />  </LinearLayout></LinearLayout>

属性讲解:

drawableTop(上),drawableButtom(下),drawableLeft(左),drawableRight(右) 另外也可以使用drawablePadding来设置图片与文字间的间距!与此同时我们会发现在

 

import android.app.Activity;

 

 

  说明:all就是全部都包含,自动识别协议头~ 在Java代码中可以调用setAutoLinkMask(Linkify.ALL); 这个时候可以不写协议头,autolink会自动识别,但是还要为这个TextView设置: setMovementMethod(LinkMovementMethod.getInstance()); 不然点击了是没效果的!

实例四:TextView对html的支持

  说明:不是所有的html标签都支持,常用如下:

  • <font>:设置颜色和字体。
  • <big>:设置字体大号
  • <small>:设置字体小号
  • <i><b>:斜体粗体
  • <a>:连接网址
  • <img>:图片
package com.example.test3;//文字和链接import android.app.Activity;import android.os.Bundle;import android.text.Html;import android.text.method.LinkMovementMethod;import android.text.util.Linkify;import android.widget.TextView;public class MainActivity extends Activity {  private TextView textView1;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    textView1 = (TextView) findViewById(R.id.text1);//    定义html字符串    String s1 = "<font color='blue'><b>百度一下,你就知道~:</b></font><br>";    s1 += "<a href = 'http://www.baidu.com'>百度</a>";//    设置给TextView,需要调用Html.fromHtml()方法    textView1.setText(Html.fromHtml(s1));//    设置链接的类型,如果是all可以不写协议头,会自动识别    textView1.setAutoLinkMask(Linkify.ALL);//    在Java中调用链接,需要设置下面的方法,不然没有作用    textView1.setMovementMethod(LinkMovementMethod.getInstance());  }}

package com.example.test3;//图片import android.app.Activity;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.text.Html;import android.text.method.LinkMovementMethod;import android.text.util.Linkify;import android.widget.TextView;import java.lang.reflect.Field;public class MainActivity extends Activity {  private TextView textView1;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    textView1 = (TextView) findViewById(R.id.text1);    String s1 = "图片:<img src = 'ic_launcher'/><br>";    textView1.setText(Html.fromHtml(s1, new Html.ImageGetter() {      @Override      public Drawable getDrawable(String source) {        Drawable draw = null;        try {//          得到图片的位置          Field field = R.mipmap.class.getField(source);//          得到图片的id          int resourceId = Integer.parseInt(field.get(null).toString());//          得到图片          draw = getResources().getDrawable(resourceId);//          设置图片的大小          draw.setBounds(0, 0, draw.getIntrinsicWidth(), draw.getIntrinsicHeight());        } catch (Exception e) {          e.printStackTrace();        }        return draw;      }    }, null));  }}

实例四:SpannableString&SpannableStringBuilder定制文本

(1)首先SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的 特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来, 比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。所以,总而言之,SpannableString、 SpannableStringBuilder与String一样, 首先也是传字符串,但SpannableString、 SpannableStringBuilder可以对这些字符串添加额外的样式信息,但String则不行。

(2)注意:如果这些额外信息能被所 用的方式支持,比如将SpannableString传给TextView;也有对这些额外信息不支持的。对于不 支持的情况,SpannableString和SpannableStringBuilder就是退化为String类型,直接显示原来的String字 符串,而不会再显示这些附加的额外信息。

(3)它们的区别在于 SpannableString像一个String一样,构造对象的时候传入一个String,之后再无法更改String的内容,也无法拼接多个 SpannableString;而SpannableStringBuilder则更像是StringBuilder,它可以通过其append()方 法来拼接多个String:

(4)void setSpan (Object what, int start, int end, int flags)

函数意义:给SpannableString或SpannableStringBuilder特定范围的字符串设定Span样式,可以设置多个(比如同时加上下划线和删除线等),Falg参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动作,即是否对新插入的字符应用同样的样式。(这个后面会具体举例说明)

参数说明:

object what :对应的各种Span,后面会提到;
int start:开始应用指定Span的位置,索引从0开始
int end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。从下面的例子也可以看出来。
int flags:取值有如下四个
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式 
Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。
Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。

(5)对应的各种Object:

  • BackgroundColorSpan 背景色
  • ClickableSpan 文本可点击,有点击事件
  • ForegroundColorSpan 文本颜色(前景色)
  • MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
  • MetricAffectingSpan 父类,一般不用
  • RasterizerSpan 光栅效果
  • StrikethroughSpan 删除线(中划线)
  • SuggestionSpan 相当于占位符
  • UnderlineSpan 下划线
  • AbsoluteSizeSpan 绝对大小(文本字体)
  • DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。
  • ImageSpan 图片
  • RelativeSizeSpan 相对大小(文本字体)
  • ReplacementSpan 父类,一般不用
  • ScaleXSpan 基于x轴缩放
  • StyleSpan 字体样式:粗体、斜体等
  • SubscriptSpan 下标(数学公式会用到)
  • SuperscriptSpan 上标(数学公式会用到)
  • TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
  • TypefaceSpan 文本字体
  • URLSpan 文本超链接
(6)实例
import android.app.Activity;import android.graphics.Color;import android.graphics.Typeface;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.text.Spannable;import android.text.SpannableString;import android.text.Spanned;import android.text.style.ForegroundColorSpan;import android.text.style.ImageSpan;import android.text.style.StrikethroughSpan;import android.text.style.StyleSpan;import android.text.style.URLSpan;import android.text.style.UnderlineSpan;import android.widget.TextView;public class MainActivity extends Activity {  private TextView textView1;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    textView1 = (TextView) findViewById(R.id.text1);    SpannableString span = new SpannableString("红色打电话斜体删除线绿色下划线图片:.");    //1.设置背景色,setSpan时需要指定的flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)    span.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    //2.用超链接标记文本    span.setSpan(new URLSpan("tel:123456"), 2, 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);    //3.用样式标记文本(斜体)    span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    //4.用删除线标记文本    span.setSpan(new StrikethroughSpan(), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    //5.用下划线标记文本    span.setSpan(new UnderlineSpan(), 10, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    //6.用颜色标记    span.setSpan(new ForegroundColorSpan(Color.GREEN), 10, 13,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    //7.//获取Drawable资源    Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());    //8.创建ImageSpan,然后用ImageSpan来替换文本    ImageSpan imgspan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);    span.setSpan(imgspan, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);    textView1.setText(span);  }}

package com.example.test3;

实例五:跑马灯

<??><LinearLayout  ="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  android:gravity="center">  <TextView    android:id="@+id/txtOne"

实例六:行间距、字间距、自动换行(默认是自动换行)

<??><LinearLayout