EditText,TextView监听是否超过最大行数,显示省略号
来源:互联网 发布:服务器80端口被占用 编辑:程序博客网 时间:2024/06/05 20:20
1.概述
我们给TextView或者EditTextViwe设置最大行数,超过最大行时我们没有相应的回调,这样当想处理超过最大行数的逻辑时就没有相应的方法,下面我自定义了有监听超过最大行数的EditText和TextView
效果图
下面的效果图textView设置成输入editTextView的字体,他们的最大行数都设置2行,超过最大行数和不超过分别设置成不同的字体颜色
图
效果图代码
<?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" > <com.geely.mars.mvpdemo.activity.view.OverLineEdixView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editext" android:textSize="30sp" android:maxLines="2" android:ellipsize="end"/> <com.geely.mars.mvpdemo.activity.view.OverLineTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="2" android:textSize="30sp" android:id="@+id/textview" android:ellipsize="end"/></LinearLayout>
package com.geely.mars.mvpdemo.activity.view;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.support.annotation.Nullable;import android.text.Editable;import android.text.TextWatcher;import com.geely.mars.mvpdemo.R;public class ActMain extends Activity { private OverLineEdixView edixView; private OverLineTextView textView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_main); edixView = findViewById(R.id.editext); textView = findViewById(R.id.textview); initView(); setListener(); } private void initView() { edixView.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { textView.setText(editable.toString()); } }); } private void setListener() { edixView.setOnOverLineChangerListener(new OverLineEdixView.OnOverLineChangerListener() { @Override public void onOverLine(boolean inOverLine) { if (inOverLine){ edixView.setTextColor(Color.parseColor("#ff0000")); }else { edixView.setTextColor(Color.BLACK); } } }); textView.setOnOverLineChangerListener(new OverLineTextView.OnOverLineChangerListener() { @Override public void onOverLine(boolean inOverLine) { if (inOverLine){ textView.setTextColor(Color.RED); }else { textView.setTextColor(Color.parseColor("#00ff00")); } } }); }}
3.具体的实现代码
代码比较简答 就直接贴代码,关键地方有相关注释
- OverLineEdixView
package com.geely.mars.mvpdemo.activity.view;import android.annotation.TargetApi;import android.content.Context;import android.graphics.Canvas;import android.os.Build;import android.support.v7.widget.AppCompatEditText;import android.text.Layout;import android.util.AttributeSet;import android.view.ViewTreeObserver;public class OverLineEdixView extends android.support.v7.widget.AppCompatEditText { private OnOverLineChangerListener listener; private AppCompatEditText normalStatu; public OverLineEdixView(Context context) { super(context); init(); } public OverLineEdixView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public OverLineEdixView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { normalStatu=this; getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (listener!=null){ listener.onOverLine(isOverLine()); } } }); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (listener!=null){ listener.onOverLine(isOverLine()); } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) private boolean isOverLine() { int lineCount = getLineCount(); int maxLines = getMaxLines(); return lineCount > maxLines; } interface OnOverLineChangerListener{ void onOverLine(boolean inOverLine); } public void setOnOverLineChangerListener(OnOverLineChangerListener listener){ this.listener=listener; }}
- OverLineTextView
package com.geely.mars.mvpdemo.activity.view;import android.annotation.TargetApi;import android.content.Context;import android.graphics.Canvas;import android.os.Build;import android.text.Layout;import android.util.AttributeSet;import android.view.ViewTreeObserver;import android.widget.TextView;import java.lang.reflect.Field;public class OverLineTextView extends TextView { private boolean isOverSize; private OnOverLineChangerListener listener; public OverLineTextView(Context context) { super(context); init(); } public OverLineTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) private void init() { // invalidate when layout end getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (listener != null) { listener.onOverLine(checkOverLine()); } } }); } public boolean isOverSize() { return isOverSize; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (listener != null) { listener.onOverLine(checkOverLine()); } } public boolean checkOverLine() { //获取当前textview的行数 int maxLine = getLineCount(); try { Field field = getClass().getSuperclass().getDeclaredField("mLayout"); field.setAccessible(true); Layout mLayout = (Layout) field.get(this); if (mLayout == null) { return false; } //mLayout.getEllipsisCount获取textView对应行数索引出的省略的字符数,没有省略返回0 isOverSize = mLayout.getEllipsisCount(maxLine - 1) > 0 ? true : false; } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } return isOverSize; } interface OnOverLineChangerListener{ void onOverLine(boolean inOverLine); } public void setOnOverLineChangerListener(OnOverLineChangerListener listener){ this.listener=listener; }}
阅读全文
3 0
- EditText,TextView监听是否超过最大行数,显示省略号
- 让TextView显示指定的行数,超过部分用省略号代替
- TextView限制最大行数,多出部分显示省略号,解决ellipsize = "end" 失效的问题
- TextView设置最大行数、或者最多显示6个字、结束时为省略号
- 文本、元素居中,超过指定行数显示省略号
- Android TextView设置显示指定字符,超过部分显示...(省略号)
- 设置Textview最大长度,超出显示省略号
- 设置Textview最大长度,超出显示省略号
- android EditText文本限制输入行数,多余部分显示省略号
- Android中的TextView超过n行显示省略号
- 【Android】TextView最多显示指定字符,超过部分省略号表示
- 设置TextView超过一定长度后显示省略号
- android让textview设置规定行数,多余部分省略号显示
- Android中TextView限制行数及末尾已省略号显示
- TexView 设置最大字数 超过部分显示省略号
- TextView设置最多显示指定个字符,超过部分显示...(省略号) 单行显示
- TextView最大长度限制,超出部分省略号显示
- Android TextView 判断文字内容是否超出显示省略号
- 删除linux路由遇到的一个问题
- QQ微博授权+LIBCURL+MFC(可视化窗口)
- java文件下载不显示中文文件名
- Spring处理后端数据基础
- 循环冗余校验码(CRC)
- EditText,TextView监听是否超过最大行数,显示省略号
- /bin/bash^M: bad interpreter: No such file or directory
- 创建数据库 使用PowerDesigner
- AndroidKeyStore管理及实现-基于源码7.1.1.r13
- linux kernel log 级别设置
- Eclipse几个常用的快捷键
- java 操作上传下载 HDFS:could only be replicated to 0 nodes instead of minReplication (=1). There are 1 da
- test
- 轻松搞定JSONP跨域请求