2017-05-29 1 views
0

Ich mache eine Notiz-App, die eine Funktion zum Hinzufügen von fettem Text über eine Schaltfläche hat. Wenn die Fettschrift-Schaltfläche angeklickt wird, sollte der Fettmodus aktiviert werden, d. H. Der Text, der von einem Benutzer in EditText genommen wird, sollte nun fett sein. Beim nächsten Klicken auf die Schaltfläche Fett sollte der Fettmodus deaktiviert werden, d. H. Der Text des Benutzers sollte nun vom Typ Normal sein.Wie nehmen Sie Fettschrift als Eingabe in EditText in Android?

Ich habe diesen Beitrag gesehen. Change future text to bold in EditText in Android Aber die Antwort in diesem Beitrag hat nicht funktioniert. Wenn ich zum ersten Mal auf die Schaltfläche klicke, wird eine fettgedruckte Eingabe erstellt. Wenn ich jedoch erneut auf die Schaltfläche klicke, um normalen Text als Eingabe zu verwenden, wird weiterhin fett formatierter Text eingegeben. Hier

ist der Code: TextArea.java

package com.example.syed.andtexteditor; 


import android.content.Context; 
import android.graphics.Typeface; 
import android.support.v7.widget.AppCompatEditText; 
import android.text.Spannable; 
import android.text.style.StyleSpan; 
import android.util.AttributeSet; 
import android.widget.EditText; 


public class TextArea extends AppCompatEditText { 

    public static final int TYPEFACE_NORMAL = 0; 
    public static final int TYPEFACE_BOLD = 1; 
    public static final int TYPEFACE_ITALICS = 2; 
    public static final int TYPEFACE_BOLD_ITALICS = 3; 

    private int currentTypeface; 
    private int lastCursorPosition; 
    private int tId; 


    public TextArea(Context context) { 
     super(context); 
     lastCursorPosition = this.getSelectionStart(); 
    } 

    public TextArea(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 


    public int gettId() { 
     return tId; 
    } 

    public void settId(int tId) { 
     this.tId = tId; 
    } 

    public void changeTypeface(int tfId) { 
     currentTypeface = tfId; 
     lastCursorPosition = this.getSelectionStart(); 
    } 

    @Override 
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { 
     Spannable str = this.getText(); 
     StyleSpan ss; 
     int endLength = text.toString().length(); 

     switch(currentTypeface) { 
      case TYPEFACE_NORMAL: 
       ss = new StyleSpan(Typeface.NORMAL); 
       break; 
      case TYPEFACE_BOLD: 
       ss = new StyleSpan(Typeface.BOLD); 
       break; 
      case TYPEFACE_ITALICS: 
       ss = new StyleSpan(Typeface.ITALIC); 
       break; 
      case TYPEFACE_BOLD_ITALICS: 
       ss = new StyleSpan(Typeface.BOLD_ITALIC); 
       break; 
      default: 
       ss = new StyleSpan(Typeface.NORMAL); 
     } 

     str.setSpan(ss, lastCursorPosition, endLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 
} 

MainActivity.java:

package com.example.syed.andtexteditor; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 

public class MainActivity extends AppCompatActivity { 
    boolean boldClicked=false; 
    int typefaceStyle = TextArea.TYPEFACE_NORMAL; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button boldButton = (Button)findViewById(R.id.bold_button); 
     boldButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       TextArea t = (TextArea) findViewById(R.id.textInput); 
       if (!boldClicked) 
        boldClicked = true; 
       else if (boldClicked) 
        boldClicked = false; 
       if (boldClicked) { 
        typefaceStyle = TextArea.TYPEFACE_BOLD; 
        t.changeTypeface(typefaceStyle); 
       } 
      } 
     }); 
    } 
} 
+0

Oder https://github.com/wasabeef/richeditor-android –

+0

Ich brauche nicht diesen komplexen RichTextEditor Ich möchte nur meine EditText-Ansicht Fett Eingabe nehmen. –

+0

Sie müssen einen spannbaren Abschnitt von HTML oder Zeichenfolgen erstellen. Die aktuellen Antworten machen das gesamte Eingabefeld fett, nicht schaltet –

Antwort

0

fügen Sie diese Zeile zum Layout des EditExt

android: Textart = "bold "

+0

Ich denke, er will es tun, wenn Benutzer auf die Schaltfläche klicken - fett. Layout zu setzen, könnte dies nicht lösen. – kggoh

+0

Was kann dann getan werden, um das Problem zu lösen? –

+0

@Syed Souban Ich habe bereits meine Antwort aufgesetzt. – kggoh

Verwandte Themen