如何将类型 GUI 元素从 TextView 更改为 HTMLView

Posted

技术标签:

【中文标题】如何将类型 GUI 元素从 TextView 更改为 HTMLView【英文标题】:How can I change the Type GUI Element from TextView to HTMLView 【发布时间】:2022-01-11 17:28:44 【问题描述】:

我有一个代码,它是一个网站,我需要编写一个仅显示此页面的应用程序。 但问题是我的代码没有看到超链接,因为我需要从 TextView 更改为 htmlView。 这是代码:

    public class BlackBoardClient 
    private static final String BLACK_BOARD_URL = "https://zpa.cs.hm.edu/public/notice_board/";
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy");

    public static List<BlackBoardEntry> getBlackBoardEntries() throws IOException  
        List<BlackBoardEntry> entries = new ArrayList<>();
        Document doc = Jsoup.connect(BLACK_BOARD_URL).get();
        Element newsTable = doc.getElementById("content").selectFirst("table");
        Iterable<Element> rows = newsTable.selectFirst("tbody").children();

        for (Element row : rows) 
            Iterator<Element> columns = row.children().iterator();
            String author = columns.next().text();
            String title = columns.next().text();
            String content = columns.next().text();
            LocalDate validFrom = LocalDate.parse(columns.next().text(), FORMATTER);
            LocalDate validUntil = LocalDate.parse(columns.next().text(), FORMATTER);
            BlackBoardEntry entry = new BlackBoardEntry(author, title, content, validFrom, validUntil);
            entries.add(entry);
        

        return entries;
    

显示如下:enter image description here

 public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView dataList = findViewById(R.id.dataList);

        dataList.setOnItemClickListener(new AdapterView.OnItemClickListener() 
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
                BlackBoardEntry entry = (BlackBoardEntry) parent.getItemAtPosition(position);
                String content = entry.getContent();
                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View popupView = inflater.inflate(R.layout.content_popup, null, false);
                ((TextView) popupView.findViewById(R.id.contentView)).setText(content);

                PopupWindow popup = new PopupWindow(popupView, 500, 1000, true);
                popup.showAtLocation(parent, Gravity.CENTER, 0, 0);


                
        );

        new Thread(new Runnable() 
            @Override
            public void run() 
                try 
                    List<BlackBoardEntry> entries = BlackBoardClient.getBlackBoardEntries();
                    BlackBoardAdapter adapter = new BlackBoardAdapter(entries, getApplicationContext());
                    dataList.post(new Runnable() 
                        @Override
                        public void run() 
                            dataList.setAdapter(adapter);
                        
                    );
                 catch (IOException e) 
                    e.printStackTrace();
                
            
        ).start();
    

【问题讨论】:

【参考方案1】:

对于仅显示现有 URL 中的 Web 内容,我建议实现 android WebView。

您当前的弹出视图定义为 Android TextView:

((TextView) popupView.findViewById(R.id.contentView)).setText(content);

将此更改为 WebView(在 xml“设计-/布局-视图”工具中)

有关示例,请查看 Android 开发人员文档https://developer.android.com/guide/webapps/webview

直接使用,必要时可以调用JS。

不要忘记更改您的清单文件以获得权限。

<manifest ... >
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

【讨论】:

以上是关于如何将类型 GUI 元素从 TextView 更改为 HTMLView的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中,如何从 AsyncTask 更改 TextView? [复制]

从菜单选项如何更改 TextView 颜色和大小

Unity 4.6 - 如何将 GUI 元素缩放到适合每个分辨率的大小

如何在运行时更改布局?

如何将 BackgroundWorker 的结果设置为 TextView

将对象的亲和性从 QThread 更改为主 GUI 线程