2

C プログラムを表示するアプリを開発しています。データベースに保存され、文字列として取得され、textview に渡されるテキストに単純な配色を与えたいと考えていました。

私が書いたコードは、緑色をヘッダー ファイルの宣言と括弧に割り当て、青色を数値に割り当て、printf、scanf...赤色を int、char、float などのデータ型に割り当てます。

ただし、非常に非効率的です。この配色を適用する前に、私のアプリは textview アクティビティを即座に表示していました。今では、プログラムの長さに応じて最大 4 ~ 5 秒かかるため、パフォーマンスが非常に低下します。

それは、一度に 1 つのキーワードを取り、その特定のキーワードのみを探して textview の完全なテキストを繰り返し、その色を変更し、テキストを再度設定します。したがって、文字列配列で 29 個のキーワード (つまり、keywordsgreen、keywordsblue、keywordsred) を定義したため、テキストビュー全体のテキストを 29 回トラバースします。

アクティビティの onCreate 関数には、次のコードが含まれています。

        textView  = (TextView) findViewById(R.id.textView1);
        textView.setText(programtext);
        textView.setBackgroundColor(0xFFE6E6E6);

        //The problem stars here

        String [] keywordsgreen={"#define","#include","stdio.h","conio.h","stdlib.h","math.h","graphics.h","string.h","malloc.h","time.h","{","}","(",")","<",">","&","while ","for "};
        for(String y:keywordsgreen)
        {
        fontcolor(y,0xff21610B);
        }

        String [] keywordsred={"%d","%f","%c","%s","int ","char ","float","typedef","struct ","void "};
        for(String y:keywordsred)
        {
        fontcolor(y,0xFFB40404);
        }

        String [] keywordsblue={"printf","scanf","\n","getch","0","1","2","3","4","5","6","7","8","9"};
        for(String y:keywordsblue)
        {
        fontcolor(y,0xFF00056f);
        }

fontcolor 関数は次のとおりです。

private void fontcolor(String text,int color) 
    {
        Spannable raw=new SpannableString(textView.getText());
        int index=TextUtils.indexOf(raw, text);
        while (index >= 0) 
        {
          raw.setSpan(new ForegroundColorSpan(color), index, index + text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
          index=TextUtils.indexOf(raw, text, index + text.length());
        }
        textView.setText(raw);
    }
4

0 に答える 0