最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android TextView仿微信可折疊效果

 更新時間:2017年12月29日 14:18:59   作者:yuminfeng728  
這篇文章主要為大家詳細(xì)介紹了Android TextView仿微信可折疊效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在微信朋友圈中,發(fā)送大量的文本信息時,在展示的時候微信會將該文本信息進(jìn)行折疊處理,出現(xiàn)“全文”,“收起”的操作提示。當(dāng)點(diǎn)擊全文時,才能看到全部的文本信息,正好最近的項(xiàng)目中也提出了類似的需求,這里就對該自定義View的實(shí)現(xiàn)的方法進(jìn)行了整理。

代碼如下:

1.自定義的View:

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
 * 可折疊的textview
 */
public class ExpandTextView extends LinearLayout {
  public static final int DEFAULT_MAX_LINES = 3;
  private TextView contentText;
  private TextView textPlus;
  private int showLines;
  private ExpandStatusListener expandStatusListener;
  private boolean isExpand;

  public ExpandTextView(Context context) {
    super(context);
    initView();
  }

  public ExpandTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initAttrs(attrs);
    initView();
  }

  public ExpandTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initAttrs(attrs);
    initView();
  }

  private void initAttrs(AttributeSet attrs) {
    TypedArray typedArray = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.ExpandTextView, 0, 0);
    try {
      showLines = typedArray.getInt(R.styleable.ExpandTextView_showLines, DEFAULT_MAX_LINES);
    }finally {
      typedArray.recycle();
    }
  }

  private void initView() {
    setOrientation(LinearLayout.VERTICAL);
    LayoutInflater.from(getContext()).inflate(R.layout.layout_magic_text, this);
    contentText = (TextView) findViewById(R.id.contentText);
    if(showLines > 0){
      contentText.setMaxLines(showLines);
    }

    textPlus = (TextView) findViewById(R.id.textPlus);
    textPlus.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View view) {
        String textStr = textPlus.getText().toString().trim();
        if("全文".equals(textStr)){
          contentText.setMaxLines(Integer.MAX_VALUE);
          textPlus.setText("收起");
          setExpand(true);
        }else{
          contentText.setMaxLines(showLines);
          textPlus.setText("全文");
          setExpand(false);
        }
        //通知外部狀態(tài)已變更
        if(expandStatusListener != null){
          expandStatusListener.statusChange(isExpand());
        }
      }
    });
  }

  public void setText(final CharSequence content){

    //在開始繪制contentText內(nèi)容時,進(jìn)行監(jiān)聽
    contentText.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

      @Override
      public boolean onPreDraw() {
        // 避免重復(fù)監(jiān)聽
        contentText.getViewTreeObserver().removeOnPreDrawListener(this);
        //獲取當(dāng)前文本的行數(shù)
        int linCount = contentText.getLineCount();
        if(linCount > showLines){

          if(isExpand){
            contentText.setMaxLines(Integer.MAX_VALUE);
            textPlus.setText("收起");
          }else{
            contentText.setMaxLines(showLines);
            textPlus.setText("全文");
          }
          textPlus.setVisibility(View.VISIBLE);
        }else{
          textPlus.setVisibility(View.GONE);
        }
        return true;
      }


    });
    contentText.setText(content);
  }

  public void setExpand(boolean isExpand){
    this.isExpand = isExpand;
  }

  public boolean isExpand(){
    return this.isExpand;
  }

  public void setExpandStatusListener(ExpandStatusListener listener){
    this.expandStatusListener = listener;
  }

  public interface ExpandStatusListener{
    void statusChange(boolean isExpand);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    return textPlus.dispatchTouchEvent(event);
  }
}

2.相關(guān)布局文件

<?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/contentText"
    android:textSize="18sp"
    android:textColor="#000000"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text=""/>

  <TextView
    android:id="@+id/textPlus"
    android:textSize="18sp"
    android:textColor="#666666"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    android:text=""/>

</LinearLayout>

3.自定義屬性

<declare-styleable name="ExpandTextView">
    <attr name="showLines" format="integer"/>
</declare-styleable>

4.開始引用

<mo.yumf.com.myviews.ExpandTextView
    android:id="@+id/expandTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:showLines="4"/>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android 加載本地聯(lián)系人實(shí)現(xiàn)方法

    android 加載本地聯(lián)系人實(shí)現(xiàn)方法

    在android開發(fā)過程中,有些功能需要訪問本地聯(lián)系人列表,本人搜集整理了一番,拿出來和大家分享一下,希望可以幫助你們
    2012-12-12
  • Android開發(fā)強(qiáng)制橫屏和強(qiáng)制豎屏設(shè)置實(shí)例代碼

    Android開發(fā)強(qiáng)制橫屏和強(qiáng)制豎屏設(shè)置實(shí)例代碼

    本篇文章主要介紹了Android開發(fā)強(qiáng)制橫屏和強(qiáng)制豎屏設(shè)置實(shí)例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • android百度地圖之公交線路詳情搜索

    android百度地圖之公交線路詳情搜索

    本篇文章介紹了android百度地圖之公交線路詳情搜索,實(shí)現(xiàn)了百度搜索公交詳情具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • 很實(shí)用的Android日期計(jì)算類

    很實(shí)用的Android日期計(jì)算類

    這篇文章主要為大家詳細(xì)介紹了很實(shí)用的Android日期計(jì)算類,一個是獲取與今天時間差,另一個是日期格式化工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android多媒體之畫畫板開發(fā)案例分享

    Android多媒體之畫畫板開發(fā)案例分享

    這篇文章主要為大家分享了Android多媒體之畫畫板開發(fā)案例,具有一定的實(shí)用性和參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android實(shí)現(xiàn)滑動效果

    Android實(shí)現(xiàn)滑動效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)滑動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Android使用OpenGL和MediaCodec錄制功能

    Android使用OpenGL和MediaCodec錄制功能

    OpenGL是一個跨平臺的操作GPU的API,但OpenGL需要本地視窗系統(tǒng)進(jìn)行交互,這就需要一個中間控制層, EGL就是連接OpenGL ES和本地窗口系統(tǒng)的接口,引入EGL就是為了屏蔽不同平臺上的區(qū)別,這篇文章主要介紹了Android使用OpenGL和MediaCodec錄制功能,需要的朋友可以參考下
    2025-04-04
  • Android WebView無法彈出軟鍵盤的原因及解決辦法

    Android WebView無法彈出軟鍵盤的原因及解決辦法

    這篇文章主要介紹了Android WebView無法彈出軟鍵盤的原因及解決辦法的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Jetpack之CameraX的使用

    Jetpack之CameraX的使用

    CameraX 是Jetpack的一個成員,可以更輕松地開發(fā)相機(jī)應(yīng)用,支持搭載Android 5.0及以上設(shè)備,具有廣泛的設(shè)備兼容性,也可確保各設(shè)備間的一致性,如寬高比、屏幕方向、旋轉(zhuǎn)角度、預(yù)覽大小和圖像大小等
    2022-11-11
  • android 通過MediaRecorder實(shí)現(xiàn)簡單的錄音示例

    android 通過MediaRecorder實(shí)現(xiàn)簡單的錄音示例

    本篇文章中主要介紹了android 通過MediaRecorder實(shí)現(xiàn)簡單的錄音示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02

最新評論

射洪县| 鞍山市| 沛县| 陆川县| 攀枝花市| 蒙城县| 静海县| 铜梁县| 连南| 旬阳县| 永寿县| 北碚区| 江都市| 南汇区| 霸州市| 广昌县| 大同市| 报价| 霍城县| 阜新市| 洛阳市| 琼中| 文安县| 巢湖市| 古蔺县| 山丹县| 淳安县| 广德县| 辽宁省| 双鸭山市| 丰原市| 太仓市| 客服| 云龙县| 祁连县| 当阳市| 剑河县| 忻城县| 千阳县| 五峰| 涿鹿县|