直播电商平台开发,点击查看更多显示所有内容
直播电商平台开发,点击查看更多显示所有内容
实现代码:
mainactivity.xml:
1 | <br><?xml version= "1.0" encoding= "utf-8" ?><br><RelativeLayout xmlns:android= "http://schemas.android.com/apk/res/android" <br> xmlns:tools= "http://schemas.android.com/tools" <br> android:layout_width= "match_parent" <br> android:layout_height= "match_parent" <br> tools:context= ".MainActivity" ><br> <br> <br> <TextView<br> android:id= "@+id/text" <br> android:layout_width= "match_parent" <br> android:layout_height= "wrap_content" <br> android:layout_marginStart= "280dp" <br> android:text= "1234567890123456789012345678901234567890" <br> android:background= "@color/teal_200" <br> android:textColor= "@color/black" <br> android:layout_gravity= "center_horizontal" /><br> <br> <ImageView<br> android:visibility= "gone" <br> android:layout_marginEnd= "10dp" <br> android:id= "@+id/show" <br> android:layout_width= "15dp" <br> android:layout_height= "15dp" <br> android:layout_alignParentEnd= "true" <br> android:src= "@mipmap/ic_down_arrow" /><br> <br></RelativeLayout> |
MainActivity.java:
1 | <br>package com.example.myapplication;<br> <br>import androidx.appcompat.app.AppCompatActivity;<br> <br>import android.content.Context;<br>import android.os.Bundle;<br>import android.text.Layout;<br>import android.text.StaticLayout;<br>import android.text.TextPaint;<br>import android.view.View;<br>import android.widget.ImageView;<br>import android.widget.RelativeLayout;<br>import android.widget.TextView;<br> <br> public class MainActivity extends AppCompatActivity {<br> <br> <br> @Override<br> protected void onCreate(Bundle savedInstanceState) {<br> super.onCreate(savedInstanceState);<br> setContentView(R.layout.activity_main);<br> // 获得控件<br> TextView textView = findViewById(R.id.text);<br> ImageView imageView = findViewById(R.id.show);<br> <br> // 需要显示的文本<br> String text = "1234567890123456789012345678901234567890";<br> // 最大显示行数<br> int maxLine = 2;<br> <br> // 等待textview绘制完成后,执行<br> textView.post(new Runnable() {<br> @Override<br> public void run() {<br> // 获取TextView的画笔对象<br> TextPaint paint = textView.getPaint();<br> // 获取textview的宽度,单位是px<br> int width = textView.getWidth();<br> // 实例化StaticLayout 传入相应参数<br> StaticLayout staticLayout = new StaticLayout(text, paint, width, Layout.Alignment.ALIGN_NORMAL, 1, 0, false);<br> // 获得文本所需显示得line行数<br> int lineCount = staticLayout.getLineCount();<br> // 如果需要显示的行数大于了规定的最大显示行数<br> if (lineCount > maxLine) {<br> // 显示下箭头的imageview<br> imageView.setVisibility(View.VISIBLE);<br> // 获取到第大行数最后一个文字的下标<br> int index = staticLayout.getLineStart(maxLine) - 1;<br> // 将最后一行的内容删掉3个,给下箭头imageview留出一点空间<br> String textSub = text.substring(0, index - 3) + "...";<br> textView.setText(textSub);<br> // 获得下箭头imageview的LayoutParams<br> RelativeLayout.LayoutParams layoutParamsImageView = (RelativeLayout.LayoutParams) imageView.getLayoutParams();<br> // 再实例化一个StaticLayout 传入相应参数<br> StaticLayout staticLayoutHeight = new StaticLayout(textSub, paint, width, Layout.Alignment.ALIGN_NORMAL, 1, 0, false);<br> // 设置下箭头imageview距离分期期数内容的上间距<br> int height = staticLayoutHeight.getHeight();<br> layoutParamsImageView.topMargin = (int) (height - dp2px(MainActivity.this, 12f));<br> <br> // 下箭头imageview的点击事件<br> String finalContentSub = textSub;<br> imageView.setOnClickListener(v -> {<br> // 内容是否已展开<br> if (!textView.isSelected()) {<br> // 内容还未展开<br> // 将所有的内容显示出来<br> textView.setText(text);<br> layoutParamsImageView.topMargin = staticLayout.getHeight();<br> // 标记评价内容已展开<br> textView.setSelected(true);<br> } else {<br> // 将截取后的内容显示出来<br> textView.setText(finalContentSub);<br> layoutParamsImageView.topMargin = (int) (staticLayoutHeight.getHeight() - dp2px(MainActivity.this, 12f));<br> // 标记内容未展开<br> textView.setSelected(false);<br> <br> }<br> });<br> } else {<br> // 没有超过最大显示行数<br> textView.setText(text);<br> // 隐藏下箭头的imageview<br> imageView.setVisibility(View.GONE);<br> }<br> }<br> });<br> }<br> <br> /**<br> * dp转为px<br> * @param context<br> * @param dipValue<br> * @return<br> */<br> private float dp2px(Context context, float dipValue) {<br> if (context == null) {<br> return 0;<br> }<br> final float scale = context.getResources().getDisplayMetrics().density;<br> return (float) (dipValue * scale + 0.5f);<br> }<br>} |
就是用了一个【StaticLayout】对象,这个对象专门用来操作textview的,通过它,可以知道需要显示某文本时,所需要的行数,每一行的宽度、下标等。这样,就可以用subString来进行字符串的截取操作,再设置全显示还是部分显示了。
以上就是 直播电商平台开发,点击查看更多显示所有内容,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!