Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> UI控件之顯示文本控件TextView(下)

UI控件之顯示文本控件TextView(下)

編輯:關於Android編程

(一)帶陰影的TextView
涉及到的幾個屬性:
這裡寫圖片描述
運行效果如下:
這裡寫圖片描述
實現代碼:

 

(二)帶邊框的TextView:
這裡寫圖片描述
簡單說下shapeDrawable資源文件的幾個節點及其屬性:
這裡寫圖片描述
運行效果:
這裡寫圖片描述
實現代碼:
1)編寫矩形邊框的Drawable




    
    
    
    
    
    

2)編寫圓角邊框的Drawable




    
    

    
    
    
    
    
    

3)將TextView的backGround屬性設置為這倆個Drawable



    

    


(三)帶圖片(drawableXxx)的TextView:
在實際的開發中,我們可能會遇到這種需求:
這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述
實現思路:
這裡寫圖片描述

運行結果:

這裡寫圖片描述

o(╯□╰)o,摳圖狗也是盡力了~~~~原理就是那麼回事兒
實現代碼:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">

這裡寫圖片描述
代碼如下:

package com.example.android_textview2;

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.TextView;


public class MainActivity extends Activity {

    private TextView textView5;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.we_chat);
        //獲取到“微信”的ID
        textView5 = (TextView) findViewById(R.id.textView5);
        Drawable[] drawables = textView5.getCompoundDrawables();
        //數組下標0~3,依次是:左上右下
        drawables[1].setBounds(100, 0, 200, 200);
        textView5.setCompoundDrawables(drawables[0], drawables[1], drawables[2], drawables[3]);


    }
}

運行效果如下:
這裡寫圖片描述

代碼分析:
1)Drawable[] drawables = textView5.getCompoundDrawables();
這裡寫圖片描述
2)drawables[1].setBounds(100, 0, 200, 200);
這裡寫圖片描述
3) textView5.setCompoundDrawables(drawables[0], drawables[1], drawables[2], drawables[3]);
這裡寫圖片描述
這裡寫圖片描述

(四)SpannableString&SpannableStringBuilder定制文本
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
運行效果:
這裡寫圖片描述

實現代碼:

package com.example.android_textview2;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.BackgroundColorSpan;
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.view.ViewDebug.FlagToString;
import android.widget.TextView;


public class MainActivity2 extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.spanable_string_test);

        TextView tv1 = (TextView) findViewById(R.id.tv1);
        TextView tv2 = (TextView) findViewById(R.id.tv2);
        SpannableString span = new SpannableString("紅色打電話斜體刪除線綠色下劃線圖片:.");
        //1.設置背景色,setSpan時需要指定的
        //flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括)
       span.setSpan(new BackgroundColorSpan(Color.YELLOW),
               0 , 2 ,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
       //2.使用鏈接標記文本
       span.setSpan(new URLSpan("tel:12366585225"), 
               2, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
       //3.用樣式標記文本(斜體)
       span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC),
               5, 7, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
       //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),
               0 , 2 ,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
       //7.獲取Drawable資源
       Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
       drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

       //8.創建ImageSpan,然後使用ImageSpan來替換文本
       ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
       span.setSpan(imageSpan, 
               18, 19, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
                tv1.setText(span);

    }
}

(五)實現部分可點擊的TextViwe,即點擊鏈接彈出Activity的效果;
相信這個大家很熟悉吧~~~
這裡寫圖片描述
下面我們來簡單地實現下這個效果:

package com.example.android_textview2;



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.SpannedString;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.text.style.ImageSpan;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity3 extends Activity {

    private TextView textView3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity2);
        //獲取到“微信”的ID
        TextView  tv3 = (TextView) findViewById(R.id.tv3);
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < 20; i++) {
            sBuilder.append("好友" + i+", ");
        }

        String  likeUsers = sBuilder.substring(0,
                sBuilder.lastIndexOf(", ")).toString();
        //tv3.setText(addClickPart(likeUsers), TextView.BufferType.SPANNABLE);
        tv3.setText(addClickPart(likeUsers), TextView.BufferType.SPANNABLE);
    }

    //定義一個點擊每個部分文字的處理方法
    private SpannableStringBuilder addClickPart(String str) {
        //贊的圖標
        ImageSpan imageSpan = new ImageSpan(MainActivity3.this, R.drawable.mren);
        SpannableString spanStr = new SpannableString("p.");
        spanStr.setSpan(imageSpan, 
                0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //創建一個SpannableStringBuilder對象,連接多個字符串
        SpannableStringBuilder ssBuilder = new SpannableStringBuilder(spanStr);
        ssBuilder.append(str);
        String[] likeUsers=str.split(", ");
        if (likeUsers.length > 0) {
            for (int i = 0; i < likeUsers.length; i++) {
                final String name =likeUsers[i];
                int start = str.indexOf(name) + spanStr.length();
                ssBuilder.setSpan(new ClickableSpan() {

                    @Override
                    public void onClick(View widget) {
                        // TODO Auto-generated method stub
                        Toast.makeText(MainActivity3.this, name, Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void updateDrawState(TextPaint ds) {
                        // TODO Auto-generated method stub
                        super.updateDrawState(ds);
                        //刪除下劃線,設置字體顏色為藍色
                        ds.setColor(Color.RED);
                        ds.setUnderlineText(false);
                    }

                }, start, start+name.length(), 0);
            }
        }


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

運行效果:
這裡寫圖片描述

(六)實現TextView跑馬燈效果:
運行效果:
這裡寫圖片描述

實現代碼:




    
    
    
    
    
    

    
    

java代碼:

package com.example.android_textview;

import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.widget.TextView;

public class TextViewTest_3 extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.text_view_test_3);
            TextView PMDTextView = (android.widget.TextView) findViewById(R.id.PMDTextView);
            String html = "中新網10月10日電 據外電報道,美國科學家羅伯特J。勒夫科維茲(Robert J. Lefkowitz)與布萊恩·K·卡比爾卡(Brian K. Kobilka)因在G蛋白偶聯受體方面的研究獲得2012年諾貝爾化學獎。";
            CharSequence charSequence = Html.fromHtml(html);
            PMDTextView.setText(charSequence);
            PMDTextView.setMovementMethod(LinkMovementMethod.getInstance());
        }
}

(七)設置TextView的字間距跟行間距
這裡寫圖片描述
這裡寫圖片描述

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