• 一手遮天 Android


    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

    一手遮天 Android - view(文本类): TextView 常用行为

    示例如下:

    /view/text/TextViewDemo6.java

    /**
     * TextView - 文本显示控件
     *
     * 演示 TextView 的常用行为
     */
    
    package com.webabcd.androiddemo.view.text;
    
    import android.content.Intent;
    import android.graphics.Color;
    import android.net.Uri;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.Html;
    import android.text.TextWatcher;
    import android.text.method.LinkMovementMethod;
    import android.text.method.ScrollingMovementMethod;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.webabcd.androiddemo.R;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class TextViewDemo6 extends AppCompatActivity {
    
        private TextView _textView1;
        private TextView _textView2;
        private TextView _textView3;
        private TextView _textView4;
        private TextView _textView5;
    
        private Button _button1;
        private Button _button4;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_view_text_textviewdemo6);
    
            _textView1 = (TextView) findViewById(R.id.textView1);
            _textView2 = (TextView) findViewById(R.id.textView2);
            _textView3 = (TextView) findViewById(R.id.textView3);
            _textView4 = (TextView) findViewById(R.id.textView4);
            _textView5 = (TextView) findViewById(R.id.textView5);
    
            _button1 = (Button) findViewById(R.id.button1);
            _button4 = (Button) findViewById(R.id.button4);
    
            // 文本滚动
            sample1();
            // 可点击并跳转(通过 html 的超链接方式)
            sample2();
            // 可点击并跳转(通过监听 TextView 的点击事件的方式)
            sample3();
            // 监听 TextView 的文本变化事件
            sample4();
            // 文本的选中
            sample5();
        }
    
        private void sample1() {
            // 当文本显示不下时,允许滚动
            _textView1.setMovementMethod(ScrollingMovementMethod.getInstance());
    
            // 滚动到底部(由于滚动到底部需要计算文本内容的高度和文本框的高度,所以需要等 TextView 绘制完成,所以这里在 post() 中执行滚动到底部的代码)
            _textView1.post(new Runnable() {
                @Override
                public void run() {
                    scrollToBottom();
                }
            });
    
            _textView1.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    Toast.makeText(TextViewDemo6.this, "beforeTextChanged", Toast.LENGTH_LONG).show();
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    Toast.makeText(TextViewDemo6.this, "onTextChanged", Toast.LENGTH_LONG).show();
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    Toast.makeText(TextViewDemo6.this, "afterTextChanged", Toast.LENGTH_LONG).show();
                }
            });
            // _textView1.removeTextChangedListener();
    
            // 追加文本并滚动到底部
            _button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 追加文本
                    _textView1.append("
    ");
                    _textView1.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    
                    // 滚动到底部
                    scrollToBottom();
                }
            });
        }
    
        // 将 TextView 中的文本滚动到底部
        private void scrollToBottom() {
            int lineCount = _textView1.getLineCount(); // 行数
            int lineHeight = _textView1.getLineHeight(); // 行高
            int offset = lineCount * lineHeight; // 文本内容的高度
    
            int textViewHeight = _textView1.getHeight(); // 文本框的高度
            if (offset > textViewHeight) { // 如果文本内容的高度大于文本框的高度
                _textView1.scrollTo(0, offset - textViewHeight); // 滚动到底部(滚动距离为:文本内容的高度 - 文本框的高度)
            }
        }
    
        private void sample2() {
            String html = "<a href='http://webabcd.cnblogs.com'>webabcd blog</a>";
    
            // 让 TextView 解析并显示指定的 html
            _textView2.setText(Html.fromHtml(html));
            // 设置连接的颜色
            _textView2.setLinkTextColor(Color.parseColor("#FF0000"));
            // 允许点击 html 中的链接并跳转
            _textView2.setMovementMethod(LinkMovementMethod.getInstance());
        }
    
        private void sample3() {
            String text = "click me";
            _textView3.setText(text);
    
            // 指定 TextView 是可点击的(其实这里不指定也是可以的,因为 setOnClickListener() 会自动将其设置为可点击)
            // _textView3.setClickable(true);
    
            // 处理 TextView 的点击事件
            _textView3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    Toast.makeText(TextViewDemo6.this, "被点击了", Toast.LENGTH_LONG).show();
    
                    // 跳转到指定的 url
                    Uri uri = Uri.parse("http://webabcd.cnblogs.com/");
                    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                    startActivity(intent);
                }
            });
    
            // 注:如果需要指定 TextView 中的指定部分的文本可点击,请参见 TextViewDemo5 中的关于 ClickableSpan 的相关示例
        }
    
        private void sample4() {
            // 添加文本变化事件的监听
            _textView4.addTextChangedListener(_textWatcher);
            // 移除文本变化事件的监听
            // _textView4.removeTextChangedListener(_textWatcher);
    
            // 追加文本
            _button4.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    _textView4.append(new SimpleDateFormat("HH:mm:ss ").format(new Date()));
                }
            });
        }
        private TextWatcher _textWatcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                Toast.makeText(TextViewDemo6.this, "beforeTextChanged", Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Toast.makeText(TextViewDemo6.this, "onTextChanged", Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                Toast.makeText(TextViewDemo6.this, "afterTextChanged", Toast.LENGTH_SHORT).show();
            }
        };
    
        private void sample5() {
            // 文本是否可以被选中
            _textView5.setTextIsSelectable(true);
            // 获取焦点后是否自动选中全部文本
            _textView5.setSelectAllOnFocus(false);
            // 选中文本的背景色
            _textView5.setHighlightColor(getResources().getColor(R.color.orange));
        }
    }
    
    

    /layout/activity_view_text_textviewdemo6.xml

    <?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/textView1"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:lines="6"
            android:layout_marginLeft="10dp"
            android:scrollbars="vertical"
            android:fadeScrollbars="false"
            android:text="@string/text_long"/>
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="追加文本"/>
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>
    
        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>
        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="追加文本"/>
    
        <TextView
            android:id="@+id/textView5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:text="@string/text_long" />
    
    </LinearLayout>
    

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

  • 相关阅读:
    day3:python测试题
    day4:Python列表(list)元组( tuple)字典(dict)
    day3:python运算符及数据类型(str)(int)
    2day:Python基础
    1day:了解python
    centos下安装storm
    Linux下添加,删除,修改,查看用户和用户组
    svn默认地址老发生改变,记下默认路径
    hive 遇到的问题及解决方法
    hadoop2.5.2 安装与部署
  • 原文地址:https://www.cnblogs.com/webabcd/p/android_view_text_TextViewDemo6.html
Copyright © 2020-2023  润新知