ссылка на текстовое представление с доменом в тексте не работает, ссылки не кликабельны - PullRequest
0 голосов
/ 15 мая 2018

Я не могу linkfy строку с href, когда в строке указано имя домена вместе с ним. так что строка позвольте мне показать вам.

Вот строка:

<string name="go_to_settings">Please go to "Settings" in <a href="https://www.mywebsite.com/settings">mywebsite.com</a> to change this status</string>

И пользователю будет сказано: «Пожалуйста, перейдите в« Настройки »на mywebsite.com, чтобы изменить этот статус».

вот то textview, которое я использую:

  <TextView
      android:id="@+id/tv_instructions"
      android:layout_width="280dp"
      android:layout_height="wrap_content"
      android:layout_marginTop="73dp"
      android:lineSpacingExtra="3sp"
      android:textAlignment="center"
      android:textColor="#5c5c5c"
      android:textColorLink="@color/action_blue"
      android:linksClickable="true"
      android:text="@string/go_to_settings"/>

а вот как я пытаюсь сделать ссылку clickable:

 Linkify.addLinks(tv_instructions, Linkify.ALL)
 tv_instructions.movementMethod=LinkMovementMethod.getInstance()

Но я наблюдаю, что происходит на устройствах API 24 и 27, и эмулятор состоит в том, что ссылка идет на www.mywebsite.com вместо www.mywebsite / settings

но вот странная вещь: если я изменю текст, который видит пользователь, и удаляю .com из этого, тогда он работает нормально. так что, если пользователь увидит это, вместо этого он будет работать:

и пользователю будет сказано: «Пожалуйста, перейдите в« Настройки »на моем сайте, чтобы изменить этот статус».

обратите внимание, что .com не упоминается. Как я могу это отобразить. я тоже пробовал вот так:

tv_instructions.text=(utils.fromHTML(resources.getString(R.string.go_to_settings),null))
tv_instructions.movementMethod=LinkMovementMethod.getInstance()

и textview, как это:

    <TextView
                       android:id="@+id/tv_instructions"
                       android:layout_width="280dp"
                       android:layout_height="wrap_content"
                       android:layout_marginTop="73dp"
                       android:lineSpacingExtra="3sp"
                       android:textAlignment="center"
                       android:textColor="#5c5c5c"

                       android:text="@string/go_to_settings"
               />

Ребята, вы понимаете, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

понял это. по какой-то причине мне нужно было обернуть мой текст в символьные данные, используя тег cData в моем файле strings. это работает:

<string name="go_to_settings"><![CDATA[Please go to "Settings" in <a href="https://www.mywebsite.com/settings">mywebsite.com</a> to change this status :]]></string>

тогда textview выглядит так:

 <TextView
      android:id="@+id/tv_instructions"
      android:layout_width="280dp"
      android:layout_height="wrap_content"
      android:layout_marginTop="73dp"
      android:lineSpacingExtra="3sp"
      android:text="@string/go_to_settings"
      android:textAlignment="center"
      android:textColor="#5c5c5c"
      android:textColorLink="@color/action_blue"/>

Java-код

tv_instructions.text=(utils.fromHTML(resources.getString(R.string.go_to_settings),null))
tv_instructions.movementMethod=LinkMovementMethod.getInstance()
0 голосов
/ 15 мая 2018

ссылка на текстовое представление с доменом в тексте не работает, ссылки не активируются

Вы также можете использовать ClickableSpan

Если объект этого типа прикреплен к тексту TextView с методом перемещения LinkMovementMethod, могут быть выбраны затронутые участки текста. При выборе и нажатии будет вызван метод onClick(View).

Проверьте ниже ОБРАЗЕЦ КОДА

Попробуйте это

public class MainActivity extends AppCompatActivity {

    TextView myTextView;

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

        myTextView = (TextView) findViewById(R.id.myTextview);

        setSpan();
    }

    private void setSpan() {

        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("Please go to \"Settings\" in");
        SpannableString spannableString = new SpannableString(" mywebsite.com ");

        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                Toast.makeText(MainActivity.this, "Click", Toast.LENGTH_SHORT).show();
                // you can open your link here as per your requiremnt
            }
        };

        spannableString.setSpan(clickableSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(new UnderlineSpan(), 0, spannableString.length(), 0);

        spannableStringBuilder.append(spannableString);
        spannableStringBuilder.append("to change this status");

        myTextView.setText(spannableStringBuilder);
        myTextView.setMovementMethod(LinkMovementMethod.getInstance());
    }


}
...