這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Android開發(fā)中怎么實(shí)現(xiàn)一個(gè)全文收起功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

為合川等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及合川網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、合川網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
首先寫一個(gè)布局,這個(gè)布局是每個(gè)子項(xiàng)的布局 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>寫一個(gè)Util類,其實(shí)是存放的數(shù)據(jù),也可以讀取數(shù)據(jù)庫,獲取JSON字符串,這里為了實(shí)現(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[]{
"在動(dòng)作類影片中,只要發(fā)生混亂,那么絕對就有木倉戰(zhàn)。現(xiàn)在的技術(shù)越來越發(fā)達(dá),電影或電視中的特效也做的越來越逼真,演員們被木倉打中的效果也很形象,我們經(jīng)常能看到被木倉打中的傷口血淋林的暴露在大屏幕中,從演員的表演中我們能看到木倉擊是很痛的,那么你們有想過被木倉打中到底會(huì)有多痛?什么感覺嗎?網(wǎng)站有網(wǎng)友為我們分享被子彈打中的感覺\n" +
"1、“老實(shí)說,比我想象中的感覺要輕很多。本來我以為很痛,可是被打中后就像是被棒球擊中的感覺一樣,剛開始的幾秒鐘沒什么知覺,過會(huì)才感到痛\n" +
"2、“被子彈打到的感覺就像是一直有人拿針扎你一樣,刺痛刺痛的。”\n" +
"3、“我當(dāng)初大腿被木倉擊中,子彈直接從我的大腿中傳過去,連帶著我的肌腱也被擊中,那種感覺我覺得用疼痛兩個(gè)字已經(jīng)不足以形容了\n" +
"4、“在我十七歲的時(shí)候,腳被木倉擊中,當(dāng)時(shí)我以為是被蜜蜂蟄了,因?yàn)榉路鹇牭搅嗣鄯涞穆曇簦瑳]過幾秒鐘,腳上就傳來灼熱感,這才知道原來是被木倉擊中了。\n" +
"5、“我只是聽到的木倉聲,卻沒有意識(shí)到自己中木倉了。直到血流出來才意識(shí)到。所以,對我來講,被子彈擊中沒什么感覺。"
,
"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ù),進(jìn)行折疊
private final int STATE_EXPANDED = 3;//文本超過限定行數(shù),被點(diǎn)擊全文展開
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() {
// 這個(gè)回掉會(huì)調(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è)置顯示和收起的點(diǎn)擊事件
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));
}
}上述就是小編為大家分享的Android開發(fā)中怎么實(shí)現(xiàn)一個(gè)全文收起功能了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文題目:Android開發(fā)中怎么實(shí)現(xiàn)一個(gè)全文收起功能
分享鏈接:http://chinadenli.net/article22/jiigjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站營銷、全網(wǎng)營銷推廣、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)