android 如何从HtmlCompat.fromHtml中的String资源应用CSS样式

9rygscc1  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(148)

我的目标是通过HTML中的CSS或其他方式将justify应用于文本,同时仍然允许像textColortextFont等格式。
有一个老线程有一些很好的答案,但它并没有真正满足上述所有要求,特别是允许格式化文本。
虽然这个解决方案可能仍然有一些潜力,我可能只是在实现中忽略了一些东西。我见过一个类似的question,它的答案是可以接受的,但我对它在Kotlin中的工作方式不太有信心。
对于上下文,我只需要它适用于API级别19及以上。
这是我目前得到的:
MainActivity.java

public class MainActivity extends AppCompatActivity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView justify = (TextView) findViewById(R.id.content_to_justify);
        justify.setText(HtmlCompat.fromHtml(getString(R.string.text_to_justify), 0));
...

activity_main.xml

...
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/justify_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:id="@+id/content_to_justify"
                    android:layout_height="wrap_content"
                    android:fontFamily="@font/roboto_regular"
                    android:textColor="@color/grayxxxx"
                    android:textSize="14sp"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="parent" />

            <\androidx.constraintlayout.widget.ConstraintLayout>
...

strings.xml

<resources>
...
    <string name="text_to_justify" translatable="false">
        <![CDATA[
            <html>
                <body style="text-align:justify;color:gray;background-color:black;">
                   Lorem ipsum..
                </body>
            </html>
        ]]>
    </string>
...
</resources>

注意额外的CSS样式。我只是将其添加到那里,看看它是否确实有效,而不仅仅是text-align:justify特有的问题。这些都不管用。
我尝试将CharSequence转换为HtmlCompat.fromHtml,如下所示:
justify.setText((CharSequence) HtmlCompat.fromHtml(getString(R.string.text_to_justify), 0));
但是没有变化。
是我漏了什么还是我挖错洞了?

dwbf0jvd

dwbf0jvd1#

由于Android Textview不支持所有的html标签,Webview是一个更好的解决方案,因为可以应用html和内联CSS样式。试着像下面这样,

webView=findViewById(R.id.webview);

    String text= "<html>"
            + "<body>"
            + "<style type=\"text/css\">body{color: #d3d3d3; background- 
             color:#fffff;}"
            + "</style>"
            +"<p align=\"justify\">"
            + text_to_justify
            + "</p></body></html>";

    webView.loadData(text, "text/html", "utf-8");

WebView也不接受TextView xml中支持的textColor等属性。

相关问题