我的目标是通过HTML中的CSS或其他方式将justify
应用于文本,同时仍然允许textColor
,textFont
等格式。
有一个老帖子有一些很好的答案,但它并没有真正满足上述所有要求,特别是允许格式化文本。
虽然这个解决方案可能仍然有一些潜力,我可能只是在实现中忽略了一些东西。我看到过一个类似的问题,有一个公认的答案,但我不相信它是如何工作的,因为它在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));
但是没有变化。
是我错过了什么还是我挖错了洞?
由于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属性。