Android实现可以展开的TextView

本文实例为大家分享了一个可以展开的TextView的具体代码,供大家参考,具体内容如下

原理是通过点击的时候设置 setMaxLines(lineNum)来实现:

public class ExpandableTextView extends TextView {
 private static int MIN_LINE_NUM = 2;
 private static int MAX_LINE_NUM = 20;
 private int lineNum = MIN_LINE_NUM;
 private boolean mIsExpanded = false;
 Bitmap bitmapDown;
 Bitmap bitmapUp;
 int w, h;
 /** 点击事件listener */
 private OnClickListener mOnClickListener; 

 public ExpandableTextView(Context context, AttributeSet attrs) {
  super(context, attrs);
  init(context, attrs);
 } 

 private void init(Context context, AttributeSet attrs) {
  setMaxLines(lineNum);
  bitmapDown = BitmapFactory.decodeResource(getResources(), R.drawable.update_detail_down);
  bitmapUp = BitmapFactory.decodeResource(getResources(), R.drawable.update_detail_up);
  w = bitmapDown.getWidth() + (int) context.getResources().getDimension(R.dimen.expand_textview_right);
  h = bitmapDown.getHeight() + (int) context.getResources().getDimension(R.dimen.expand_textview_bottom); 

  super.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    if (lineNum == MIN_LINE_NUM) {
     lineNum = MAX_LINE_NUM;
     setMaxLines(lineNum);
    } else {
     lineNum = MIN_LINE_NUM;
     setMaxLines(lineNum);
    }
    if (mOnClickListener != null) {
     mOnClickListener.onClick(v);
    }
   }
  });
 } 

 @Override
 public void setOnClickListener(OnClickListener listener) {
  if (!isClickable()) {
   setClickable(true);
  }
  mOnClickListener = listener;
 } 

 @Override
 public void setMaxLines(int maxlines) {
  super.setMaxLines(maxlines); 

  if (lineNum == MAX_LINE_NUM) {
   mIsExpanded = true;
  } else {
   mIsExpanded = false;
  }
 } 

 public boolean isExpanded() {
  return mIsExpanded;
 } 

 @Override
 protected void onDraw(Canvas canvas) {
  if (getLineCount() <= MIN_LINE_NUM) {
   super.onDraw(canvas);
   return;
  }
  if (lineNum == MIN_LINE_NUM) {
   canvas.drawBitmap(bitmapDown, getWidth() - w, getHeight() - h, null);
  } else {
   canvas.drawBitmap(bitmapUp, getWidth() - w, getHeight() - h, null);
  }
  super.onDraw(canvas);
 } 

 public void setMaxLine(int line) {
  lineNum = line;
  setMaxLines(line);
 }
}

这样来写Layout:

<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"
 android:background="#FFFFFF" > 

 <TextView
  android:id="@+id/detail_action"
  android:textColor="#000000"
  android:textSize="11sp"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentTop="true"
  android:layout_marginRight="8dip"
  android:drawablePadding="4dip"
  android:paddingBottom="10dip"
  android:paddingTop="10dip"
  android:singleLine="true"
  android:text="sdfkljsfiosjdfiosfjsiofjsdifsd" /> 

 <com.example.view.ExpandableTextView
  android:id="@+id/textview"
  android:layout_width="100dp"
  android:layout_height="wrap_content"
  android:layout_below="@id/detail_action"
  android:lineSpacingExtra="4dip"
  android:paddingBottom="-40dip"
  android:paddingRight="48dip"
  android:text="adfsfsfewrwerwerwerqRWgdffdfdfERSAFSDFSDFSDd"
  android:layout_marginTop="-5dip"
  android:textColor="#000000" >
 </com.example.view.ExpandableTextView> 

  <TextView
  android:id="@+id/detail_action1"
  android:textColor="#000000"
  android:textSize="11sp"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_below="@id/textview"
  android:layout_marginRight="8dip"
  android:drawablePadding="4dip"
  android:paddingBottom="10dip"
  android:paddingTop="10dip"
  android:singleLine="true"
  android:text="sdfkljsfiosjdfiosfjsiofjsdifsd" /> 

</RelativeLayout>

效果图:

代码:一个可以展开的TextView

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现可点击展开的TextView

    概述 Android开发过程中,经常遇到 Textview 展示不完全的情况. 遇到此情况,通常的处理是: 方案一 Textview 添加 android:ellipsize 属性,让展示不完的部分使用省略号代替. 方案二 Textview 采用走马灯效果,使其滚动展示全部文本内容. 对于方案一,如果想查看被省略后的内容,如何实现?通常情况下是在 TextView 文本后面或下边添加一个可点击的图标,来实现 TextView 的展开与收缩.如下图: 收缩状态 展开状态 实现原理 对于以上效果,大

  • Android TextView实现多文本折叠、展开效果

    背景 在开发过程中,当我们的需求中包含说说或者评论等内容的展示时,我们都会考虑当内容太多时该如何显示.当内容的字数太多,如果全部展示出来可能会影响体验效果,但是又不能只截取一部分内容进行展示,此时就需要考虑使用多行显示折叠的效果来实现. 效果图: 使用 1.布局文件调用 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:o

  • Android TextView多文本折叠展开效果

    最近做项目,效果图要用到TextView的折叠,超过一定行数的时候,就会折叠起来,点击可以展开.网上找了一些效果,自己也稍作了修改.便拿来与网友分享分享. 参考文献:Android UI实现多行文本折叠展开效果 第一种:通过多个布局组合实现 大概步骤: - 定义布局,垂直的线性LinearLayout布局.TextView和ImageView. 在layout中定义基本组件. - 设置TextView的高度为指定行数*行高. 不使用maxLine的原因是maxLine会控制显示文本的行数,不方便

  • Android实现带动画效果的可点击展开TextView

    本文为大家分享了Android实现带动画效果的可点击展开TextView 制作代码,效果图: 收起(默认)效果: 点击展开后的效果: 源码: 布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/activity_main" xmlns:android="http://schemas.android.com/apk/res/a

  • Android实现可以展开的TextView

    本文实例为大家分享了一个可以展开的TextView的具体代码,供大家参考,具体内容如下 原理是通过点击的时候设置 setMaxLines(lineNum)来实现: public class ExpandableTextView extends TextView { private static int MIN_LINE_NUM = 2; private static int MAX_LINE_NUM = 20; private int lineNum = MIN_LINE_NUM; privat

  • Android控件系列之TextView使用介绍

    学习目的: 1.了解在Android中如何使用TextView控件 2.掌握TextView控件重要属性 作用:TextView类似一般UI中的Label,TextBlock等控件,只是为了单纯的显示一行或多行文本 上图的XML布局如下: 复制代码 代码如下: <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_c

  • Android手机开发 控件 TextView文字居中

    有2种方法可以设置TextView文字居中: 一:在xml文件设置:Android:gravity="center" 二:在程序中设置:txtTitle.setGravity(Gravity.CENTER); 设置控件居中: android:layout_gravity="center"是对textview控件在整个布局中居中,也可以在其父layout中调用设置android:gravity="center" 程序中也是需要设置其所在控件的父la

  • Android自定义View展开菜单功能的实现

    先给大家展示下效果图,如果大家感觉不错,请参考实现代码. 思路 1.下角Button的父View加入一个FrameLayout,也就是图中全屏透明灰色部分. 菜单没有弹出的时候设置为不可见. 设置FrameLayout点击事件,点击的时候缩回菜单. 对应init() 2.rameLayout中加入菜单按钮,也就是弹出的那三个. 菜单没有弹出的时候设置为不可见. 对应addElement()和freshElement() 3.右下角的按钮,旋转图标(也可以不旋转). 对应setRotateAnim

  • Android自定义带拼音音调Textview

    本文实例为大家分享了Android自定义带拼音音调Textview的具体代码,供大家参考,具体内容如下 1.拼音textview,简单的为把拼音数组和汉字数组结合在一起多行显示 import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Pa

  • android实现上下滚动的TextView

    一 说明    这里重要应用类 AutoTextView,这是一个自定义的类,继承至TextSwitcher,下面临 AutoTextView类做简要说明: 1. 该类应用的重点,在于设置两个动画, setInAnimation(...)  和 setOutAnimation(...),分离是文字进入的动画和文字退出的动画: 2. 类中定义了一个外部类-Rotate3dAnimation,重要靠该类实现文字进出动画,该外部类继承至Animation.说来偶合,这个恰好是在apiDemo中看到了,

  • Android中实现词组高亮TextView方法示例

    前言 本文主要给大家介绍了关于Android实现词组高亮TextView的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. HighlightTextView Android文本高亮控件,基于View实现. 特点 文本高亮 单词自动换行 高亮词组保持在同一行显示 主要逻辑: 两个 Paint 负责绘制不同的文字 在每次绘制之前计算将要绘制的文本是否会超出屏幕宽度,如果超出则换行 protected void onDraw(Canvas canvas) { super.o

  • Android自定义View之继承TextView绘制背景

    本文实例为大家分享了TextView绘制背景的方法,供大家参考,具体内容如下 效果: 实现流程: 1.初始化:对画笔进行设置 mPaintIn = new Paint(); mPaintIn.setAntiAlias(true); mPaintIn.setDither(true); mPaintIn.setStyle(Paint.Style.FILL); mPaintIn.setColor(getResources().getColor(R.color.colorPrimary)); mPain

  • Android ExpandableListView展开列表控件使用实例

    你是否觉得手机QQ上的好友列表那个控件非常棒? 不是..... 那也没关系,学多一点知识对自己也有益无害. 那么我们就开始吧. 展开型列表控件, 原名ExpandableListView 是普通的列表控件进阶版, 可以自由的把列表进行收缩, 非常的方便兼好看. 首先看看我完成的截图, 虽然界面不漂亮, 但大家可以自己去修改界面. 该控件需要一个主界面XML 一个标题界面XML及一个列表内容界面XML 首先我们来看看 mian.xml 主界面 复制代码 代码如下: //该界面非常简单, 只要一个E

随机推荐