Как заполнить webview в android обычным текстом из базы данных и иметь возможность обрабатывать символы новой строки

Я новичок в разработке java и android. Я работаю над приложением, которое содержит простой графический интерфейс для доступа и чтения фундаментальных программ на C и Java для студентов.

Я пытаюсь заполнить webview текстовым файлом (C-программой в этом случае), который предварительно загружен в определенный столбец моей базы данных.

Я решил не использовать scrollview, потому что одновременная прокрутка и масштабирование очень сложно реализовать. Масштабирование требует создания пользовательских реализаций, которые мне трудно понять.

Таким образом, я решил использовать webview, поскольку он легко прокручивается и требует всего 1 строки кода для реализации масштабирования текста.

У меня есть 2 проблемы:

1) веб-просмотр неспособен обрабатывать новую строку, используя мою текущую реализацию. Он пытается отобразить весь текст в той же строке, а не перейти к следующей строке

2) он не отображает «stdio.h», «stdlib.h» и т. Д. … в основном все слова с расширением .h, которое является частью почти всех программ на C. Важно их отобразить.

Я пробовал следующие 2 реализации (возможно, неправильно):

1) loadData (String data, String mimeType, String encoding)

2) loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl)

Мой код выглядит следующим образом:

package com.example.uopengineering; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.webkit.WebView; public class viewProgramActivity<x> extends Activity { private SQLiteDatabase database; ExternalDbOpenHelper dbOpenHelper; private WebView webView; private static final String DB_NAME = "umangdb.db"; private String rowid; private String programtext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewprogram); dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME); database = dbOpenHelper.openDataBase(); Intent intent=getIntent(); rowid=intent.getStringExtra("myextra"); String query="select * from engg_table where _id="+rowid; Cursor myCursor = database.rawQuery(query,null); myCursor.moveToFirst(); programtext=myCursor.getString(4); myCursor.close(); webView = (WebView) findViewById(R.id.webView1); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setJavaScriptEnabled(true); //webView.loadData(programtext, "text/html", "UTF-8"); try { webView.loadData(URLEncoder.encode(programtext,"utf-8").replaceAll("\\+"," "), "text/html", "utf-8"); //webView.loadDataWithBaseURL(null, programtext, null, query, null); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

Соответствующий XML-файл (для купирования макета):

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:id="@+id/article" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines = "22" android:scrollbars = "vertical" /> <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> </RelativeLayout> 

Я прошел через другие форумы с похожими вопросами, но не смог найти подходящих решений. Один из них предложил использовать javascript для решения этой проблемы . Все, что я знаю о javascripts, делает проверки в формах веб-приложений для моего проекта в колледже. Возможно ли это? Если да, то как вы предлагаете мне заниматься изучением javascript и как именно я должен его реализовать.

Кроме того, как работает replaceAll ("\ +", "") ? Как именно он удаляет нежелательные символы? Также я не очень хорошо знаком с стандартами кодировки символов

Просто изменение типа контента на «text / plain» не работало для меня в Android 4.4. Все содержимое осталось в одной строке. То, что работает, является принятым ответом в этом вопросе переполнения стека:

Android WebView неправильно обрабатывает символы новой строки в предварительно отформатированном тексте

Intereting Posts
Как исправить ошибки в автогенерированном файле IMarketBillingService.java? Сделать файл шаблона маркера дополненной реальности (.patt-файл) в коде Android Как разрешить изменение яркости экрана в Marshmallow В результате покупки в приложении используется неправильная учетная запись после обновления Android ImageView Масштабирование и перевод Почему NotificationManager работает так медленно во время обновления? Класс кинжала не может быть связан с ключом SecurityException при попытке добавить учетную запись Включить промежуточную прокрутку в NestedScrollView (Android Studio) Есть ли способ вызова «getBackgroundColor»? Ошибка ProGuard не может найти суперкласс или интерфейс org.apache.http.entity Кинжал 2, супертип Инжектор равен нулю Не удается получить файл конфигурации GCM Фрагмент onCreateView и onActivityCreated вызывается дважды Как получить доступ к моей кнопке на одной из страниц моего просмотра?