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

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

setText(declare here a spannable);
我想我应该一起工作Spannable,我已经尝试了一些事情Alignment.ALIGN_NORMAL和Alignment.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) 我有一个像这样的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) 我试过这个:
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颜色正在改变但不是字体.
我正在构建一个简单的聊天应用程序,用户可以在其中发送文本和表情符号.我可以将文字和表情符号发送到另一部手机.我的问题是:
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) 我有一个应用程序,我在TextView. 我正在SpannableStringBuilder为此目的使用。
我想在这里做的一件事是能够突出显示文本。现在我尝试使用BackgroundColorSpan,但在这种情况下,文本上的背景覆盖了完整的行高。我希望它只覆盖文本。似乎没有明显的方法可以在此跨度上设置垂直填充或高度。只是颜色。
其次,我还尝试通过在该类的draw方法中绘制来子类化ReplacementSpan并实现backgroundSpan我自己的a 。但这似乎不支持多行突出显示。
谁能告诉我如何实现这种突出显示功能?基本上,我希望它像一个电子书阅读器的工作,最好的Kindle或默认的电子书阅读器Android。
我对这个问题使用相同的标题,因为我认为我的问题非常类似,我仔细阅读并测试了接受的答案,但是接受的答案对我不起作用.让我来描述一下我的问题:
我的代码看起来像:
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)
我想看到的是:
我试过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)
然后我得到了预期的结果:
我正在使用富文本编辑器,当用户单击子弹图标时,我需要显示一个空子弹,但现在我不确定问题可能是什么,因为我想创建一个新的空BulletSpan(只有一个点,但之后没有字符),但如果跨度的开始和结束中没有字符,则点不会显示.
android bulletedlist spanned android-edittext spannablestring
我不能为我的生活理解为什么这个设置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) 如果我有一个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?
我实际上是在尝试进行卡片格式化,因为我正在尝试实现谷歌从链接中所说的内容
您没有被告知发生了更改的位置,因为其他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()中检索这些保存的值.
我正在使用以下内容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 ×10
spannablestring ×10
textview ×3
spannable ×2
spanned ×2
alignment ×1
bulletedlist ×1
ebook-reader ×1
java ×1
loops ×1
regex ×1
split ×1
string ×1
textwatcher ×1
typeface ×1