Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 嫩草影院永久在线一二三四 ,国产精品一级片,精品国产一区二区三区成人

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          TextView實(shí)現(xiàn)Android圖文混排顯示HTML內(nèi)容

          ndroid 中的 TextView 組件常用于顯示文本內(nèi)容,其實(shí)它也可以顯示 HTML 的內(nèi)容。簡(jiǎn)單來(lái)講,這就需要先把 HTML 的內(nèi)容以字符串的形式獲取后,經(jīng)過(guò) android.text.Html.fromHtml()轉(zhuǎn)化成 Spanned 的格式,然后將其傳遞到 TextView 的 setText()方法中,這樣就可以在 TextView 中顯示 HTML 頁(yè)面的內(nèi)容了。需要注意的是,并不是所有的 HTML 標(biāo)簽在 TextView 中都是支持的,且官方文檔并沒(méi)有明確的說(shuō)明支持 HTML 標(biāo)簽列表,通過(guò)查看 Android 源代碼,可以得到簡(jiǎn)單的支持列表。

          {<br>,< p>,< div align=>,< strong>, <b>, <em>, <cite>, <dfn>, <i>, <big>, <small>, <font size=>,  <font color=>, <blockquote>, <tt>, <a href=>, <u>, <sup>, <sub>, <h1>,<h2>,<h3>,<h4>,<h5>,<h6>, <img src=>, <strike>}
          1

          下面的示例來(lái)介紹如何在 TextView 中顯示一段 HTML 內(nèi)容,要顯示的這段 HTML 內(nèi)容即包含超鏈接內(nèi)容,也包含有圖片。
          在 TextView 中顯示 HTML 內(nèi)容

          顯示的過(guò)程中最主要的過(guò)程就是調(diào)用 Android.text.Html 類提供的 fromHtml()方法,將一段 HTML 內(nèi)容轉(zhuǎn)化為 Spanned 對(duì)象。

          Android.text.Html 類提供的 fromHtml()方法使用如下清單 4
          fromHtml()方法定義

          public static Spanned fromHtml(String source, ImageGetter imageGetter,
              TagHandler tagHandler) {
                  ……
          HtmlToSpannedConverter converter =
          new HtmlToSpannedConverter(source, imageGetter, tagHandler,  parser);
          return converter.convert();
          }
          1234567

          source,就是包含 HTML 內(nèi)容的字符串。而 Html.ImageGetter 和 Html.TagHandler 是兩個(gè)接口,提供給開(kāi)發(fā)者繼承使用。
          imageGetter, 如果要顯示圖片是需要被繼承的,重寫 getDrawable(String source)方法,用于獲取 HTML 里面的圖片來(lái)顯示在 TextView 中。
          tagHandler,其作用是把 HTML 帶標(biāo)記的文本內(nèi)容字符串轉(zhuǎn)化成可以顯示效果的的 Spanned 字符串 。由于并非所有的 HTML 標(biāo)簽都可以轉(zhuǎn)化,所以在使用時(shí),用戶需要自己添加一些必要的標(biāo)簽和處理方法時(shí)才會(huì)繼承使用的。

          在本例中使用 fromHtml()方法之前,要準(zhǔn)備好該方法要用的三個(gè)參數(shù)內(nèi)容,首先將 HTML 字符串內(nèi)容準(zhǔn)備好,在項(xiàng)目中需要?jiǎng)?chuàng)建兩個(gè)類 MImageGetter 和 MTagHandler 分別繼承于 ImageGetter 和 TagHandler,分別用戶圖片的獲取,和特殊標(biāo)簽的支持。
          MImageGetter

          繼承于 ImageGetter,重寫 getDrawable (String source) 方法中從 assets 路徑下取出的圖片流(這里當(dāng)然也可以通過(guò)網(wǎng)絡(luò)操作來(lái)完成圖片流的獲取),最后獲得可供顯示的圖片對(duì)象,例如 Drawable 對(duì)像。由于 Android 設(shè)備的異構(gòu)性,為了有更好的顯示效果,通常需要獲取屏幕大小,然后調(diào)用 drawable.setBounds () 還可以重新設(shè)置圖片的大小, 最后返回合適大小的圖片 Drawable 對(duì)象。 由此 Spanned 中的 ImageSpan 就獲得了圖像被顯示在 TextView 中對(duì)應(yīng)位置了。

          TypedValue typedValue = new TypedValue();
          typedValue.density = TypedValue.DENSITY_DEFAULT;
          drawable = Drawable.createFromResourceStream(null, typedValue, is, "src");
          DisplayMetrics dm = c.getResources().getDisplayMetrics();  
          int dwidth = dm.widthPixels-10;//padding left + padding right
          float dheight = (float)drawable.getIntrinsicHeight()*(float)dwidth/(float)drawable.getIntrinsicWidth();
          int dh = (int)(dheight+0.5);
          int wid = dwidth;
          int hei = dh;
          drawable.setBounds(0, 0, wid, hei);DisplayMetrics dm = c.getResources().getDisplayMetrics();
          12345678910

          MTagHandler

          繼承于 TagHandler,重寫了 handleTag()方法,為的是支持部分標(biāo)簽,這四個(gè)標(biāo)簽是在 formHtml()方法中本身是不支持。如果開(kāi)發(fā)者認(rèn)為安卓 TagHandler 提供的默認(rèn)標(biāo)簽解析已經(jīng)夠用,直接在 fromHtml()方法中第三個(gè)參數(shù)的地方填寫 null 既可。
          重寫 handleTag()方法

          public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) {
          if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) {
              if (opening) {
              mListParents.add(tag);
              } else mListParents.remove(tag);
          } else if (tag.equals("li") && !opening) {
               handleListTag(output);
          }
          }
          private void handleListTag(Editable output) {
          ……
           }
          123456789101112

          最后,在完成了 MImageGetter、MTagHandler 以后,就可以通過(guò) formHtml()方法將 HTML 內(nèi)容轉(zhuǎn)化為可供顯示的 SpannableString,將 SpannableString 通過(guò) setText 方法放入 TextView 中,就可以顯示圖文并茂的內(nèi)容了。

          progressBar.setVisibility(View.GONE);
          text.setText(Html.fromHtml(htmlCont, new MImageGetter(text,MainActivity.this), new MTagHandler()));
          text.setVisibility(View.VISIBLE);
          123

          MImageGetter、MTagHandler 如下:

          實(shí)現(xiàn)新聞詳情的時(shí)候,安卓也有類似富文本的控件,但是使用webview或者textview等方法,每種方法各有優(yōu)劣,不是很完美。今天給大家介紹一個(gè)安卓控件——HtmlTextView,實(shí)現(xiàn)詳情頁(yè)圖文混排的顯示。
          1.在gradle引入控件

          dependencies {
              compile 'org.sufficientlysecure:html-textview:4.0'
          }
          123

          2.在布局頁(yè)面使用上面的控件

          <org.sufficientlysecure.htmltextview.HtmlTextView
                      android:id="@+id/html_text"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      android:textAppearance="@android:style/TextAppearance.Small" />
          12345

          3.在activity使用相關(guān)方法,此處是其他頁(yè)面網(wǎng)絡(luò)獲取解析傳遞過(guò)來(lái)的html內(nèi)容,HtmlHttpImageGetter方法不需要手動(dòng)編寫(較textview實(shí)現(xiàn)的時(shí)候不再需要重寫、繼承ImageGetter方法,可查看上篇博客)

          public class ContentActivity extends BaseActivity {
              private String htmlContents = null;
          
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_content);
                  HtmlTextView htmlTextView = findViewById(R.id.html_text);
                  final Intent intent = getIntent();
                  Bundle bundle = intent.getExtras();
                  htmlContents = bundle.getCharSequence("contents").toString();
                  htmlTextView.setHtml(htmlContents, new HtmlHttpImageGetter(htmlTextView));
          
              }
          }
          123456789101112131415

          4.讓我們看一下最終實(shí)現(xiàn)的效果


          有相關(guān)疑問(wèn)可以留言,感謝點(diǎn)贊轉(zhuǎn)發(fā),禁止轉(zhuǎn)載

          果在Android瀏覽器中查看背景圖片時(shí)出現(xiàn)模糊的問(wèn)題,可以嘗試以下幾種解決方法:

          1:使用高分辨率圖片: 確保背景圖片的分辨率足夠高,以適應(yīng)不同的設(shè)備屏幕密度。提供高分辨率的圖片可以避免在高像素密度的設(shè)備上顯示模糊。

          2:使用適當(dāng)?shù)膱D片格式: 使用適當(dāng)?shù)膱D片格式,如JPEG、PNG或WebP。根據(jù)圖片的特性和壓縮需求選擇合適的格式,以避免圖片在瀏覽器中顯示時(shí)失真或模糊。

          3:設(shè)置背景圖片大小: 在CSS中設(shè)置背景圖片的大小,確保其與元素的大小匹配。使用background-size屬性可以控制背景圖片的尺寸,例如使用cover或contain來(lái)適應(yīng)元素的大小。

          4:使用CSS圖像漸進(jìn)增強(qiáng): 通過(guò)CSS的background-image屬性,使用漸進(jìn)增強(qiáng)的方式提供多個(gè)備選的背景圖片。提供不同分辨率或不同壓縮程度的圖片,讓瀏覽器根據(jù)設(shè)備的特性選擇合適的圖片。

          5:避免拉伸背景圖片: 避免在CSS中拉伸背景圖片,以免引起模糊效果。確保背景圖片的尺寸與顯示區(qū)域匹配,避免進(jìn)行不必要的縮放或拉伸。

          6:使用CSS濾鏡: 可以嘗試使用CSS的濾鏡效果來(lái)改善背景圖片的清晰度。例如,使用filter: none;來(lái)禁用瀏覽器默認(rèn)的圖片濾鏡效果。

          7:測(cè)試不同瀏覽器和設(shè)備: 在不同的Android瀏覽器和設(shè)備上進(jìn)行測(cè)試,以確保背景圖片在各種環(huán)境下都能顯示清晰。不同的瀏覽器和設(shè)備可能對(duì)圖片的處理方式有所不同,因此需要做兼容性測(cè)試。

          通過(guò)采取這些方法,可以提高Android瀏覽器中背景圖片的顯示質(zhì)量,減少模糊的問(wèn)題。


          主站蜘蛛池模板: 美女视频在线一区二区三区| 97人妻无码一区二区精品免费 | 无码人妻AⅤ一区二区三区水密桃 无码欧精品亚洲日韩一区夜夜嗨 无码毛片一区二区三区中文字幕 无码毛片一区二区三区视频免费播放 | 丰满岳乱妇一区二区三区| 中文字幕亚洲一区二区三区| 国产一区二区三区亚洲综合| 亚洲精品一区二区三区四区乱码| 久久影院亚洲一区| 亚洲第一区精品观看| 国产成人精品无码一区二区老年人| 末成年女A∨片一区二区| 中文字幕精品一区二区三区视频| 无码中文人妻在线一区| 亚洲av乱码一区二区三区| 无码欧精品亚洲日韩一区| 亚洲色欲一区二区三区在线观看| 一区二区三区AV高清免费波多| 在线|一区二区三区| 韩国精品福利一区二区三区| 麻豆一区二区免费播放网站| 亚洲一区二区三区在线| 亚洲一区二区久久| 精品一区二区三区在线成人 | 亚洲成AV人片一区二区| 无人码一区二区三区视频| 国产一区二区三区免费观看在线| 国产乱码精品一区二区三 | 蜜臀AV无码一区二区三区| 亚洲日韩中文字幕无码一区| 人妻互换精品一区二区| 国产一区二区三区内射高清| 日韩精品一区二区三区影院| 欧洲精品一区二区三区在线观看 | 精品久久国产一区二区三区香蕉 | 国产成人午夜精品一区二区三区| 国内精品视频一区二区八戒| 波多野结衣中文字幕一区二区三区 | 亚洲一区二区三区乱码在线欧洲| 99热门精品一区二区三区无码| 午夜AV内射一区二区三区红桃视| 日韩视频在线一区|