在线直播系统源码,个人主页用户标签添加实现
在线直播系统源码,个人主页用户标签添加实现的相关代码
代码实现: 自定义TextView
1 | public class TagTextView extends AppCompatTextView {<br> private View view; //标签布局的最外层布局<br> private Context mContext;<br> private TextView tv_tag;<br> private StringBuffer content_buffer;<br> //必须重写所有的构造器,否则可能会出现无法inflate布局的错误!<br> public TagTextView(Context context) {<br> super(context);<br> mContext = context;<br> }<br> public TagTextView(Context context, AttributeSet attrs) {<br> super(context, attrs);<br> mContext = context;<br> }<br> public TagTextView(Context context, AttributeSet attrs, int defStyleAttr) {<br> super(context, attrs, defStyleAttr);<br> mContext = context;<br> }<br> public void setContentAndTag(String content, List<String> tags) {<br> content_buffer = new StringBuffer();<br> for (String item : tags) {//将每个tag的内容添加到content后边,之后将用drawable替代这些tag所占的位置<br> content_buffer.append(item);<br> }<br> content_buffer.append(content);<br> SpannableString spannableString = new SpannableString(content_buffer);<br> for (int i = 0; i < tags.size(); i++) {<br> String item = tags.get(i);<br> View view = LayoutInflater.from(mContext).inflate(R.layout.layout_texttab, null);//R.layout.tag是每个标签的布局<br> tv_tag = view.findViewById(R.id.tv_tag);<br> tv_tag.setText(item);<br> Bitmap bitmap = convertViewToBitmap(view);<br> Drawable d = new BitmapDrawable(bitmap);<br> d.setBounds(0, 0, tv_tag.getWidth(), tv_tag.getHeight());//缺少这句的话,不会报错,但是图片不回显示<br> ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);//图片将对齐底部边线<br> int startIndex;<br> int endIndex;<br> startIndex = getLastLength(tags, i );<br> endIndex = startIndex + item.length();<br> Log.e("tag", "the start is" + startIndex + "the end is" + endIndex);<br> spannableString.setSpan(span, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);<br> }<br> setText(spannableString);<br> setGravity(Gravity.CENTER_VERTICAL);<br> }<br> private static Bitmap convertViewToBitmap(View view) {<br> view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));<br> view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());<br> view.buildDrawingCache();<br> Bitmap bitmap = view.getDrawingCache();<br> return bitmap;<br> }<br> private int getLastLength(List<String> list, int maxLength) {<br> int length = 0;<br> for (int i = 0; i < maxLength; i++) {<br> length += list.get(i).length();<br> }<br> return length;<br> }<br>} |
自定义一个layout_texttab布局
1 | <?xml version= "1.0" encoding= "utf-8" ?><br><LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" <br> android:layout_width= "match_parent" <br> android:layout_height= "match_parent" <br> android:orientation= "vertical" ><br> <TextView<br> android:id= "@+id/tv_tag" <br> android:layout_width= "wrap_content" <br> android:layout_height= "wrap_content" <br> android:layout_gravity= "center_vertical" <br> android:layout_marginBottom= "2dp" <br> android:layout_marginRight= "5dp" <br> android:background= "@drawable/round_blue" <br> android:gravity= "center_vertical" <br> android:paddingBottom= "2dp" <br> android:paddingLeft= "3dp" <br> android:paddingRight= "3dp" <br> android:text= "标签" <br> android:textColor= "@android:color/white" <br> android:textSize= "12sp" /><br></LinearLayout> |
使用
1 | <com.zc.tool.TagTextView<br> android:id= "@+id/text_tab" <br> android:layout_width= "match_parent" <br> android:layout_height= "wrap_content" <br> android:layout_margin= "12dp" <br> android:textColor= "@color/white" <br> android:gravity= "center" /><br> List<String> tags = new ArrayList<>();<br> tags.add( "@用户" );<br> tags.add( "@程序猿" );<br> tags.add( "@产品经理" );<br> textTab.setContentAndTag( "改个需求" , tags); |
以上就是在线直播系统源码,个人主页用户标签添加实现得相关代码, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现