textView.setMovementMethod(LinkMovementMethod.getInstance()) 正在删除 textview 中的对齐方式

Mar*_*rin 11 java xml android hyperlink

这是我的 xml 代码:

<TextView
            android:id="@+id/txt_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/img_banner"
            android:justificationMode="inter_word"
            android:paddingEnd="@dimen/margin_size"
            android:paddingStart="@dimen/margin_size"
            android:paddingTop="@dimen/margin_size"
            android:linksClickable="true"
            android:clickable="true"
            android:focusable="true"
            android:autoLink="web"
            android:layout_marginTop="@dimen/spacing"
            android:textSize="15sp" />
Run Code Online (Sandbox Code Playgroud)

并且我使用此代码来允许 textview 中的可点击链接。

txtView.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)

如果没有 setMovementMethod(),文本是对齐的,但链接不可点击,当我添加 setMovementMethod() 时,链接是可点击的,但对齐被禁用。请帮忙。

小智 0

您面临的问题与理由和 LinkMovementMethod 之间的冲突有关。不幸的是,LinkMovementMethod 不能很好地处理 TextView 中的文本对齐方式。

一种解决方法是使用 Html.fromHtml 将文本转换为 HTML,然后使用 Linkify 使链接可单击。但是,请记住,Html.fromHtml 在最新版本的 Android 中已被弃用,因此您可能需要使用 HtmlCompat 之类的库来实现兼容性。

这是一个例子:

    // Your original TextView
TextView textView = findViewById(R.id.txt_content);

// Your text with HTML tags
String htmlText = "<html>Your justified text with <a href=\"http://example.com\">clickable link</a></html>";

// Convert HTML to Spanned
Spanned spannedText;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    spannedText = HtmlCompat.fromHtml(htmlText, HtmlCompat.FROM_HTML_MODE_LEGACY);
} else {
    spannedText = Html.fromHtml(htmlText);
}

// Make links clickable
Linkify.addLinks(spannedText, Linkify.WEB_URLS);

// Set the text and movement method
textView.setText(spannedText);
textView.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)
This way, you can have clickable links while preserving text justification. However, keep in mind that HTML parsing might not be as
Run Code Online (Sandbox Code Playgroud)

与原生 TextView 渲染一样功能丰富,因此您可能需要相应地测试和调整 HTML 内容。