4

私は Java と Android の開発が初めてで、学生向けの C と Java の基本的なプログラムにアクセスして読み取るためのシンプルな GUI を含むアプリケーションに取り組んでいます。

データベースの特定の列に事前にロードされているテキスト ファイル (この場合は C プログラム) を Web ビューに入力しようとしています。

スクロールとズームを同時に実装するのは非常に難しいため、スクロールビューを使用しないことにしました。ズームにはカスタム実装が必要ですが、これは私には理解が困難でした。

したがって、簡単にスクロールでき、テキストのズームを実装するのに 1 行のコードしか必要ないため、webview を使用することにしました。

私には2つの問題があります:

1) webview は、現在の実装を使用して改行を処理できません。つまり、次の行に移動する代わりに、同じ行にすべてのテキストを表示しようとします。

2) "stdio.h"、"stdlib.h" など....基本的に、ほとんどすべての C プログラムの一部である .h 拡張子を持つすべての単語を表示しません。これらを表示することが不可欠です。

次の2つの実装を試しました(おそらく間違っています):

1) loadData (文字列データ、文字列 mimeType、文字列エンコーディング)

2) loadDataWithBaseURL (文字列 baseUrl、文字列データ、文字列 mimeType、文字列エンコーディング、文字列 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>

同様の質問がある他のフォーラムを調べましたが、適切な解決策を見つけることができませんでした。そのうちの 1 人は、javascript を使用してこの問題を回避することを提案しました。JavaScript について私が知っているのは、大学のプロジェクトの Web アプリケーション フォームで検証を行っていることだけです。これは可能ですか?? もしそうなら、どのようにjavascriptを学び、どのように正確に実装することをお勧めしますか.

また、replaceAll("\+"," ")はどのように機能しますか?不要な文字をどのように削除しますか??また、文字エンコーディング標準にあまり詳しくありません

4

1 に答える 1

3

Android 4.4 では、コンテンツ タイプを「text/plain」に変更するだけではうまくいきませんでした。すべてのコンテンツはまだ 1 行でした。しかし、うまくいったのは、このスタックオーバーフローの質問で受け入れられた答えです:

Android WebView が整形済みテキストの改行を誤って処理する

于 2014-12-02T12:36:17.247 に答える