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

(一)带阴影的TextView
涉及到的几个属性:
这里写图片描述
运行效果如下:
这里写图片描述
实现代码:

 <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="194dp"
        android:text="带阴影的TextView" 
        android:shadowColor="#0CCAFF"
        android:shadowRadius="3.0"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:textSize="30sp"
        android:textColor="#CB0FFF"/>

(二)带边框的TextView:
这里写图片描述
简单说下shapeDrawable资源文件的几个节点及其属性:
这里写图片描述
运行效果:
这里写图片描述
实现代码:
1)编写矩形边框的Drawable

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 设置一个粗细为2px的黑色边框 -->
    <stroke
        android:width="2px"
        android:color="#000000" />
    <!-- 设置渐变色 -->
    <gradient
        android:angle="270"
        android:endColor="#C0F0B0"
        android:startColor="#FCD209" />
    <!-- 设置一下边距 -->
    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp" />
</shape>

2)编写圆角边框的Drawable

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 设置透明背景色 -->
    <solid android:color="#52CEEB" />

    <!-- 设置一个粗细为2px的黑色边框 -->
    <stroke
        android:width="2px"
        android:color="#000000" />
    <!-- 设置4个圆角的半径 -->
    <corners
        android:bottomLeftRadius="10px"
        android:bottomRightRadius="10px"
        android:topLeftRadius="10px"
        android:topRightRadius="10px" />
    <!-- 设置一下边框 -->
    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp" />

</shape>

3)将TextView的backGround属性设置为这俩个Drawable

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.android_textview2.MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:textSize="20sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="129dp"
        android:background="@drawable/tv_rectborder"
        android:text="矩形边框的TextView" />

    <TextView
        android:id="@+id/textView2"
        android:textSize="20sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="97dp"
        android:background="@drawable/tv_radiusborder"
        android:text="圆角边框的TextView" />

</RelativeLayout>

(三)带图片(drawableXxx)的TextView:
在实际的开发中,我们可能会遇到这种需求:
这里写图片描述

这里写图片描述
这里写图片描述
实现思路:
这里写图片描述

运行结果:

这里写图片描述

o(╯□╰)o,抠图狗也是尽力了~~~~原理就是那么回事儿
实现代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:drawablePadding="10dp"
        android:drawableTop="@drawable/show1"
        android:gravity="center"
        android:text="微信" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/textView2"
        android:layout_marginLeft="50dp"
        android:drawablePadding="10dp"
        android:drawableTop="@drawable/show4"
        android:gravity="center"
        android:text=" 我    " />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/textView4"
        android:drawablePadding="10dp"
        android:drawableTop="@drawable/show2"
        android:gravity="center"
        android:text="通讯录" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginRight="30dp"
        android:layout_toLeftOf="@+id/textView2"
        android:drawablePadding="10dp"
        android:drawableTop="@drawable/show3"
        android:gravity="center"
        android:text="发现" />

</RelativeLayout>

这里写图片描述
代码如下:

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跑马灯效果:
运行效果:
这里写图片描述

实现代码:

<?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/PMDTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#FFFFFF"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:padding="10dp"
        android:singleLine="true"
        android:textColor="#000"
        android:textSize="20dp" >
    </TextView>

</LinearLayout>

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。<a href=#>;
            CharSequence charSequence = Html.fromHtml(html);
            PMDTextView.setText(charSequence);
            PMDTextView.setMovementMethod(LinkMovementMethod.getInstance());
        }
}

(七)设置TextView的字间距跟行间距
这里写图片描述
这里写图片描述

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

Android课程表的设计开发 - 2016-06-19 14:06:07

Android课程表的设计开发 导语 实现了教务系统中课程的导入,分类显示课程。学期的修改,增加,修改。课程按照周的显示。课程修改上课星期和上课周。上课课程的自动归类。 一、主要功能界面 开发过程 一开始因为毕设有关课程表的要求不明,主要就是利用jsoup拉取学校教务管理系统的课程数据进行课程表界面的填充显示,并不能课程的个性化调整。 后来重新调整了需求,参考了超级课程表的功能。重新设计了实体类,利用bmob移动端云作为爬取到的数据的数据服务器进行了重新的开发。 主要代码 1、课程实体类 package

BroadcastReceiver简介 - 2016-06-19 14:06:05

涉及到的内容 接收系统广播 发送自定义广播 无序广播 intent携带数据 有序广播 终止广播 修改广播数据 得到广播数据 指定最终广播接受者,即使被终止,也会受到 系统常用广播的配置 应用方面 拦截短信 串改短信内容 拦截电话 串改拨出的号码 特殊情况 (屏幕开关的事件) 代码注册 代码注销 BroadcastReceiver入门(一) 什么是广播接受者 BroadcastReceiver就是一台收音机 用来接收android系统发出的一些广播(不仅仅是系统发出的广播,我们也可自定义广播) 可以理解为系
iOS10 权限崩溃问题 每日更新关注 : http://weibo.com/hanjunqiang   新浪微博!         今天 手机升级了 iOS10 Beta,然后用正在开发的项目 装了个ipa包,发现点击有关 权限访问 直接Crash了,并在控制台输出了一些信息: This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's

图片处理的一些方法 - 2016-06-19 14:06:58

在请求网络时。我们经常会从服务端获取图片,下面我总结了一些图片的处理方法,希望能够帮助其他人 防止批量加载图片时出现OOM(OutOfMemory) 压缩图片 BitmapUtils 图片操作的工具类 //width 图片显示的宽度 height图片显示的高度 Bitmap loadBitmap(is, width, height){ } Android中图片缓存的实现 Java中的引用 1强引用 Strong References 就算出现OOM,Java虚拟机都不会销毁该引用。 2软引用 Soft R

Android初级教程图片信息 - 2016-06-19 14:06:58

对图片常规信息要了解其性质。图片大小、像素、位图等等概念总结如下: 图片在计算机中的大小 图片的总大小 = 图片的总像素 * 每个像素占用的大小(图片的总像素=像素尺寸也就是分辨率,例如设定800*400)(每个像素大小不相同)才导致图片总的大小不相同。 单色位图:只能表示2种颜色 使用两个数字:0和1 使用一个【长度为1】的二进制数字就可以表示了 每个像素占用1/8个字节 总大小=图片的总像素 * 每个像素占用的大小=320000/8=40000字节(查看图片信息与之基本匹配) 16色位图:能表示16种
最近项目有一个需求,需要多层可滑动控件的嵌套展示,demo效果如下,demo的下载地址在最后 咋一看好像挺简单啊,不就是一个ScrollView + ViewPager + ListView吗,我开始也这样觉得,也用的这种方式实现,结果始终和效果不对劲。这里总结几点问题: 两个或两个以上的滑动控件嵌套时,如果layout_height采用的是wrap_content会造成内部滑动控件的高度不能正确的计算,会导致内部滑动控件的高度始终为0,除非你用定值设置,比如300dp。 两个相同滑动方向的滑动控件嵌套,
Grand Central Dispatch简介 Grand Central Dispatch 简称 GCD 是苹果公司开发的技术,是对于多核编程的较新解决方案。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。 GCD 提供了一种很简单的操作方式来实现并行处理。你可以把你要的并发执行的代码放在一个block钟,然后把这个block加入到一个queue当中。 在GCD中为我们需要执行的block提供了3种队列: Main:这个队列顺序执行我们的block,并保证这些block都在主线程中执行。

[置顶] Android消息循环机制 - 2016-06-19 14:06:38

转载请注明出处: http://blog.csdn.net/crazy1235/article/details/51707527 Android的消息循环机制主要先关的类有: Handler Looper Message MessageQueue ActivityThread 实际上 应用程序启动的时候,会创建一个UI线程,然后该线程关联一个消息队列,相关操作封装一个个消息放入队列中,主线程会 不断循环 从队列中取出消息进行分发处理。 为什么用Handler 大家都知道,Android规定【访问UI只能在

命令行下Jar包打包小结 - 2016-06-19 14:06:37

jar包打包实现 第一种简单的打包方式 第二种打包方式 MANIFEST文件介绍 小结 jar包打包实现 jar包打包可以使用jar指令实现打包,在命令行中输入jar可以查看jar指令的内容 从最后显示的两个示例看出存在两种打包的方法,两者的区别就是是否使用自己定义的MANIFEST清单文件。第一个示例没有使用MANIFEST文件进行打包,所以最终生成的jar包中MANIFEST文件为默认文件,这种方式适用于比较简单的jar包结构,不存在其他jar包依赖以及生成的jar包不需要可执行。这种方式生成的jar
JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用 JAVA把完事万物都定义为对象,而我们想使用数据类型也是可以引用的 一.基本数据类型的对象包装类 左为基本数据类型,又为引用数据类型 byte Byte int Integer long Long boolean Booleab float Float double Double char Character 我们拿Integer来举例子 //整数类型的最