0

ユーザーがさらにテキストを入力すると拡大する textarea ビューの準備が整っているのではないかと思います。SMSメッセージテキストエリアに組み込まれたAndroidのように。

4

1 に答える 1

0

私は部分的な答えを得ました:)-SMSスタイルのテキストフィールドも必要だったので、残りの文字数を追跡するテキストウォッチャーを含めて、自分で作成しました。

これは次のようになります。

ここに画像の説明を入力

Textwatcher の実装

public class SMSTextWatcher implements TextWatcher {

    private final int maxLength;
    private final int stringId;
    private final TextView textView;


    /**
     * @param maxLength  maximum number of characters that are allowed
     * @param stringId   must have at least one %s in it, for the updated character count.
     * @param targetView target text view that displays the number of characters left.
     */
    public SMSTextWatcher(int maxLength, int stringId, TextView targetView) {
        this.maxLength = maxLength;
        this.textView = targetView;
        this.stringId = stringId;

        updateTextView(maxLength);
    }

    @Override
    public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable editable) {
        //Update textview (the limit is handled by the maxLength attribute)
        updateTextView(maxLength - editable.length());
    }

    public void updateTextView(int charactersLeft) {
        textView.setText(String.format(textView.getContext().getString(stringId), charactersLeft));
    }
}

レイアウト XML - これを widget_sms_field.xml と呼びましょう:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/sms_field_text"
        style="@style/TextAppearance.AppCompat.Large"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:hint="@string/short_text"
        android:imeOptions="actionSend|flagNoEnterAction"
        android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"
        android:maxLength="@integer/sms_text_max_length"
        android:paddingRight="10dp"
        android:singleLine="false" />

    <TextView
        android:id="@+id/sms_field_remaining_characters"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="@string/remaining_characters"
        android:textColor="@color/secondary_text" />
</LinearLayout>

最大の長さ

上記のレイアウト ファイルでは、android:maxLength="@integer/sms_text_max_length" を使用しました。

これを解決するには、プロジェクトの値フォルダーに「integer.xml」というファイルを作成する必要があります。ファイルの内容は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="sms_text_max_length" type="integer">160</item>
</resources>

ファイルに「integer」以外の名前を付ける場合は、@integer/sms_text も適宜変更してください。

「残り x 文字」テキスト

ID sms_field_remaining_characters を持つ小さな灰色のテキスト フィールド (@color/secondary_text - この色を自分で作成する必要があります!) は、残りの文字数を表示するフィールドです。この目的のために、新しい文字列リソースを作成します。

<string name="remaining_characters">%s remaining Characters</string>

独自のレイアウトにウィジェット レイアウト xml を含め、フラグメントの onViewCreated メソッドで、SMSTextWatcher を sms-style フィールドにリンクします。

   @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        EditText textField = (EditText) view.findViewById(R.id.sms_field_text);
        textField.addTextChangedListener(new SMSTextWatcher(
                getResources().getInteger(R.integer.sms_text_max_length),
                R.string.remaining_characters,
                (TextView) view.findViewById(R.id.sms_field_remaining_characters)));
    }

終わり :) !ご質問やご提案がありましたら、お知らせください。

于 2015-05-28T15:04:01.887 に答える