标签: spannablestring

对齐2个文本,1个正常,1个相反

我做了一个 应用程序有一个按钮,其中总共有4个文本,我想对齐第一个2.一个位于底部文本的最左侧,另一个位于底部文本的右侧.

所以从这个:

之前

setText(item.title + " " + item.roomId + "\n" + item.teacher + " " + item.classes);

对此:

之后(这就是我想要的)

setText(declare here a spannable);

我想我应该一起工作Spannable,我已经尝试了一些事情Alignment.ALIGN_NORMALAlignment.ALIGN_OPPOSITE,但我认为是应该首先计算底部文本的长度,然后做了比对.(我在这里找到了一个很好的例子,但它在我的设置中没有用).

我希望有人能指出我的方向.

编辑:

我不能(我认为)使用RelativeLayout或是LinearLayout因为我在另一个类(ScheduleItemView.java)中扩展按钮的原因:

/**
 * Custom view that represents a {@link ScheduleItem} instance, including its
 * title and time span that it occupies. Usually organized automatically by
 * {@link ScheduleItemsLayout} to match up against a {@link TimeRulerView}
 * instance. …
Run Code Online (Sandbox Code Playgroud)

java android alignment spannablestring

9
推荐指数
1
解决办法
897
查看次数

如何使用单词及其单击事件获取特殊字符

我有一个像这样的3字符串:

"@Username: Deliverd your order",
"YOU got trophy: KING OF COINS",
"There is a package waiting for you to pick up from #surat to #mumbai",
Run Code Online (Sandbox Code Playgroud)

我想做的是通过点击事件获得不同颜色的用户名和城市名称.

能够实现的是通过分割为":"字符来获取用户名.但我不知道如何获得城市名称和点击两者的事件.

在城市名称中,只有最后一个城市颜色在变化,如何更改城市名称颜色并获取其点击事件.

这是我试过的:

if (notifications.getTitle().contains(":")) 
{
    String[] username = notifications.getTitle().split(":");
    String uname = getColoredSpanned(username[0] + ":", "#ff7505");
    String txt = getColoredSpanned(username[1], "#000000");
    holder.txtTitle.append(Html.fromHtml(uname +" " + txt));
    holder.txtTitle.setMovementMethod(LinkMovementMethod.getInstance());
} 
else if (notifications.getTitle().contains("#"))
{
     Matcher matcher = 
            Pattern.compile("#\\s(\\w+)").matcher(notifications.getTitle());
     i=0;
     while (matcher.find())
     {
           place.add(i, matcher.group(1));
           i++;
     }
     String place1 = getColoredSpanned("#" + place.get(0), "#237BCD");
     String place2 …
Run Code Online (Sandbox Code Playgroud)

regex string android split spannablestring

9
推荐指数
1
解决办法
619
查看次数

将不同的字体和颜色设置为TextView的一部分

我试过这个:

String s = "Some big string"
SpannableStringBuilder sb = new SpannableStringBuilder(s);
//normal font for 1st 9 chars
sb.setSpan(robotoRegular, 0,9,Spannable.SPAN_INCLUSIVE_INCLUSIVE);
//bold font for rest of the chars
sb.setSpan(robotoBold, 9,s.length(),Spannable.SPAN_INCLUSIVE_INCLUSIVE);
//also change color for rest of the chars
sb.setSpan(new ForegroundColorSpan(Color.BLACK), 9,s.length(),Spannable.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(sb);
Run Code Online (Sandbox Code Playgroud)

但这没效果.

它只需要最新的setSpan,即..,Text颜色正在改变但不是字体.

android typeface spannablestring

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

文本在EditText中与ImageSpan混淆

我正在构建一个简单的聊天应用程序,用户可以在其中发送文本和表情符号.我可以将文字和表情符号发送到另一部手机.我的问题是:

1.当我输入内容并添加表情符号时:

在此输入图像描述

然后我无法在图像之前和之后输入任何文本.我可以在"o"字母前面写.系统"看到"我输入的内容,所以即使我在笑脸后输入"Honey",我也看不到它,但EditText会注册它并发送消息:

在此输入图像描述

2.当我向Edittext添加一个表情符号然后删除它时,我无法输入任何内容,因为删除的表情符号出现了.它只出现一次,所以无论我输入多少个字符,EditText看起来就像我删除表情符号之前,但文本是在没有表情符号的情况下发送的,就像在所有三种情况下一样.

3.当我在EditText中输入"something"时,在"some"之后插入一个表情符号:

在此输入图像描述

然后我将光标放在表情符号后面并删除它,这里剩下的是:

在此输入图像描述

但是当我按下发送按钮时会发送正确的消息:

在此输入图像描述

这就是表情符号按钮监听器内部的内容(当我单击表情符号将其添加到EditText时,此方法被激活).

ib_happy.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        int cursorPosition = mOutEditText.getSelectionStart();
            mOutEditText.getText().insert(cursorPosition, smileys[0]);
        SpannableStringBuilder ssb = new SpannableStringBuilder(mOutEditText.getText());
        ssb.setSpan(new ImageSpan(bitmapArray.get(0), ImageSpan.ALIGN_BASELINE), cursorPosition,  cursorPosition+2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        mOutEditText.setText(ssb, BufferType.SPANNABLE);
            mOutEditText.setSelection(cursorPosition+2);
        dialog_emoticon.dismiss();
    }
});
Run Code Online (Sandbox Code Playgroud)

android android-edittext spannablestring spannable

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

BackgroundColorSpan 调整高度或为其添加填充

我有一个应用程序,我在TextView. 我正在SpannableStringBuilder为此目的使用。

我想在这里做的一件事是能够突出显示文本。现在我尝试使用BackgroundColorSpan,但在这种情况下,文本上的背景覆盖了完整的行高。我希望它只覆盖文本。似乎没有明显的方法可以在此跨度上设置垂直填充或高度。只是颜色。

其次,我还尝试通过在该类的draw方法中绘制来子类化ReplacementSpan并实现backgroundSpan我自己的a 。但这似乎不支持多行突出显示。

谁能告诉我如何实现这种突出显示功能?基本上,我希望它像一个电子书阅读器的工作,最好的Kindle或默认的电子书阅读器Android

android ebook-reader textview spannablestring

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

Android EditText:如何通过BulletSpan创建一个空子弹段?

我对这个问题使用相同的标题,因为我认为我的问题非常类似,我仔细阅读并测试了接受的答案,但是接受的答案对我不起作用.让我来描述一下我的问题:

我的代码看起来像:

 EditText myEdit = (EditText) this.findViewById(R.id.myedit);
 myEdit.setText("a\nb\n");
 Spannable s = myEdit.getText();
 s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
 s.setSpan(new BulletSpan(30), 2, 3,  Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
 s.setSpan(new BulletSpan(30), 4, 4,  Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
 myEdit.setText(s);
Run Code Online (Sandbox Code Playgroud)

我想看到的是:

  • 一个
  • b
  • [我想在这里看到第3个子弹,但它没有显示]

我试过Spannable.SPAN_INCLUSIVE_INCLUSIVE,Spannable.SPAN_INCLUSIVE_EXCLUSIVE,Spannable.SPAN_EXCLUSIVE_INCLUSIVE,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE,但这些标志为我工作.

如果我使用这些代码:

EditText myEdit = (EditText) this.findViewById(R.id.myedit);
myEdit.setText("a\nb\nc");
Spannable s = myEdit.getText();
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 2, 3,  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 4, 5,  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
myEdit.setText(s);
Run Code Online (Sandbox Code Playgroud)

然后我得到了预期的结果:

  • 一个
  • b
  • C

我正在使用富文本编辑器,当用户单击子弹图标时,我需要显示一个空子弹,但现在我不确定问题可能是什么,因为我想创建一个新的空BulletSpan(只有一个点,但之后没有字符),但如果跨度的开始和结束中没有字符,则点不会显示.

android bulletedlist spanned android-edittext spannablestring

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

设置一个不能在简单的Textview上工作的spannable字符串

我不能为我的生活理解为什么这个设置spannable字符串的简单代码不能在这个textview上工作.如果日期是当前日期,则下面的方法会在显示日期的文本之前添加"今日"标记,该标记应为绿色.

private void setTimeTextView(String timeString) {

    Calendar c = Calendar.getInstance();

    String todaysDateString = ApiContentFormattingUtil.getFullDateFormat(c.getTime());
    if (timeString.equals(todaysDateString)){
        String todayText = getResources().getString(R.string.today_marker);

        Spannable timeSpannable = new SpannableString(todayText + timeString);
        timeSpannable.setSpan(new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.greenish_teal)), 0,
                todayText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        mDateTime.setText(timeSpannable);
    } else {
        mDateTime.setText(timeString);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,颜色不会改变.

在此输入图像描述

以下是此视图的XML

<TextView
        android:id="@+id/newsfeed_date_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="23dp"
        android:textSize="12sp"
        android:textColor="@color/white_three"
        android:letterSpacing="0.06"
        app:fontPath="@string/opensans_bold_path"
        tools:text="Monday, January 1st"
        android:textAllCaps="true"
        tools:ignore="MissingPrefix"
        tools:targetApi="lollipop"/>
Run Code Online (Sandbox Code Playgroud)

android textview spannablestring

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

如何在Android中的SpannedString或SpannableString中遍历跨度

如果我有一个SpannedString(或SpannableString)这样的

在此输入图像描述

SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(foregroundSpan, 1, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(backgroundSpan, 3, spannableString.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
Run Code Online (Sandbox Code Playgroud)

我将如何在结果的范围内循环String

android loops spanned spannablestring

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

如何在onTextChanged()中使用setSpan()来保存onTextChanged()的参数?

我实际上是在尝试进行卡片格式化,因为我正在尝试实现谷歌从链接中所说的内容

您没有被告知发生了更改的位置,因为其他afterTextChanged()方法可能已经进行了其他更改并使偏移无效.但是如果您需要在这里知道,可以在onTextChanged(CharSequence,int,int,int)中使用setSpan(Object,int,int,int)来标记您的位置,然后从此处查找跨度最终的位置.

从上面我所理解的是我需要在onTextChanged()中使用setSpan保存[CharSequence s,int start,int before,int count]并以某种方式在afterTextChanged()中检索它们.

问题是,在onTextChanged()中我在哪个对象上调用setSpan(),如何在afterTextChanged()中检索这些保存的值.

android textwatcher android-edittext spannablestring

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

如何对TextView中的每个单词进行alpha/translate动画而不是每个单词?

我正在使用以下内容Spannable并且TextView像这样,我已经让它为每个角色制作动画,但我想为每个单词制作动画,我该如何实现?

寻找alpha并翻译每个单词(从每个单词的位置底部).

通过翻译我的意思是翻译(移动)动画.

资源:

private static class FadeyTextView extends TextView
{
    private Interpolator mInterpolator;
    private long mStart, mDurationPerLetter;
    private boolean mAnimating = false;

    private SpannableString mFadeyText;
    private CharSequence mText;


    public FadeyTextView(Context context)
    {
        super(context);
        initView();
    }

    public FadeyTextView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        initView();
    }

    public FadeyTextView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        initView();
    }

    private void initView()
    {
        // Set defaults
        mInterpolator = new DecelerateInterpolator();
        mDurationPerLetter = 250;
    }

    public void …
Run Code Online (Sandbox Code Playgroud)

android textview spannablestring spannable

7
推荐指数
0
解决办法
588
查看次数