web-dev-qa-db-ja.com

setText()とappend()の違い

SetText()とappend()が作成している違いに興味があります。行番号付きの非常に基本的なエディターを書いています。左側に行番号を保持するTextViewと、右側にデータを保持するEditTextを組み合わせています。ここにXMLがあります:

<LinearLayout 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" 
    Android:gravity="top">
    <TextView
        Android:id="@+id/line_numbers"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginRight="0dip"
        Android:gravity="top"
        Android:textSize="14sp"
        Android:textColor="#000000"
        Android:typeface="monospace"
        Android:paddingLeft="0dp"/>
    <EditText
        Android:id="@+id/editor"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:inputType="text|textMultiLine|textNoSuggestions"
        Android:imeOptions="actionNone"
        Android:gravity="top"
        Android:textSize="14sp"
        Android:textColor="#000000"
        Android:typeface="monospace"/>
</LinearLayout>

私が行っている他のいくつかのことを無視して、私が遭遇した最も奇妙なことは、append()を使用したときに表示される余分なスペースでした(物事が初期化されていることを前提としています)。

以下の例は、XMLと組み合わせて、TextViewとEditTextの間にフラッシュ境界を設定します。

theEditor = (EditText) findViewById(R.id.editor);
lineNumbers = (TextView) findViewById(R.id.line_numbers);
theLineCount = theEditor.getLineCount();
lineNumbers.setText(String.valueOf(theLineCount)+"\n");

ただし、最後の行をこれに変更すると、TextViewの各行にEditTextの直前の右側にパディングが突然追加されます。

lineNumbers.append(String.valueOf(theLineCount)+"\n");

それは世界の終わりではありません。しかし、私はこの振る舞いを引き起こしているものに興味を持っていました。私はその言語に不慣れなため、考えられる唯一のことは、appendがEditableをそこにスローすると、パディングが追加されることでした。答えが得られたら、これらの厄介な行をすべて、より単純な追加で置き換えます。

lineNumbers.setText(lineNumbers.getText().toString()+String.valueOf(newLineCount)+"\n");
10
CJ Harries

AppendメソッドでBufferTypeをEDITABLEに変更すると、予期しないパディングが発生したと思います。 setTextメソッドの代わりにappendメソッドを使用してそのパディングを削除したい場合は、

あなたはそれを使ってそれを削除しようとすることができます

textView.setincludeFontPadding(false)

または、この行をxmlファイルのテキストビューに追加します

Android:includeFontPadding="false"

お役に立てれば。

2
sam
lineNumbers.setText("It is test,");

//ここでlineNumbersはそれはテストですを持っています

lineNumbersには"It is test、"が含まれます。その後、もう一度setTextを使用すると、テキストは完全に変更されます

lineNumbers.setText("It is second test,");

//ここでは最初のテキストが失われ、lineNumbersのテキストは"It is second test、"になります。

その後、追加を使用する場合、何が起こるかを見てみましょう。

lineNumbers.append("It is third test,");

//ここに失われません lineNumbersテキスト..次のようになります"2番目のテストです、3番目のテストです"

12
Emre Koç

setText():設定するテキストを入力して、バッファの内容を破棄します。 append():バッファにテキストを追加して、結果を出力します。

例:example.setText("Hello");はHelloを出力画面に出力します。次にexample.append("World");を実行すると、出力としてHelloWorldが表示されます。

6
VikramV

setTextは、既存のテキストを新しいテキストに置き換えます。

Android doc:
このTextViewが表示するテキストを設定し(setText(CharSequence)を参照)、スタイル可能なバッファまたはスパン可能なバッファに格納されるかどうか、および編集可能かどうかも設定します。

append は古いテキストを保持し、連結のように新しいテキストを追加します。

Android Docから
簡易メソッド:指定されたテキストをTextViewの表示バッファーに追加し、まだ編集可能でない場合は、BufferType.EDITABLEにアップグレードします。

4
minhaz

基本的な違いは、setText()は既存のテキストのすべてのテキストを置き換え、append()は既存のテキストに新しい値を追加することです。私が助けてくれたことを願っています。

1
Fokou Franklin