public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private int maxLine = 3;
private SpannableString elipseString;//收起的文字
private SpannableString notElipseString;//展開的文字
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.expanded_text);
String content = "在全球,隨著Flutter被越來越多的知名公司應(yīng)用在自己的商業(yè)APP中," +
"Flutter這門新技術(shù)也逐漸進入了移動開發(fā)者的視野,尤其是當(dāng)Google在2018年IO大會上發(fā)布了第一個" +
"Preview版本后,國內(nèi)刮起來一股學(xué)習(xí)Flutter的熱潮。\n\n為了更好的方便幫助中國開發(fā)者了解這門新技術(shù)" +
",我們,F(xiàn)lutter中文網(wǎng),前后發(fā)起了Flutter翻譯計劃、Flutter開源計劃,前者主要的任務(wù)是翻譯" +
"Flutter官方文檔,后者則主要是開發(fā)一些常用的包來豐富Flutter生態(tài),幫助開發(fā)者提高開發(fā)效率。而時" +
"至今日,這兩件事取得的效果還都不錯!";
tv.setText(content);
//獲取TextView的畫筆對象
TextPaint paint = tv.getPaint();
//每行文本的布局寬度
int width =getResources().getDisplayMetrics().widthPixels - dip2px(this,0);
//實例化StaticLayout 傳入相應(yīng)參數(shù)
StaticLayout staticLayout = new StaticLayout(content,paint,width, Layout.Alignment.ALIGN_NORMAL, 1, 0, false);
//判斷content是行數(shù)是否超過最大限制行數(shù)3行
if (staticLayout.getLineCount()>maxLine) {
//定義展開后的文本內(nèi)容
String string1 = content + " 收起";
notElipseString = new SpannableString(string1);
//給收起兩個字設(shè)成藍色
notElipseString.setSpan(new ForegroundColorSpan(Color.parseColor("#0079e2")), string1.length() - 2, string1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//獲取到第三行最后一個文字的下標(biāo)
int index = staticLayout.getLineStart(maxLine) - 1;
//定義收起后的文本內(nèi)容
String substring = content.substring(0, index - 2) + "..." + "更多";
elipseString = new SpannableString(substring);
//給查看全部設(shè)成藍色
elipseString.setSpan(new ForegroundColorSpan(Color.parseColor("#0079e2")), substring.length() - 5, substring.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//設(shè)置收起后的文本內(nèi)容
tv.setText(elipseString);
tv.setOnClickListener(this);
//將textview設(shè)成選中狀態(tài) true用來表示文本未展示完全的狀態(tài),false表示完全展示狀態(tài),用于點擊時的判斷
tv.setSelected(true);
} else {
//沒有超過 直接設(shè)置文本
tv.setText(content);
tv.setOnClickListener(null);
}
}
/**
* 根據(jù)手機的分辨率從 dp 的單位 轉(zhuǎn)成為 px(像素)
*/
public static int dip2px(Context mContext, float dpValue) {
final float scale = mContext.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
@Override
public void onClick(View v) {
if (v.getId() ==R.id.expanded_text) {
if (v.isSelected()) {
//如果是收起的狀態(tài)
tv.setText(notElipseString);
tv.setSelected(false);
} else {
//如果是展開的狀態(tài)
tv.setText(elipseString);
tv.setSelected(true);
}
}
}
}
Android實現(xiàn)文本的展開收起
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。