直播电商平台开发,点击查看更多显示所有内容

直播电商平台开发,点击查看更多显示所有内容

 实现代码:

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来进行字符串的截取操作,再设置全显示还是部分显示了。

以上就是 直播电商平台开发,点击查看更多显示所有内容,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示