Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android基本控件學習-----TextView,androidtextview控件

android基本控件學習-----TextView,androidtextview控件

編輯:關於android開發

android基本控件學習-----TextView,androidtextview控件


 一、TextView的講解

《實例一》

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"                                      
    android:orientation="vertical">
    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:background="#ccffee"
        android:padding="3sp"
        android:text="TextView的基本使用"
        android:textColor="#cd0000"
        android:text
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:layout_marginLeft="10dp"
        android:shadowColor="#F9F900"
        android:shadowDx="30.0"
        android:shadowDy="30.0"
        android:shadowRadius="3.0"
        android:text="帶陰影的TextView"
        android:textColor="#4A4AFF"
        android:textSize="30sp"
        android:text
        />
    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/txt_rectborder"
        android:padding="3sp"
        android:text="帶有邊框的TextView"
        android:textColor="#cd0000"
        android:text
        />
    <TextView
        android:id="@+id/text4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/txt_radiuborder"
        android:padding="3sp"
        android:text="帶有圓角邊框的TextView"
        android:textColor="#cd0000"
        android:text
        />
</LinearLayout>

《屬性講解》

  基本使用

    id:為TextView設置一個組件id,根據id,我們可以在Java代碼中通過findViewById()的方法獲取到該對象,然後進行相關屬性的設置,又或者使用RelativeLayout時,參考組件用的也是id!

    layout_width:組件的寬度,一般寫:**wrap_content**或 者**match_parent(fill_parent)**,前者是控件顯示的內容多大,控件就多大,而後者會填滿該控件所在的父容器;當然也可以設 置成特定的大小,比如我這裡為了顯示效果,設置成了200dp。

    layout_height:組件的寬度,內容同上。

    gravity:設置控件中內容的對齊方向,TextView中是文字,ImageView中是圖片等等。

    text:設置顯示的文本內容,一般我們是把字符串寫到string.xml文件中,然後通過@String/xxx取得對應的字符串內容的,這裡為了方便我直接就寫到""裡,不建議這樣寫!!!

    textColor:設置字體顏色,同上,通過colors.xml資源來引用,別直接這樣寫!  

    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類型的xml文件,在TextView的background屬性中使用

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="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類型的xml文件,在TextView的background屬性中使用

 

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="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:text
        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:text
            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:text
            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:text
            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:text
            android:drawableTop="@mipmap/ic_launcher"
            />
    </LinearLayout>
</LinearLayout>

屬性講解:

drawableTop(上),drawableButtom(下),drawableLeft(左),drawableRight(右) 另外也可以使用drawablePadding來設置圖片與文字間的間距!與此同時我們會發現在xml文件中不能設置圖片的的大小,這時我們需要在Java中實現

 

import android.app.Activity;import android.graphics.drawable.Drawable;
import android.os.Bundle;
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);
//        數組下標是0~3,依次是左上右下
        Drawable[] drawables = textView1.getCompoundDrawables();
//        設置上面圖片的大小
        drawables[1].setBounds(200,0,200,200);
//        給TextView是四個方向設置圖片也是左上右下,如果某個方向上面沒有圖片設置為null即可
        textView1.setCompoundDrawables(drawables[0],drawables[1],drawables[2],drawables[3]);
    }
}

 

實例三:使用autoLink屬性識別鏈接類型

當文字中出現了URL,E-Mail,電話號碼,地圖的時候,我們可以通過設置autoLink屬性;當我們點擊 文字中對應部分的文字,即可跳轉至某默認APP,比如一串號碼,點擊後跳轉至撥號界面!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="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="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:textSize="20sp"
        android:background="#ccffee"
        android:padding="3sp"
        android:text="百度http://baidu.com"
        android:autoLink="web"
        android:textColor="#cd0000"
        android:text
        />
    <TextView
        android:id="@+id/text2"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:textSize="20sp"
        android:background="#ccffee"
        android:padding="3sp"
        android:text="123456"
        android:autoLink="phone"
        android:textColor="#cd0000"
        android:text
        />
</LinearLayout>

 

  說明: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;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ImageSpan;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

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);
        StringBuffer sb = new StringBuffer();
        for(int i = 0;i < 20;i++){
            sb.append("好友" + i + ",");
        }
        String user = sb.substring(0,sb.lastIndexOf(",")).toString();
        textView1.setMovementMethod(LinkMovementMethod.getInstance());
        textView1.setText(addClickPart(user), TextView.BufferType.SPANNABLE);
    }

    private SpannableStringBuilder addClickPart(String str) {
//        定義點贊的圖標
        ImageSpan imgspan = new ImageSpan(MainActivity.this,R.mipmap.ic_launcher);
        imgspan.getDrawable().setBounds(0,0,imgspan.getDrawable().getIntrinsicWidth(),imgspan.getDrawable().getIntrinsicHeight());
        SpannableString ss = new SpannableString("p.");
        ss.setSpan(imgspan,0,1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
//        連接多個字符串
        SpannableStringBuilder ssb =  new SpannableStringBuilder(ss);
        ssb.append(str);
        String[] users = str.split(",");
        if(users.length > 0){
            for(int i = 0;i < users.length;i++){
                final String name  = users[i];
                final int start =str.indexOf(name) + ss.length();
                ssb.setSpan(new ClickableSpan() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this, name,
                                Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void updateDrawState(TextPaint ds) {
                        super.updateDrawState(ds);
                        //刪除下劃線,設置字體顏色為藍色
                        ds.setColor(Color.BLUE);
                        ds.setUnderlineText(false);
                    }
                },start,start + name.length(),0);

            }
        }
        return ssb.append("等" + users.length + "個人覺得很贊");
    }
}

實例五:跑馬燈

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="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"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="你整天說著日了狗日了狗,但是你卻沒有來,呵呵呵呵呵呵呵呵呵呵~"/>
</LinearLayout>

實例六:行間距、字間距、自動換行(默認是自動換行)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="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:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:singleLine="false"
        android:text="呵呵呵呵呵呵呵呵呵呵~~~~~~~~~~aaaaaa"
        android:maxLines="5"/>
    <!-- 字符間距-->
    <TextView
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:textScaleX="2.0"
        android:text="呵呵呵呵呵呵呵呵呵呵~~~~~~~~~~aaaaaa"/>
    <!-- 行間距lineSpacingExtra設置大小、lineSpacingMultiplier設置行的倍數默認是1。0-->
    <TextView
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:lineSpacingExtra="10dp"
        android:text="呵呵呵呵呵呵呵呵呵呵~~~~~~~~~~aaaaaa"/>
    <TextView
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:lineSpacingMultiplier="1.5"
        android:text="呵呵呵呵呵呵呵呵呵呵~~~~~~~~~~aaaaaa"/>
</LinearLayout>

 



 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved