Java Android - 如何让新行在前面有一个要点

时间:2018-02-02 21:40:33

标签: java android

我想在我的Android应用中制作一个音符功能。因此,每次在EditText字段中创建新行时,都会在其前面放置一个项目符号。

所以说我输入了:

  

您好

     

世界!

应该输出的是:

  

•你好

     

•世界!

目前我的代码正在输出:

  

•你好

     

     

世界!

这个想法很简单,执行让我感到不安!

有什么建议吗?

这是我的Java代码:

   mNote.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {

        String words = s.toString();
        Integer mPrevWord = mNote.length() - 1;
        Log.d(TAG, "beforeTextChanged: words "+ s);


        if(words.length()==1){
            words = String.format("• %s", s.toString());
            mNote.setText(words);
            mNote.setSelection(words.length());
        }

    }
});

mNote.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

            Log.d(TAG, "onEditorAction: v " + v);
            Log.d(TAG, "onEditorAction:id " + actionId);
            Log.d(TAG, "onEditorAction: event " + event);
            Log.d(TAG, "onEditorAction: mNote input" + mNote);
            String editorWords = String.format("%s %n • ", mNote.getText().toString());
            Log.d(TAG, "onEditorAction: editwords: " + editorWords);
            mNote.setText(editorWords);
            mNote.setSelection(mNote.length());

            return false;

    }

});

和我的XML代码一样:

        <!-- Note info -->

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/relLayout6"
            android:layout_below="@id/relLayout4"
            android:padding="10dp">
            <ImageView
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:src="@drawable/ic_note"
                android:id="@+id/ivNote"/>
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/ivNote"
                android:inputType="textMultiLine|textAutoCorrect"
                android:textSize="16sp"
                android:textColor="@color/black"
                android:id="@+id/etContacTNote"
                android:layout_marginStart="20dp" />

        </RelativeLayout>

2 个答案:

答案 0 :(得分:0)

此字符具有编码,与所有带反斜杠的编码一样使用,因此找到它的ASCII字符并写入ASCII而不是原始值。

答案 1 :(得分:0)

图示出来! 完全删除了我的setOnEditor,因为它在使用android键盘时实际上没有注册回车键,只有我输入的物理键盘才能注册。

使用addTextChangedListener来比较要添加的新单词。 制作一个数组列表,如果该arraylist突然变成一个新行,则插入一个新的项目符号点。 这是代码!

 public void afterTextChanged(Editable s) {

            String words = s.toString();
            Log.d(TAG, "beforeTextChanged: words "+ s);

            List<String> myWordList = new ArrayList<String>();
            myWordList.add(s.toString());

            Log.d(TAG, "afterTextChanged: myWord " + myWordList);
            char charWord = myWordList.toString().charAt(s.toString().length());

            if(charWord == '\n' && mPreviousKeyStroke != KeyEvent.KEYCODE_DEL){
                words = String.format("%s\u2022 ", s.toString());
                mNote.setText(words);
                mNote.setSelection(words.length());
            }


            if(words.length()==1 && mPreviousKeyStroke != KeyEvent.KEYCODE_DEL
                    && !words.contains("\u2022")){
                words = String.format("\u2022 %s", s.toString());
                mNote.setText(words);
                mNote.setSelection(words.length());
            }


        }
    });