标签: imagespan

对齐ImageSpan中心垂直周围的文本

我有ImageSpan一段文字.我注意到的是,周围的文本总是在文本行的底部绘制 - 更准确地说,文本行的大小随着图像的增长而增加,但文本的基线不会向上移动.当图像明显大于文本大小时,效果相当难看.

这是一个示例,大纲显示的界限TextView: 在此输入图像描述

我试图让周围的文本相对于正在显示的图像垂直居中.以下是蓝色文本显示所需位置的相同示例:

在此输入图像描述

以下是我受约束的约束:

  • 我不能使用复合drawables.图像必须能够在单词之间显示.
  • 根据内容,文本可以是多行的.我无法控制这一点.
  • 我的图像比周围的文字大,我不能减小它们的大小.虽然上面的示例图像大于实际图像(以演示当前行为),但实际图像仍然足够大,以至于此问题显而易见.

我已尝试android:gravity="center_vertical"在TextView上使用该属性,但这没有任何效果.我认为这只是文本行的垂直居中,但在文本行中,文本仍然在底部绘制.

我目前的思路是创建一个自定义跨度,根据行的高度和当前文本大小来移动文本的基线.这个跨度将包含整个文本,我将不得不计算与ImageSpans 的交集,所以我也可以避免移动图像.这听起来相当令人生畏,我希望有人能提出另一种方法.

任何和所有的帮助表示赞赏!

android text spannable imagespan

39
推荐指数
5
解决办法
2万
查看次数

有没有办法在不中断文本的情况下在TextView中插入ImageSpan?

似乎为了在Android中将SpanSpan添加到Spannable,我必须用Image替换一些文本.例如:

Spannable span = new SpannableString("Foo imageplace Bar!");
Drawable android = context.getResources().getDrawable(R.drawable.android);
android.setBounds(0, 0, 32,32);
ImageSpan image = new ImageSpan(android, ImageSpan.ALIGN_BASELINE);
span.setSpan(image, 4, 14, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)

这将用图像替换"imageplace".因为我正在处理复杂的多跨文本和重复,所以在我想要android图标的每个地方插入无意义的文本有点令人头疼.但看起来如果跨度的开始和结束是相同的,则不会包含图像.有没有办法解决?

android spannablestring imagespan

16
推荐指数
2
解决办法
1万
查看次数

如何在TextView Android上使用带有文本的图像(设备的存储图像)?

我正在创建聊天应用程序,我从服务器获取EMOJI(IMAGE URLS).

我使用这个图像(表情符号网址)在我TextView的下面的代码行中的文本.

String stringWithHtml = "Sample string with an <img src=\"http://MY_SERVER.emoji.s3.amazonaws.com/cf68/5794d5f7895fa10a8f8e1350/imgList/5794d5f7895fa10a8f8e136a.png\"></img>" +
                        "<img src=\"http://MY_SERVER.emoji.s3.amazonaws.com/cf68/5794d5f7895fa10a8f8e1350/imgList/5794d5f7895fa10a8f8e135a.png\"></img>"+
                        "<img src=\"http://MY_SERVER.emoji.s3.amazonaws.com/cf68/5794d5f7895fa10a8f8e1350/imgList/5794d5f7895fa10a8f8e135b.png\"></img>"; 


Drawable drawable = Drawable.createFromStream(new URL(source).openStream(), "src name");
                    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

Spanned spannedValue = Html.fromHtml(stringWithHtml, drawable, null); 
MY_TEXTVIEW.setText(spannedValue);
Run Code Online (Sandbox Code Playgroud)

这一切,我正在使用AsynTask并获得如下预期结果: -

我的结果

现在我将所有表情符号(图像)存储在我的设备上,并希望在我的文本中使用它TextView.

我的问题是我们如何在TextView上使用带有文本的设备(存储图像)?

我在SO上搜索了它但没有得到预期的结果.请检查我访问过的以下链接.

1.第一链接
2.第二链接
3.第三链接
4.第四链接

我已经使用了ImageSpan它,但另一个问题出现了,我已经在SO 上发布了问题点击这里

请帮我解决这个问题.谢谢

java android image imagespan

11
推荐指数
1
解决办法
943
查看次数

ImageSpan无法在Android 5上运行

我有这个功能在Android 4.4.1上工作正常,但在5.0+上断.

  public static SpannableStringBuilder prependImage(Drawable drawable, String text) {
    SpannableStringBuilder builder = new SpannableStringBuilder("  " + text);
    builder.setSpan(new ImageSpan(drawable), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    return builder;
  }
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

class MyButton extends Button {

    // ... snip ...

    setText(
        prependImage(
            getDrawable(imageResource, color),                     
            getContext().getString(stringResource)),
        BufferType.SPANNABLE);
Run Code Online (Sandbox Code Playgroud)

这是getDrawable()上面引用的方法:

 private Drawable getDrawable(int resource, int color) {
    final Resources resources = getContext().getResources();
    Drawable drawable = resources.getDrawable(resource);
    if (drawable != null) {
      drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
      drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    }
    return drawable;
  }
Run Code Online (Sandbox Code Playgroud)

当我调试时,一切似乎都成功了,但没有绘制图像.我有什么想法可能做错了吗?

android imagespan

9
推荐指数
2
解决办法
2856
查看次数

TextView具有lineSpacing时的ImageSpan.ALIGN_BASELINE

我想将我ImageSpan的文本基线对齐,但我还需要在行之间添加一些间距.
问题是,当我添加行间距时,ImageSpan它不会与文本的基线对齐,而是与文本的基线对齐baseline+lineSpacing,因此它看起来比它应该低.

这有解决方法吗?

编辑:进一步说明:

  1. 没有 它的样子lineSpacing(箭头是ImageSpan).它与基线正确对齐.
    在此输入图像描述

  2. 如果我添加,它看起来如何 android:lineSpacingMulitiplier="1.2"
    在此输入图像描述

编辑2代码:
XML:

<com.kushtrim.example.views.CustomTypefaceTextView
    android:id="@+id/descId"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:lines="3"
    android:gravity="center_vertical"
    android:layout_marginLeft="@dimen/_45"
    android:layout_marginTop="@dimen/_6"
    android:layout_marginBottom="@dimen/_20"
    app:font_type="merriweather_regular"
    android:textSize="@dimen/f40"
    android:lineSpacingMultiplier="1.2"
    android:textColor="@color/black"
    android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    android:ellipsize="end" />
Run Code Online (Sandbox Code Playgroud)

其他相关方法:

    private Spannable getContentText(ContactRaport contactRaport) {
    DateTime dateTime = new DateTime(contactRaport.contactDate);

    String datePart = dateTime.getDayOfMonth() + " " + dateTime.monthOfYear().getAsShortText(new Locale("nl")) + "; ";
    String completeText = datePart + contactRaport.note;

    Typeface font1 = Typeface.createFromAsset(context.getAssets(), "MyFont1.ttf"); …
Run Code Online (Sandbox Code Playgroud)

android textview imagespan

8
推荐指数
1
解决办法
1785
查看次数

如何在editText中处理imageSpan上的onClick事件?

我正在开发一个应用程序,用户从库中选择一个图像,它将添加到editText中,现在我想如果用户点击editText中的图像,它应该在fullScreen中打开,我使用下面的代码: -

public void addToEdt(Bitmap bitmap){
    SpannableString ss = new SpannableString("abc");
    Drawable d = new BitmapDrawable(getResources(), bitmap);
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
    ss.setSpan(span, 0, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    edt_note.setTransformationMethod(null);
    edt_note.getText().insert(edt_note.getSelectionStart(), ss);

    final int start = ss.getSpanStart(span);
    final int end = ss.getSpanEnd(span);

    ClickableSpan click_span = new ClickableSpan() {
        @Override
        public void onClick(View widget) {
                   Toast.makeText(getApplicationContext(),"Clicked",Toast.LENGTH_LONG).show();
        }
    };

    ClickableSpan[] click_spans = ss.getSpans(start, end,  ClickableSpan.class);

    if(click_spans.length != 0) {
        // remove all click spans
        for (ClickableSpan c_span : click_spans) { …
Run Code Online (Sandbox Code Playgroud)

android android-edittext spannable imagespan

8
推荐指数
2
解决办法
3489
查看次数

降低ImageSpan的高度和宽度

我将Image Drawable设置为Textn的SpannableString,但图像比文本更大,使它看起来很奇怪.我需要减小imagespan的大小,使其与文本的高度相同:

这是我尝试过的:

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

SpannableStringBuilder builder = new SpannableStringBuilder(holder.temptext.getText());
builder.setSpan(new ImageSpan(drawable), selectionCursor - ":)".length(), selectionCursor, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.temptext.setText(builder);
holder.temptext.setSelection(selectionCursor);

holder.caption.setText(builder);
Run Code Online (Sandbox Code Playgroud)

android textview android-layout spannablestring imagespan

7
推荐指数
1
解决办法
3955
查看次数

TabLayout图标未显示

我正在尝试使用tablayout制作标签符合此https://guides.codepath.com/android/Google-Play-Style-Tabs-using-TabLayout#add-custom-view-to-tablayout

现在我正在尝试使用imagespan显示图标而不是文本.但没有运气,任何人都可以帮助指出本教程中缺少的内容吗?

这是代码

public class HomeActivity extends FragmentActivity {

//Fragments List
public ArrayList <Fragment> fragmentList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    setUpFragmentList();

    // Get the ViewPager and set it's PagerAdapter so that it can display items
    ViewPager viewPager = (ViewPager) findViewById(R.id.home_viewpager);
    viewPager.setAdapter(new HomeFragmentPagerAdapter(getSupportFragmentManager(), HomeActivity.this, fragmentList));

    // Give the TabLayout the ViewPager
    TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
    //start this 2 are to set the tab to fill entire screen
    tabLayout.setTabMode(TabLayout.MODE_FIXED);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    //end this 2 are to set the …
Run Code Online (Sandbox Code Playgroud)

icons android imagespan

5
推荐指数
2
解决办法
3316
查看次数

单击 CheckBox 中的 ClickableSpan 会更改其状态

我的复选框中有一个 ImageSpan 和 ClickableSpan,用于在复选框文本末尾显示图标并处理单击它。但是单击它会更改复选框的选中状态,这是不需要的。

当用户单击 ClickableSpan 时,如何防止更改复选框状态?

cancelPendingInputEvents()只是我需要API 16+ 的一些等效方法。另外,我不想将复选框与复选框和文本视图分开。

checkbox android imagespan

5
推荐指数
1
解决办法
1249
查看次数

如何在Android中为ImageSpan应用背景颜色?

我想在 Android 中动态应用图像范围的背景颜色。

您能提出一些想法吗?

android textview spannablestring imagespan android-spannable

3
推荐指数
1
解决办法
1639
查看次数