【问题标题】:Alignment in Html.fromHtml()Html.fromHtml() 中的对齐方式
【发布时间】:2010-10-06 16:56:17
【问题描述】:

在 TextView 的 HTML.fromHtml() 中对齐是否有效?

我试过了

<div align="center"><p>Test</p></div>

还有一些变体,包括将不带括号的对齐选项卡放在段落标记中,但没有一个起作用。文本始终保留。

感谢您的帮助!

你的。

【问题讨论】:

    标签: android


    【解决方案1】:

    TextView 中的 HTML 文本不支持对齐。

    【讨论】:

    • 这是一个多么好的网站,有这么多乐于助人的人和快速的答案!不过后续很明显:支持什么HTML?
    • 支持的标签有:p, div, em, b, strong, cite, dfn, i, big, small, font, blockquote, tt, a, u, sup, sub, h1 to h6和img。请注意,您还可以通过调用 fromHtml(String, ImageGetter, TagHandler) 来提供自己的 TagHandler。这使您可以添加对任何您想要的标签的支持。
    • 谢谢。我想要居中对齐。这在文本视图中似乎根本不可能,因此处理程序无济于事。
    • 您可以使用 android:gravity="center_horizo​​ntal" 设置文本对齐方式
    • 那你如何设置文本对齐方式?例如从右到左?我知道它以某种方式适用于 android 4.3,但是旧版本呢?
    【解决方案2】:

    要在 textview 中设置对齐方式,首先将 textview 宽度设置为 match_parent,然后在 HTML 标签中使用 text-align 选项。像这样:

    &lt;div style="text-align: center"&gt;this text should be in center of view&lt;/div&gt;

    更新: 此解决方案仅适用于 android 7 及更高版本:|

    【讨论】:

    • 已验证可在 Android 11 上运行。顺便说一句,您可以通过以下方式对您无法控制的 HTML 进行猴子补丁:val fixHtml = html.replace("&lt;center&gt;","&lt;div style=\"text-align: center\"&gt;").replace("&lt;/center&gt;","&lt;/div&gt;")
    【解决方案3】:

    虽然可以使用 webview 而不是 TextView 来使用对齐,并从放置在 assets 中的文件中加载 html:

    public class ViewWeb extends Activity {
        WebView webview;
        @Override
        public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.webview);
    
           webview = (WebView) findViewById(R.id.webView1);
           webview.loadUrl("file:///android_asset/index.html");
        }
    }
    

    【讨论】:

      【解决方案4】:

      对于 API 24 及更低版本,将 gravity 属性添加到 TextView 布局元素

            android:gravity="center_horizontal"
      

      对于 API 24 及更高版本,可以在 HTML 中使用 style

        String centeredHtml = "<div style=\"text-align: center\">" + myFormattedHtml + "</div>";
        textView.setText(Html.fromHtml(centeredHtml));
      

      gravity 也支持至少 API 26。

      【讨论】:

        【解决方案5】:

        您不能在 HTML 文本中设置对齐方式,但可以使用 SpannableStringBuilder 代替。它很冗长,但可以完成工作。

        例如

        private Spanned getFormattedLabelText(String text, String subText) {
            String fullText = String.format("%s\n%s", text, subText);
        
            int fullTextLength = fullText.length();
            int titleEnd = text.length();
        
            SpannableStringBuilder s = new SpannableStringBuilder(fullText);
        
            // Center align the text
            AlignmentSpan alignmentSpan = new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
            s.setSpan(alignmentSpan, 0, fullTextLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        
            // Make the title bold
            s.setSpan(new StyleSpan(Typeface.BOLD), 0, titleEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //bold
        
            // Make the subtext small
            int smallTextSize = DisplayUtil.getPixels(TypedValue.COMPLEX_UNIT_SP, 10);
            s.setSpan(new AbsoluteSizeSpan(smallTextSize), titleEnd + 1, fullTextLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //bold
        
            return s;
        }
        

        然后像往常一样设置TextView文本:

        myTextView.setText(getFormattedLabelText("Title", "Subtitle"));
        

        【讨论】:

          【解决方案6】:

          如果有人想用红色对齐居中的文本,那么可以使用下面的代码。

          String centerNRed = "<div style='text-align:center' ><span style='color:red' >Hello World Its me.....</span></div>";
          txt1.setText(Html.fromHtml(centerNRed));
          

          【讨论】:

            【解决方案7】:

            我相信在 TextView 中使用 Gravity 属性将文本居中更容易...

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-05-15
              • 1970-01-01
              • 2019-11-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多