标签: spannablestring

带Linkify.PHONE_NUMBERS的TextView使电话号码不可见

我正在使用文本和电话号码填充TextView,如下所示:

tv.setText("Here is a phone number: 1234567890.  OK?");
Run Code Online (Sandbox Code Playgroud)

这在我的模拟器中显得很好.现在,我想链接电话号码,所以我做了以下事情:

tv.setText("Here is a phone number: 1234567890.  OK?");
tv.setAutoLinkMask(Linkify.PHONE_NUMBERS);
Run Code Online (Sandbox Code Playgroud)

这使电话号码消失,我看到:

Here is a phone number:           .  OK?
Run Code Online (Sandbox Code Playgroud)

它基本上显示了电话号码,但它是隐形的.如果我触摸(看不见的)电话号码的空间,那么Android会加载拨号器并拨打1234567890.这不是电话号码是白色的白色 - 我已经将背景更改为红色并且它不会显示为白色红色 - 它是看不见的.

有线索吗?谢谢.

android textview spannablestring

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

在SpannableString中获取应用范围的范围

我试图获取在a上应用的范围的集合,SpannableString然后找到它们已在其中应用的范围。那可能吗?据我所知,似乎没有内置的方法可以做到这一点。我对吗?

Object[] spans = spannableString.getSpans(0, spannableString.length(), Object.class);

    List<Object> spanArray = asList(spans);

    for (Object span: spanArray) {
        if (span.getClass().equals(MyCustomSpan.class)) {
            MyCustomSpan s = (MyCustomSpan) span;

            // Get the range in spannableString where this span has been applied.
            // How do I do this?
        }
    }
Run Code Online (Sandbox Code Playgroud)

android textview spannablestring

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

如何在spannable中的2行之间添加边距或填充?

我使用spannable在2行中创建一个字符串,其中每行有不同的字体.
除了一件事,它工作正常.
如何在第一个字符串和第二个字符串之间添加一些边距?

所以我这样做:

String a = "First line";  
String b = "Second line";  
SpannableString spannableName = new SpannableString(a + "\n" + b);  
spannableName.setSpan(new TextAppearanceSpan(activity, R.style.my_style),0,a.length(), 0);  
Run Code Online (Sandbox Code Playgroud)

和my_style

<style name="my_style">
        <item name="android:layout_marginBottom">100dp</item>
        <item name="android:paddingBottom">10dp</item>
        <item name="android:textSize">@dimen/size</item>
        <item name="android:textColor">@color/mycolor</item>
    </style>  
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我希望在a和之间有一些填充/边距b.
我的风格中的填充/边距很大,因为我不确定它们是否被应用(测试数字)

android android-layout spannablestring android-styles

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

如何子字符串化?

我知道如何将子字符串作为普通字符串。

但是,我该如何细分一个跨度。

考虑以下示例。

我的样本S entence。

现在,当我将此字符串作为子字符串时,我想像这样以及所有这些格式来获取字符串“ mple s ente”。

换句话说,我想对可扩展而不是字符串进行子字符串化。

我怎样才能做到这一点?

android android-edittext spannablestring spannable

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

如何从TextView中显示每个单击的单词

我计划开发一个具有非常简单概念的应用程序。要求是我想在意图选择器的帮助下从电话中添加一个文本文件(动态,因此无法为跨度字符串设置clickabble位置的跨度)。并且需要在textView中显示所选文件的内容(如果有建议,则显示任何视图)。一旦我单击了textview内容中的任何单词,我就需要在Toast中显示该单词。

    button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showFileChooser();
            }
        });



 private void showFileChooser() {

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        //intent.setType("*/*");      //all files
        intent.setType("text/xml");   //XML file only
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        try {
            startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), 1);
        } catch (android.content.ActivityNotFoundException ex) {
            // Potentially direct the user to the Market with a Dialog
            Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show();
        }
    }


 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if …
Run Code Online (Sandbox Code Playgroud)

android textview spannablestring

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

如何在TextView中的部分文本周围设置矩形虚线/虚线轮廓?

背景

有很多方法可以为TextView中显示的部分文本设置样式,例如设置其前景色(此处)和其他(此处).

问题

我无法确定是否有办法在TextView 的部分文本上设置矩形虚线/虚线轮廓.像这样的东西:

在此输入图像描述

我试过的

我试图寻找这样的解决方案,并且我也尝试阅读CharacterStyle的文档.尽管如此,我认为任何可用的跨度都不适合这种风格.

这个问题

是否有内置的解决方案,或者我是否需要使用自定义的实现?


我使用了下面建议的修改版本,它在POC上运行良好,但出于某种原因,在实际项目中,文本两侧的垂直虚线是粗体:

在此输入图像描述

这是当前的代码:

要使用的字符串

<string name="text_to_format">test &#160;&#160;%1$s test</string>
Run Code Online (Sandbox Code Playgroud)

使用代码

        final String textToDash="DASHED";
        String formattedStr = getString(R.string.text_to_format, textToDash+ "<bc/>");
        Spanned textToShow = Html.fromHtml(formattedStr, null, new TagHandler() {
            int start;

            @Override
            public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) {
                switch (tag) {
                    case "bc":
                        if (!opening)
                            start = output.length() - textToDash.length();
                        break;
                    case "html":
                        if (!opening)
                            output.setSpan(
                                    new …
Run Code Online (Sandbox Code Playgroud)

android textview spannablestring

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

如何突出显示EditText中的多个单词?

目前,我正在开发拼写和语法检查应用程序。它具有EditText,用户可以在其中输入文本,并且在单击按钮应用程序时单击一个名为“ Check Text”的按钮将调用LanguageTool API来检查文本并返回带有结果的JSON响应。

这是app的屏幕截图:在此处输入图片说明

这是到目前为止我一直尝试突出显示多个单词的代码,但是此代码仅突出显示我创建的数组中的最后一个单词:

for (int i = 0; i < errorStrings.size(); i++) {

// Here textToCheck is EditText & errorStrings is ArrayList of type WrongString class which i have created to hold Error string , offset & length.

Spannable wordtoSpan = new SpannableString(texttoSend);
wordtoSpan.setSpan(new BackgroundColorSpan(Color.BLUE),errorStrings.get(i).getOffset(),
                                        (errorStrings.get(i).getOffset()+errorStrings.get(i).getLength()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                            textToCheck.setText(wordtoSpan);
}
Run Code Online (Sandbox Code Playgroud)

java android android-edittext spannablestring

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

如何在编辑文本android中添加图像

我想在edittext视图中添加图像.例如,我有大小为250*250的图像我希望在高度为250之后显示文本左侧,之后必须在正常左侧位置显示文本.

               Some text some text some text
  Some image   Some text some text some text
               Some text some text some text
Some text some text some text Some text some 
text some text some text some text Some text 
some text Some text some text Some text some
Run Code Online (Sandbox Code Playgroud)

android-layout android-imageview android-edittext spannablestring spannable

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

Android-ImageSpan-如何居中对齐文本末尾的图像

我在xml布局中具有以下内容:

在此处输入图片说明

注意六角形#4如何不在文本的中心对齐。我该怎么做:这是到目前为止我尝试过的事情:

为了真正获得其中带有#的视图,我给视图添加一个如下所示的视图:

//my_hexagon_button.xml:

     <?xml version="1.0" encoding="utf-8"?>
       <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                     xmlns:tools="http://schemas.android.com/tools"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:orientation="vertical"
                     android:padding="0dp"
                     tools:ignore="MissingPrefix">


           <Button
               android:id="@+id/tv_icon"
               fontPath="proxima_nova_semi_bold.otf"
               android:layout_width="16dp"
               android:layout_height="17.5dp"
               android:layout_marginBottom="5dp"
               android:layout_marginLeft="10dp"
               android:alpha=".25"
               android:background="@drawable/hexagon"
               android:clickable="true"
               android:contentDescription="@string/content_description"
               android:focusable="false"
               android:padding="0dp"
               android:text="4"
               android:textColor="@color/white"
               android:textSize="8dp"
               />

       </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

扩大视图后,我获取其图形缓存的副本,并在ImageSpan中使用它。这是我如何获取图形缓存的副本:

public Bitmap getIconBitmap() {
               LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               LinearLayout myRoot = new LinearLayout(getActivity());

               // inflate and measure the button then grab its image from the view cache
               ViewGroup parent = (ViewGroup) inflater.inflate(R.layout.my_hexagon_button, myRoot);
               TextView tv = (TextView) parent.findViewById(R.id.tv_icon);

               parent.setDrawingCacheEnabled(true);
               parent.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                       View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
               parent.layout(0, 0, …
Run Code Online (Sandbox Code Playgroud)

android spannablestring

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

如何比较两个EditText字符串然后突出显示Android中的不同之处?

我有2个必须比较的EditText字符串,我知道如何比较并获得“ OK”(如果它们都匹配)和“ NOK”(如果它们不匹配)之类的结果。但是我不知道如何找到不同的字符或部分。举个例子:

EditText editTextStdCode = 18X2101UG1

相比于

EditText editTextActCode = 18Y2101UG1

结果为“ NOK”,因为editTextActCodeeditTextStdCode第18 Y 2101UG1 节中的内容不同,并且我想突出显示字符Y,因为它与是不同的字符editTextActCode

我尝试过的事情正在使用SpannableString,如下所示:

private void highlightChar(Integer startSpan, Integer endSpan) {
    SpannableString spannableStr = new SpannableString(editTextActCode.getText().toString());
    BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.GREEN);
    spannableStr.setSpan(backgroundColorSpan, startSpan, endSpan, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

    editTextActCode.setText(spannableStr);

}


/**
 *
 * @param editText
 * @param fIndex
 * @param lIndex
 * @param textToHighlight
 */
public void setHighLightedText(EditText editText, Integer fIndex, Integer lIndex, String textToHighlight) {
    String tvt = editText.getText().toString().substring(fIndex,lIndex);
    int ofe = …
Run Code Online (Sandbox Code Playgroud)

java arrays android spannablestring

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