Android 在TextView前面添加多个任意View且不影响换行

这篇具有很好参考价值的文章主要介绍了Android 在TextView前面添加多个任意View且不影响换行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现效果如下:

Android 在TextView前面添加多个任意View且不影响换行,Android,Android 自定义View,自定义TextView,TextView加标签,TextView加多个标签


如上,将头像后面的东西看作一个整体,因为不能影响后面内容的换行,且前面控件的长度是可变的,所以采用自定义View的方法来实现:

/**
 *  CSDN深海呐 https://blog.csdn.net/qq_40945489/article/details/109399596
 */
public class TagTextView extends AppCompatTextView {

   private Context mContext;
   private TextView mTabText;
   private StringBuffer mContentStringBuffer;

   //必须重写所有的构造器,否则可能会出现无法inflate布局的错误!
   public TagTextView(Context context) {
      super(context);
      mContext = context;
   }


   public TagTextView(Context context, AttributeSet attrs) {
      super(context, attrs);
      mContext = context;
   }


   public TagTextView(Context context, AttributeSet attrs, int defStyleAttr) {
      super(context, attrs, defStyleAttr);
      mContext = context;
   }


   public void setContentAndTag(String content, List<String> dataList, List<Integer> typeList) {
      mContentStringBuffer = new StringBuffer();
      for (String item : dataList) {//将内容添加到content,用drawable替代这些内容所占的位置
         mContentStringBuffer.append(item);
      }
      mContentStringBuffer.append(content);
      SpannableString spannableString = new SpannableString(mContentStringBuffer);
      for (int i = 0; i < dataList.size(); i++) {
         String item = dataList.get(i);
         View view = LayoutInflater.from(mContext).inflate(R.layout.layout_texttab, null);//R.layout.tag是每个标签的布局
         switch (typeList.get(i)){
            case 1:
               view = LayoutInflater.from(mContext).inflate(R.layout.layout_texttab1, null);
               break;
            case 2:
               view = LayoutInflater.from(mContext).inflate(R.layout.layout_texttab2, null);
               break;
         }
         mTabText = view.findViewById(R.id.tabText);
         mTabText.setText(item);
         Bitmap bitmap = convertViewToBitmap(view);
         Drawable d = new BitmapDrawable(bitmap);
         d.setBounds(0, 0, mTabText.getWidth(), mTabText.getHeight());
         ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);//图片对齐底部
         int startIndex;
         int endIndex;
         startIndex = getLastLength(dataList, i );
         endIndex = startIndex + item.length();
         spannableString.setSpan(span, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
      }
      setText(spannableString);
      setGravity(Gravity.CENTER_VERTICAL);
   }


   private static Bitmap convertViewToBitmap(View view) {
      view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
      view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
      view.buildDrawingCache();
      Bitmap bitmap = view.getDrawingCache();
      return bitmap;
   }


   private int getLastLength(List<String> list, int maxLength) {
      int length = 0;
      for (int i = 0; i < maxLength; i++) {
         length += list.get(i).length();
      }
      return length;
   }
}

使用举例:  (😂抱歉啊使用这边没有用Java写,不会Kotlin的应该也能看懂啥意思)

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initView();
    }

    private fun initView() {
        setText("很长很长的一段话一段话一段话  真的很长很长很长......")
    }
    private fun setText(string: String) {
        val title : TagTextView = findViewById(R.id.main_text)
        val dataList = arrayListOf<String>()
        dataList.add("用户的名字")
        dataList.add("48")
        dataList.add("  长老")
        val dataListType = arrayListOf<Int>()
        dataListType.add(0);
        dataListType.add(1);
        dataListType.add(2);
        title.setContentAndTag(""+string+"", dataList,dataListType)

    }
}

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/head" />

        <com.example.demo.TagTextView
            android:id="@+id/main_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="当前是用户发的一段话很长很长的一段话,非常长非常长!!!!!!"
            android:textColor="@color/TextColor"
            android:textSize="12sp" />

    </LinearLayout>

</LinearLayout>

la:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tabText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawablePadding="6dp"
        android:drawableRight="@mipmap/sex"
        android:gravity="center"
        android:paddingRight="8dp"
        android:text="CSDN深海呐"
        android:textColor="@color/HeadText"
        android:textSize="12sp" />

</LinearLayout>

dataListType的 0,1,2 分别对应三种不同的布局赋值,XML文件我就不全部发出来了,这里可以自主发挥。文章来源地址https://www.toymoban.com/news/detail-696191.html

到了这里,关于Android 在TextView前面添加多个任意View且不影响换行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android TextView 加入滚动功能

    安卓的TextView,一页放不下,就需要用到滚动功能,代码如下,加入ScrollView即可。 参考: Android设置TextView可滚动_互联网小熊猫的博客-CSDN博客_android textview 滚动 总结:这个方法虽然可以使用,但是滚动的效果很不好,PASS. 参考:Android TextView更新内容后自动滑行到最后一行

    2024年02月13日
    浏览(82)
  • Android中加载一张大图,如何正常显示且不发生OOM ?

    问题 在 Android 中,获取一个 1000*20000 ( 宽1000px,高20000px )的大图,如何正常加载显示且不发生 OOM 呢? 分析 Android 系统会为应用分配一定大小的堆内存 而如果遇到高分辨率图片时,如果它的配置为 ARGB (每个像素占 4Byte ) 那么它要消耗的内存为 1000200004=800000000 ,大约是 80MB 这样

    2024年02月11日
    浏览(39)
  • android之TextView自由选择复制

    根据时代进步,那些干产品的也叼砖起来了,今天就遇到一个需求,需要对TextView的文案进行自由选择复制,不怕,我们是勇敢牛牛。 代码如下(示例): 感觉东西是有点多,但比较实用,而且直接复制去就可以用,自己写主要费大脑不是。

    2024年02月07日
    浏览(29)
  • Android 之 TextView (文本框)详解

    学习完Android中的六大布局,从本节开始我们来一个个讲解Android中的UI控件,本节给大家带来的UI控件是:TextView(文本框),用于显示文本的一个控件,另外声明一点,我不是翻译API文档,不会一个个属性的去扣,只学实际开发中常用的,有用的,大家遇到感觉到陌生的属性可以

    2024年02月09日
    浏览(39)
  • Android中TextView滚动实现方式

    下面展示一些 内联代码片 。

    2024年02月21日
    浏览(38)
  • 第四篇Android--TextView使用详解

    TextView是View体系中的一员,继承自View,用于在界面中展示文字。 基本用法: 1.   设置点击事件: 2.设置文字颜色1): 上面方式设置的颜色只有一种状态。如果需要TextView展示时一种颜色,按下时展示另外一种颜色,可以通过设置selector实现。     设置文字颜色2):   在

    2024年02月07日
    浏览(39)
  • Android TextView字体加粗效果

    两种不同的字体加粗效果: 正常情况下,TextView 设置字体加粗效果,直接在 xml 中设置, 第二种,则是通过代码设置 TextView,此处就不要设置 blod 了 看下,两种字体的加粗效果,看情况设置吧

    2024年02月07日
    浏览(44)
  • WindowManager Flag对View触摸事件的影响

    FLAG_NOT_FOCUSABLE:使当前View不会获得焦点,此View会将焦点传递到下层可获取焦点的View FLAG_NOT_TOUCH_MODAL:允许当前View获取焦点,也允许View范围外的点击事件传递给下层的View FLAG_NOT_TOUCHABLE:使View无法获取焦点 FLAG_WATCH_OUTSIDE:当View范围外的点击事件发生时,View将收到MotionEven

    2024年02月03日
    浏览(44)
  • 【Android】TextView字体大小自适应的方式

    众所周知,同样的一个话在中英文环境中的字符长度是不一样的。如果TextView没有做相应的适配,那么在切换环境之后读取xml中文本会导致UI变样。尤其是英文文本容易展示不全的问题。 在android 8 以及以上添加了用来动态改变TextView字体大小的新特性 Autosizing TextViews,只需要

    2024年02月13日
    浏览(42)
  • Android 妙用TextView实现左边文字,右边图片

    原文: Android 妙用TextView实现左边文字,右边图片 - Stars-One的杂货小窝 有时候,需要文字在左边,右边有个箭头,我个人之前会有两种做法: 使用线性布局来实现 或者使用约束布局,一个左对齐,一个右对齐 这几天突然想到是否可以使用TextView的设置图标的方式实现,研究发现确实可以

    2024年02月17日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包