如何设置可跨文本视图之间的边距?

2023-12-25

我正在尝试创建可扩展的文本视图并在 EditText 中显示它。因此,用户可以在 EditText 中输入一些内容,如果用户按下键盘的 Enter 按钮,那么我会将此文本转换为可跨文本视图,此用户可以再次开始输入并按键盘的 Enter 按钮,然后再次创建第二个可跨文本视图,并将其显示在编辑文本但是。

我卡在哪里了?

当我创建两个可跨越的文本视图时,这两个文本视图彼此稍微重叠。我想在这两个文本视图之间设置边距。

我还尝试使用设置文本视图之间的边距布局参数 http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html但没有成功。

这是显示 EditText 中文本视图相互重叠的图像。

y of spicy隐藏在下面tasty

这是我的代码。

txtDishTags.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId,
                KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH
                    || actionId == EditorInfo.IME_ACTION_NEXT
                    || actionId == EditorInfo.IME_ACTION_DONE
                    || actionId == EditorInfo.IME_ACTION_GO) {
                txtDishTags.dismissDropDown();
                  if(txtDishTags.getText().toString().trim().length()>=1){
                isEntered = true;

                String[] separated = tags.split(",");
                tags = separated[separated.length-1];
                if(tags.trim().length()>=1){
                TextView tv = createContactTextView(tags);
                BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv);
                bd.setBounds(-20, 0, bd.getIntrinsicWidth(),
                        bd.getIntrinsicHeight());
                sb.append(tags + ",");
                sb1 = new SpannableStringBuilder();
                sb1.append(tags + ",");
                sb.setSpan(new ImageSpan(bd),
                        sb.length() - tags.length(), sb.length(),
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                sb.setSpan(clickSpan, sb.length() - tags.length(),
                        sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                txtDishTags.setText("");
                txtDishTags.setText(sb);    
                int length = sb.length();
                txtDishTags.setSelection(length, length);
                }
                }
            }
            return false;
        }
    });  

public TextView createContactTextView(String text) {
    //llp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 44);
        //llp.setMargins(5, 0, 20, 0);
    TextView tv = new TextView(this);
    tv.setText(text);
    tv.setTextSize(30);     
    Typeface faceBook = Typeface.createFromAsset(getAssets(),
            "fonts/eau_sans_book.otf");
    tv.setTypeface(faceBook);   
    tv.setTextColor(getResources().getColor(R.color.backgroundcolor));
    tv.setBackgroundResource(R.color.textviewbubble);
    //tv.setLayoutParams(llp);
    Resources r = getResources();
    int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
            44, r.getDisplayMetrics());
    tv.setHeight(px);
    return tv;
}

public static Object convertViewToDrawable(View view) {
    int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
    view.measure(spec, spec);
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

    Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(),
            view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    c.translate(-view.getScrollX(), -view.getScrollY());
    view.draw(c);
    view.setDrawingCacheEnabled(true);
    Bitmap cacheBmp = view.getDrawingCache();
    Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
    view.destroyDrawingCache();
    return new BitmapDrawable(viewBmp);
}  

我尝试使用以下代码设置文本视图之间的边距

 llp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 44);
 llp.setMargins(5, 0, 20, 0);
 tv.setLayoutParams(llp);   

我还为 Textview 设置了 LeftPadding,但似乎第一个 textview 没有得到它。即使我将高度设置为 textview,但似乎 textview 根本没有获取布局参数。喜欢

int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
        44, r.getDisplayMetrics());
tv.setHeight(px);

请给个参考或者提示。
提前致谢


我发现了一些问题。您需要进行指定的更改,一切都应该正常。

步骤1)更新setBounds参数

在下面的行中,更新setBounds参数来自-20 to 0如下:

BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv);
bd.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight());

这很重要,因为您设置了错误的边界,这会导致标签重叠。

步骤 2) 修复错误sb.setSpan

如果您按照步骤 1 操作并运行代码,您会发现当您尝试将文本替换为ImageSpan,您传递了错误的值(您没有考虑到","(逗号)字符结尾)。更新以下行以包含-1:

sb.setSpan(new ImageSpan(bd), sb.length() - tags.length() - 1, sb.length() - 1,
           Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

现在您的输出将显示正确并且中间有逗号。

步骤 3) 在标签之间添加间距

为了回答您最初的问题,如何添加间距,我建议您修改代码以包括", "不同跨度之间。您还可以修改它以仅使用" "空间。定义一个contentBetweenTags变量并将其设置为您想要的值。您可以按照以下方法执行此操作:

String contentBetweenTags = ", ";
sb.append(tags + contentBetweenTags);
sb1 = new SpannableStringBuilder();
sb1.append(tags + contentBetweenTags);
sb.setSpan(new ImageSpan(bd), 
           sb.length() - tags.length() - contentBetweenTags.length(), 
           sb.length() - contentBetweenTags.length(), 
           Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

步骤4)选择正确的"space"特点

万一您对两个标签之间的“边距/间距”不满意,您可以使用众多标签之一unicode 空格字符 http://www.cs.tut.fi/~jkorpela/chars/spaces.html可用的。它们有不同的宽度,您可以根据您的愿望/喜好使用其中任何一种。

这是使用 unicode 的最终代码和示例屏幕截图\u2002:

BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv);
bd.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight());
String contentBetweenTags = ",\u2002";
sb.append(tags + contentBetweenTags);
sb1 = new SpannableStringBuilder();
sb1.append(tags + contentBetweenTags);
sb.setSpan(new ImageSpan(bd), 
           sb.length() - tags.length() - contentBetweenTags.length(), 
           sb.length() - contentBetweenTags.length(), 
           Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设置可跨文本视图之间的边距? 的相关文章

  • 使用 JSONArray 还是普通数组来存储/读取数据更有效?

    我正在使用一个连接到PHP MySQL返回所有内容的服务器JSON格式 例如 用户列表作为JSONArray of JSONObject 每个对象都包含单个用户的信息 姓名 位置 电话号码等 处理这种格式的信息时 将所有内容保留在其中会更有
  • Android 应用程序安装失败:包 com.my.app 在条目 AndroidManifest.xml 处没有证书

    在 Android Studio 中 我生成了带有密钥库等的签名 APK 将 APK 安装到设备上时失败 并显示 无法安装应用程序 并且在 Android Monitor 中我看到以下行 Package com my app has no
  • 如何在android中显示对话框之外的图像?

    我试图在对话框片段的顶部显示配置文件图像 一半在图像之外 我在下面附加了示例对话框 就像那样 并尝试了旧 Stackoverflow 解决方案中的所有 FrameLayout 协作 但我无法存档此内容 请给我正确的解决方案 谢谢 Updat
  • 使用 Fragment 在工具栏中实现 SearchView

    当前情况 我的应用程序主页由导航抽屉组成 因此我将视图作为片段加载 我的工具栏中也有搜索图标 我在中实现了它menu xml 下一步我实施了SearchView通过以下问题的答案来获取搜索图标在工具栏中实现搜索 https stackove
  • 改造中的多个队列导致内存不足错误?

    我正在使用retrofit2 做我的项目 当我的呼叫失败时 我再次重复相同的呼叫 重复此 呼叫使我的应用程序强制关闭 当我查看日志时 我得到了错误日志 如下所示 我觉得这是由于同一呼叫的多次排队造成的 所以我在排队之前就这样做了 我打电话给
  • Android 全屏对话框确认和拒绝操作

    材料设计中的全屏对话框应该在操作栏 工具栏上有确认和拒绝操作 我的问题是 我该怎么做 显示对话框 getFragmentManager beginTransaction add R id container new MyDialogFrag
  • 退出设备上的 system.img

    我正在为我们部署给客户的设备 LG p509 Optimus 1 开发自动应用程序更新解决方案 我们可以控制这些设备 并且目前在它们上安装自定义内核 但不是完整的自定义 ROM 由于我们试图在设备上自动更新我们的应用程序 因此我们需要由我们
  • ExpandableListview OnGroupClickListener 未触发

    我正在关注这个 以编程方式折叠 ExpandableListView 中的组 https stackoverflow com questions 4314777 programmatically collapse a group in ex
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • Android -room 持久库 - DAO 调用是异步的,因此如何获取回调?

    从我读到的Room 不允许您在主线程上发出数据库查询 因为可能会导致主线程延迟 所以想象一下我正在尝试更新 UI 主线程上的文本视图 其中一些数据我将如何得到回调 让我给你举个例子 想象一下 我想将我的业务模型数据存储到一个名为 事件 的对
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • Android 上的 MIDI:Java 和/或 AIR 库

    一段时间以来 我一直在考虑在 iPad 上 重新 构建一个应用程序 其中我将使用 Objective C 和DSMI http dsmi tobw net 将 MIDI 信号发送到主机 这还不错 我的意思是 除了实际编写应用程序之外 现在我
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 在运行时更改用作背景的 Drawable xml 内的形状纯色

    我有一个 Drawable xml 文件 background xml
  • 使用 Play Integrity API 时,Firebase 电话身份验证会出现缺少客户端标识符错误

    使用 Firebase 电话身份验证注册 登录时 身份验证流程始终会启动 reCAPTCHA 流程 并在返回应用程序后发出missing client identifier error 我的设置之前适用于设备验证 安全网络 API 除了我的
  • Android 中的库可以有自己的意图过滤器吗?

    我想开发一个可以包含在其他 Android 应用程序中的库来拦截某些类型的意图 是否可以 我创建了一个库和一个测试项目 两者都有自己的AndroidManifest xml文件 在库的清单中 我为操作 TEST 定义了一个意图过滤器 但是
  • 离子初始加载时间

    我正在使用 Ionic 构建一个简单的应用程序 但我的应用程序在冷启动时的初始加载时间方面存在性能问题 这是我所做的 collection repeat 代替带有 track by 的 ng repeat 原生滚动 overflow scr
  • 如何在android中通过蓝牙向配对设备发送短信?

    在我的应用程序中 我想通过蓝牙发送和接收短信 我可以在列表视图中看到配对设备名称和地址的列表 但是当我尝试向配对设备发送文本时 什么也没有发生 在其他设备中没有收到文本 这是我向配对设备发送消息的代码 private void sendDa
  • 丢失应用程序的密钥库文件(但已启用 Google Play 应用程序签名)

    我已经失去了原来的keystore用于签署我的应用程序的文件 我的应用启用了 Google Play 应用签名 如果我联系 Google 支持人员 是否可以重置密钥 以便我可以继续上传到此包 我希望我可以做到这一点 因为应用程序签名已启用
  • 从文件路径显示图像视图?

    我需要仅使用文件名而不是资源 ID 来显示图像 ImageView imgView new ImageView this imgView setBackgroundResource R drawable img1 我在可绘制文件夹中有图像

随机推荐

  • tf.zeros() 的动态大小(与无尺寸的占位符一起使用)

    考虑以下代码 x tf placeholder float shape 42 4 y tf zeros 42 4 float xy stacked tf concat 1 x y print x get shape print y get
  • Flutter PDF 中古吉拉特语字体渲染问题

    我正在使用 Flutter 2 0 开发移动应用程序 整个应用程序采用古吉拉特语 应用程序已准备就绪 所有文本都在应用程序中完美呈现 但是当我从屏幕上的数据生成 pdf 时 古吉拉特语字体不正确渲染 我正在使用插件 pdf 3 0 1 fo
  • 指定默认下载文件夹 - 可能使用 JavaScript?

    我们目前正在开发一个基于网络的应用程序 该应用程序需要通过浏览器下载文件 理想的情况是让这些文件最终位于文件系统上的特定位置 有没有办法使文件保存和文件打开对话框默认为特定文件夹 例如 USER Downloads MyApp 我不希望它成
  • Nanoc布局编译规则

    我正在使用nanoc 我希望我的index html指向特定的布局 所以我创建了该布局 它被称为nosidebar html 我的规则如下 compile index html do layout nosidebar end 这似乎不起作用
  • 如何使用 vue-test-utils 打开 bootstrap-vue 模式?

    我使用 bootstrap 作为我的设计框架 并且一直在使用 bootstrap vue 现在我想实现一些测试来配合我的组件 我正在编写一个非常简单的测试来确保打开模式 我在 vue test utils 中使用什么来打开 bootstra
  • Spring security 具有多个登录页面

    我正在使用 Spring security 使用用户名和密码来安全登录应用程序管理部分 但现在我的客户需要为应用程序客户端部分提供另一个登录屏幕 他们将在其中拥有自己的用户名 密码来登录客户端部分 到目前为止 我已经使用以下 spring
  • 四次函数的根

    我在进行一些高级碰撞检测时遇到了一种情况 需要计算四次函数的根 我使用法拉利的通用解决方案编写了一个似乎运行良好的函数 如下所示 http en wikipedia org wiki Quartic function Ferrari 27s
  • VBA如何在没有.Select的情况下复制单元格的内容

    我正在写一个方法 可以采用Target并将单元格完全粘贴到另一个单元格中 该单元格是一个带有一些奇特格式的运输标签 我有办法做到吗 原来我有这个 Worksheets Label Range A1 Value Worksheets Get
  • 使用 getSupportFragmentManager() 时 findFragmentByTag() 返回 null

    我正在使用支持库 ActionBar 因为我使用的是较旧的最小 SDK 在活动中 我使用 FragmentTabHost 因为我有 3 个选项卡 ActionBar 还有一个 SearchView 因此当进行搜索时 第三个选项卡将与搜索结果
  • Android独特的闪屏:如何让它充满屏幕?

    我有一个独特的启动画面 名为splash png 尺寸为1280x1280 150dpi 我用react native bootsplash在我的 React Native 项目中 但我认为这并不重要 我的问题很简单 如何使我的启动画面在纵
  • Android 应用程序正在安装两个启动器图标

    This is not的副本Android 应用程序创建两个启动器图标 https stackoverflow com questions 8697943 android application creating two launcher
  • 如何从我们的 Android 应用程序中删除其他应用程序缓存?

    我正在尝试开发一个可以删除其他应用程序缓存数据的Android应用程序 我尝试浏览所有博客 但没有一个对我有用 我可以通过以下代码清除我的应用程序的缓存 File cache getCacheDir File appDir new File
  • 用户警告的堆栈跟踪

    我在日志中看到这样的警告 py warnings init WARNING bs4 init py 219 UserWarning foo looks like a filename not markup You should probab
  • func 中返回空,golang 中返回值[重复]

    这个问题在这里已经有答案了 我正在阅读一些编写的代码Golang在Github上发现了一段非常有趣的代码 我把它简化得更清楚了 func Insert docs interface err error for i 0 i lt 3 i er
  • Android SDK-camera2-在TextureView上绘制矩形

    我是 android 开发的新手 我发现很难在camera2 api 上找到好的例子 我慢慢地解决了大多数问题 但在这个问题上我陷入了困境 在默认相机中 当您触摸屏幕进行对焦时 屏幕会短暂显示一个矩形的对焦区域 我想做类似的事情 或者在这种
  • 组合两个 foreach 循环

    我有两个 foreach 循环 第一个 foreach items as key gt item keywords explode qsvarus title key preg replace b implode keywords b lt
  • 使用 Pandas 读取 GPS RINEX 数据

    我正在阅读 RINEX 3 02 第 60 页 观测数据文件来进行一些基于时间的卫星 ID 过滤 并最终将在稍后重建它 这将使我能够更好地控制卫星的选择 随着时间的推移 我可以通过 RTK 后处理为位置解决方案做出贡献 不过 特别是对于这一
  • 当用户关闭 Chrome 时关闭 Native Host

    我正在开发一个使用 C 本机主机的 Chrome 扩展 在background js 脚本 持久设置为 false 中 我使用 chrome onstartup 事件创建与 C 主机的连接 我希望只要用户积极使用 Chrome 我的主机就能
  • 关闭QMainWindow的正确方法

    我最近从 tkinter 更改为 Pyqt5 因为我正在 Python 3 7 8 中开发一个半大型应用程序 每次我不得不关闭窗口时我都会使用该方法self destroy 并且有一个很小的机会 当我关闭所有程序并且没有窗口时 解释器仍在运
  • 如何设置可跨文本视图之间的边距?

    我正在尝试创建可扩展的文本视图并在 EditText 中显示它 因此 用户可以在 EditText 中输入一些内容 如果用户按下键盘的 Enter 按钮 那么我会将此文本转换为可跨文本视图 此用户可以再次开始输入并按键盘的 Enter 按钮