gpt4 book ai didi

android - 添加 BulletSpan 时 EditText 不增加宽度

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:58 24 4
gpt4 key购买 nike

将 BulletSpan 添加到 EditText 时,EditText 的大小不会随着项目符号添加的前导空格而增加。这会导致文本环绕或滚动到看不见的地方。

到目前为止,我无法强制 EditText 重新正确测量其宽度。

不幸的是,我没有足够的声誉来说明这种情况。让我试着描述一下情况。

  1. 将 BulletSpan 添加到 EditText 的底层 Editable 时,生成的较大段落会滚动到右边缘后面。

    |0123456789|  -> | • 0123456|789  

    最后一个字符滚动到右边缘后面。

  2. 将更改后的可编辑项分配给 EditText 时,字段的宽度保持不变并且较宽的文本换行。

    |0123456789| -> | • 0123456|
    | 789 |

    在这两种情况下,EditText 都不会补偿前导空格的宽度。

  3. 在段尾添加额外的字符

    | • 0123456789xxx|
    | xxx |

    当向 EditText 添加字符时,字段的大小按预期增加,但不考虑添加的项目符号及其边距的空间并保持换行。

关于 BulletSpans 的几个问题已经被问到,但之前没有关于这种奇怪行为的问题。这两天,我尝试了很多 xml 中的布局设置和代码中的很多选项,不幸的是都无济于事。

有人有什么建议吗?

代码:MainActivity.java

        mToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean showBullet) {
final Editable editable = mEditText1.getText();

if (showBullet) {
// Add bullet
editable.setSpan(new BulletSpan(50), 0, editable.length(), Spannable.SPAN_PARAGRAPH);
} else {
// Remove bullet
BulletSpan[] spans = editable.getSpans(0, editable.length(), BulletSpan.class);
if (spans.length > 0) {
editable.removeSpan(spans[0]);
}
}
// See what happens when assigning the editable to an other TextView
mEditText2.setText(editable);
}
});

布局:activity_main.xml(部分)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp">

<!-- ToggleButton and TextView removed -->

<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView"
android:inputType="textMultiLine"
android:text="0123456789" />

最佳答案

尝试覆盖 BulletSpan 方法并更改其实现:

public class MyBulletSpan extends BulletSpan {

@Override
public int getLeadingMargin(boolean first) {
return super.getLeadingMargin(first);
}

@Override
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout l) {
super.drawLeadingMargin(c, p, x, dir, top, baseline, bottom, text, start, end, first, l);
}
}

关于android - 添加 BulletSpan 时 EditText 不增加宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27172276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com