国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android仿微信朋友圈全文收起功能示例(附源碼)

2019-12-12 03:45:48
字體:
供稿:網(wǎng)友

在眾多的社交類軟件中,朋友圈是必不可少的,可以與好友、同學(xué)等分享自己的日常和有意思的事情,在開發(fā)社交類App時,朋友圈發(fā)表的內(nèi)容你不可能讓他全部顯示,全部顯示的話用戶體驗度會非常不好,這時就要用到全文、收縮的功能,朋友如果想要看你發(fā)的動態(tài),只要點一下全文就可以查看所有的全部的內(nèi)容了,如果不想看,也沒有必要把這一篇文章全部都滑到底部,才能看下一條內(nèi)容。

下邊將源碼貼出來供大家參考:(代碼不是最簡便的,但是功能是可以的)

首先寫一個布局,這個布局是每個子項的布局 item_text_list.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="wrap_content"  android:orientation="vertical"  android:paddingBottom="@dimen/activity_vertical_margin"  android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin">  <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_gravity="center_vertical"    android:orientation="horizontal">    <TextView      android:id="@+id/tv_hend"      android:layout_width="40dp"      android:layout_height="40dp"      android:layout_marginRight="16dp"      android:background="@drawable/circle"      android:gravity="center"      android:text="1"      android:textColor="@android:color/white"      android:textSize="14sp" />    <TextView      android:id="@+id/tv_name"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:alpha="0.87"      android:text="丁先森"      android:textColor="@android:color/black"      android:textSize="14sp" />  </LinearLayout>  <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_marginLeft="56dp"    android:orientation="vertical"    android:paddingBottom="8dp">    <TextView      android:id="@+id/tv_content"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_marginBottom="8dp"      android:alpha="0.85"      android:ellipsize="end"      android:text=""      android:textColor="@android:color/black"      android:textSize="14sp" />    <TextView      android:id="@+id/tv_expand_or_collapse"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:text="全文"      android:textColor="@color/colorPrimaryDark"      android:textSize="14sp" />  </LinearLayout>  <View    android:layout_width="match_parent"    android:layout_height="0.5dp"    android:layout_marginLeft="56dp"    android:alpha="0.12"    android:background="@android:color/black" /></LinearLayout>

寫一個Util類,其實是存放的數(shù)據(jù),也可以讀取數(shù)據(jù)庫,獲取JSON字符串,這里為了實現(xiàn)功能就是用固定的數(shù)據(jù)

Util.class

package com.example.friendzhanshou;/** * @author DingChao *     2017/2/10 */public class Util {  private static String[] nameArray = new String[]{      "Windows", "Mac", "Linux"  };  private static String[] contentArray = new String[]{      "在動作類影片中,只要發(fā)生混亂,那么絕對就有木倉戰(zhàn)。現(xiàn)在的技術(shù)越來越發(fā)達,電影或電視中的特效也做的越來越逼真,演員們被木倉打中的效果也很形象,我們經(jīng)常能看到被木倉打中的傷口血淋林的暴露在大屏幕中,從演員的表演中我們能看到木倉擊是很痛的,那么你們有想過被木倉打中到底會有多痛?什么感覺嗎?網(wǎng)站有網(wǎng)友為我們分享被子彈打中的感覺/n" +          "1、“老實說,比我想象中的感覺要輕很多。本來我以為很痛,可是被打中后就像是被棒球擊中的感覺一樣,剛開始的幾秒鐘沒什么知覺,過會才感到痛/n" +          "2、“被子彈打到的感覺就像是一直有人拿針扎你一樣,刺痛刺痛的。”/n" +          "3、“我當(dāng)初大腿被木倉擊中,子彈直接從我的大腿中傳過去,連帶著我的肌腱也被擊中,那種感覺我覺得用疼痛兩個字已經(jīng)不足以形容了/n" +          "4、“在我十七歲的時候,腳被木倉擊中,當(dāng)時我以為是被蜜蜂蟄了,因為仿佛聽到了蜜蜂的聲音,沒過幾秒鐘,腳上就傳來灼熱感,這才知道原來是被木倉擊中了。/n" +          "5、“我只是聽到的木倉聲,卻沒有意識到自己中木倉了。直到血流出來才意識到。所以,對我來講,被子彈擊中沒什么感覺。"     ,      "GNOME or KDE desktop/n" +          " processor with support for AMD Virtualization™ (AMD-V™)"  };  /**   * 獲取文本內(nèi)容根據(jù)下標(biāo)   *   * @param position   * @return   */  public static String getContent(int position) {    return contentArray[position % contentArray.length];  }  /**   * 獲取名稱根據(jù)下標(biāo)   *   * @param position   * @return   */  public static String getName(int position) {    return nameArray[position % contentArray.length];  }}

設(shè)置適配器

TextListAdapter.class

package com.example.friendzhanshou;import android.app.Activity;import android.support.v7.widget.RecyclerView;import android.util.SparseArray;import android.view.View;import android.view.ViewGroup;import android.view.ViewTreeObserver;import android.widget.Adapter;import android.widget.TextView;/** * @author DingChao *     2017/2/10 */  public class TextListAdapter extends RecyclerView.Adapter<TextListAdapter.TextHolder> {  private Activity mContent;  private final int MAX_LINE_COUNT = 3;  private final int STATE_UNKNOW = -1;  private final int STATE_NOT_OVERFLOW = 1;//文本行數(shù)不能超過限定行數(shù)  private final int STATE_COLLAPSED = 2;//文本行數(shù)超過限定行數(shù),進行折疊  private final int STATE_EXPANDED = 3;//文本超過限定行數(shù),被點擊全文展開  private SparseArray<Integer> mTextStateList;  public TextListAdapter(Activity context) {    mContent = context;    mTextStateList = new SparseArray<>();  }  @Override  public TextHolder onCreateViewHolder(ViewGroup parent, int viewType) {    return new TextHolder(mContent.getLayoutInflater().inflate(R.layout.item_test_list, parent, false));  }  @Override  public void onBindViewHolder(final TextHolder holder,final int position) {    holder.hend.setText(position+1+"");//設(shè)置頭部的文字    holder.name.setText(Util.getName(position));//設(shè)置名稱    int state=mTextStateList.get(position,STATE_UNKNOW);//    如果該itme是第一次初始化,則取獲取文本的行數(shù)    if (state==STATE_UNKNOW){      holder.content.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {        @Override        public boolean onPreDraw() {//          這個回掉會調(diào)用多次,獲取玩行數(shù)后記得注銷監(jiān)聽          holder.content.getViewTreeObserver().removeOnPreDrawListener(this);//          holder.content.getViewTreeObserver().addOnPreDrawListener(null);//          如果內(nèi)容顯示的行數(shù)大于限定顯示行數(shù)          if (holder.content.getLineCount()>MAX_LINE_COUNT) {            holder.content.setMaxLines(MAX_LINE_COUNT);//設(shè)置最大顯示行數(shù)            holder.expandOrCollapse.setVisibility(View.VISIBLE);//讓其顯示全文的文本框狀態(tài)為顯示            holder.expandOrCollapse.setText("全文");//設(shè)置其文字為全文            mTextStateList.put(position, STATE_COLLAPSED);          }else{            holder.expandOrCollapse.setVisibility(View.GONE);//顯示全文隱藏            mTextStateList.put(position,STATE_NOT_OVERFLOW);//讓其不能超過限定的行數(shù)          }          return true;        }      });      holder.content.setMaxLines(Integer.MAX_VALUE);//設(shè)置文本的最大行數(shù),為整數(shù)的最大數(shù)值      holder.content.setText(Util.getContent(position));//用Util中的getContent方法獲取內(nèi)容    }else{//      如果之前已經(jīng)初始化過了,則使用保存的狀態(tài),無需在獲取一次      switch (state){        case STATE_NOT_OVERFLOW:          holder.expandOrCollapse.setVisibility(View.GONE);          break;        case STATE_COLLAPSED:          holder.content.setMaxLines(MAX_LINE_COUNT);          holder.expandOrCollapse.setVisibility(View.VISIBLE);          holder.expandOrCollapse.setText("全文");          break;        case STATE_EXPANDED:          holder.content.setMaxLines(Integer.MAX_VALUE);          holder.expandOrCollapse.setVisibility(View.VISIBLE);          holder.expandOrCollapse.setText("收起");          break;      }      holder.content.setText(Util.getContent(position));    }//    設(shè)置顯示和收起的點擊事件    holder.expandOrCollapse.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        int state=mTextStateList.get(position,STATE_UNKNOW);        if (state==STATE_COLLAPSED){          holder.content.setMaxLines(Integer.MAX_VALUE);          holder.expandOrCollapse.setText("收起");          mTextStateList.put(position,STATE_EXPANDED);        }else if (state==STATE_EXPANDED){          holder.content.setMaxLines(MAX_LINE_COUNT);          holder.expandOrCollapse.setText("全文");          mTextStateList.put(position,STATE_COLLAPSED);        }      }    });  }  @Override  public int getItemCount() {    return 15;  }  public class TextHolder extends RecyclerView.ViewHolder {    public TextView hend;    public TextView name;    public TextView content;    public TextView expandOrCollapse;    public TextHolder(View itemView) {      super(itemView);//      綁定xml布局中的控件      hend = (TextView) itemView.findViewById(R.id.tv_hend);      name = (TextView) itemView.findViewById(R.id.tv_name);      content = (TextView) itemView.findViewById(R.id.tv_content);      expandOrCollapse = (TextView) itemView.findViewById(R.id.tv_expand_or_collapse);    }  }}

主布局的內(nèi)容:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:id="@+id/activity_main"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:paddingBottom="@dimen/activity_vertical_margin"  android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin"  tools:context="com.example.friendzhanshou.MainActivity">  <android.support.v7.widget.RecyclerView    android:id="@+id/rv_text_list"    android:layout_width="match_parent"    android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></RelativeLayout>

MainActivity中的代碼也很簡單,獲取空間,綁定數(shù)據(jù)源:

package com.example.friendzhanshou;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;public class MainActivity extends AppCompatActivity {  private RecyclerView mRvTextList;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mRvTextList= (RecyclerView) findViewById(R.id.rv_text_list);    mRvTextList.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));    mRvTextList.setAdapter(new TextListAdapter(this));  }}

demo下載地址:friendzhanshou_jb51.rar

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 布尔津县| 鄄城县| 云安县| 兴义市| 庐江县| 中卫市| 邵阳市| 霞浦县| 舒兰市| 靖远县| 西平县| 淮南市| 晋州市| 通城县| 苗栗市| 光山县| 旌德县| 罗平县| 牙克石市| 南城县| 宣汉县| 山丹县| 涡阳县| 辉县市| 临桂县| 资阳市| 京山县| 根河市| 罗平县| 普兰店市| 深水埗区| 左贡县| 大丰市| 乌拉特后旗| 大连市| 垦利县| 盘山县| 静宁县| 衡东县| 四子王旗| 花莲县|