Einführung in diesen Abschnitt:

Im vorherigen Abschnitt haben wir den ersten gelernt. UIKontrolleTextView(Textfeld),Der Artikel enthält viele Anforderungen, die bei der tatsächlichen Entwicklung auftreten können. Lösung,Sollte Bequemlichkeit für Ihre Entwicklung bringen,In diesem Abschnitt,Lernen wir die zweite sehr häufige Steuerung.EditText(Eingabefeld); UndTextViewSehr ähnlich,Der größte Unterschied ist:EditTextKann Benutzereingaben akzeptieren!Gleich wie vorher,Wir sprechen nicht einzeln über Attribute., Sprechen Sie nur über praktische Anwendungen,Um die Immobilie abzurechnen, können Sie sie sich selbst ansehen.APIDokument:APIDokument;Dann starten Sie diesen Abschnitt!


1.Standard-Aufforderungstext festlegen

Wie unten gezeigt,Ich glaube, dass Sie mit dieser Benutzeroberfläche nichts zu tun haben.,Ja,Das Interface benutzen wir oft

Im Vergleich dazu,Wie ist das unten??

Es ist nicht schlecht.,Natürlich,Fügt das Layout hier nicht ein,Hier werden nur zwei Steuerattribute des Standard-Aufforderungstextes eingeführt.:

Die zwei Eigenschaften des Standard-Aufforderungstextes lauten wie folgt:

android:hint="Standard-Aufforderungstext"
android:textColorHint="#95A1AA"

Ersteres legt den Textinhalt der Eingabeaufforderung fest,Letzteres legt die Farbe des Hinweistextes fest!


2.Wählen Sie den gesamten Textinhalt in der ausgewählten Komponente aus, nachdem Sie den Fokus erhalten haben

Wenn wir den Fokus nach dem Klicken auf das Eingabefeld erhalten möchten,Bewegen Sie den Cursor nicht an den Anfang oder das Ende des Texts;Aber Holen Sie sich den gesamten Textinhalt in das Eingabefeld!Diesmal können wir verwendenselectAllOnFocusAttribut

android:selectAllOnFocus="true"

Wie die folgenden Renderings: Die erste besteht darin, diese Eigenschaft festzulegen.,Die zweite ist, dass die Eigenschaft nicht festgelegt ist.,Stellen Sie auftrueVonEditTextNachdem ich den Fokus bekommen habe Gesamter Text ausgewählt!


3.LimitEditTextEingabetyp

Manchmal müssen wir möglicherweise die von uns eingegebenen Daten begrenzen.,Zum Beispiel bei der Eingabe einer Telefonnummer,Sie haben eine Buchstabenfolge eingegeben,Dies Offensichtlich nicht im Einklang mit unseren Erwartungen,Und die Begrenzung des Eingabetyps kann passiereninputTypeAttribut zu erreichen!

Beispielsweise kann das Limit nur eine Telefonnummer sein.,Passwort(textPassword):

<EditText   
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
        android:inputType="phone" />  

Optionale Parameter sind wie folgt:

Textart,Kapitalisierter、Kleinbuchstaben und Zahlen

android:inputType="none"  
android:inputType="text"  
android:inputType="textCapCharacters"  
android:inputType="textCapWords"  
android:inputType="textCapSentences"  
android:inputType="textAutoCorrect"  
android:inputType="textAutoComplete"  
android:inputType="textMultiLine"  
android:inputType="textImeMultiLine"  
android:inputType="textNoSuggestions"  
android:inputType="textUri"  
android:inputType="textEmailAddress"  
android:inputType="textEmailSubject"  
android:inputType="textShortMessage"  
android:inputType="textLongMessage"  
android:inputType="textPersonName"  
android:inputType="textPostalAddress"  
android:inputType="textPassword"  
android:inputType="textVisiblePassword"  
android:inputType="textWebEditText"  
android:inputType="textFilter"  
android:inputType="textPhonetic" 

Numerischer Typ

android:inputType="number"  
android:inputType="numberSigned"  
android:inputType="numberDecimal"  
android:inputType="phone"//Wähltastatur  
android:inputType="datetime"  
android:inputType="date"//Datumstastatur  
android:inputType="time"//Zeittastatur

4.Stellen Sie die minimale Linie ein,Die meisten Zeilen,Einzelne Zeile,Mehrere Zeilen,Automatischer Zeilenumbruch

EditTextDie Standardeinstellung ist die mehrzeilige Anzeige,Und kann automatisch wickeln,Das heißt, wenn eine Linie nicht angezeigt wird,Er wechselt automatisch in die zweite Zeile

Wir können es begrenzen,Zum Beispiel
Legen Sie die Mindestanzahl der Zeilen fest:android:minLines="3"
Oder setzenEditTextMaximale Zeilenanzahl:android:maxLines="3"
PS:Wenn die Eingabe überschreitetmaxline,Der Text wird automatisch nach oben gescrollt!!

Darüber hinaus möchten wir häufig einschränkenEditTextEs ist nur eine Zeileneingabe zulässig,Und werde nicht scrollen,Wie die obige Anmeldeschnittstelle Beispiel,Wir müssen nur setzen

android:singleLine="true"

Kann einen einzelnen Line-Eingang ohne Zeilenumbruch erreichen


5.Textintervall einstellen,Legen Sie den Großschreibungstyp für englische Buchstaben fest

Wir können den Abstand der Wörter durch die folgenden zwei Eigenschaften einstellen.:

android:textScaleX="1.5"    //Stellen Sie den horizontalen Abstand zwischen Wörtern und Wörtern ein
android:textScaleY="1.5"    //Stellen Sie den vertikalen Abstand zwischen Wörtern und Wörtern ein

Darüber hinausEditTextAußerdem konnten wir die Großbuchstaben für englische Buchstaben festlegen:android:capitalize Standardnone,Drei optionale Werte sind angegeben:

  • sentences:Schreibe nur den ersten Buchstaben in Großbuchstaben
  • words:Anfangsbuchstaben jedes Wortes,Verwenden Sie Leerzeichen, um Wörter zu unterscheiden
  • characters:Jeder englische Buchstabe wird groß geschrieben

6.KontrolleEditTextDer Abstand zwischen dem Umfang und dem Abstand zwischen dem internen Text und dem Rand

Wir nutzenmarginVerwandte Eigenschaften erhöhen den Abstand von Komponenten zu anderen Steuerelementen,Zum Beispielandroid:marginTop = "5dp" Verwenden SiepaddingVergrößern Sie den Abstand zwischen Text und Komponentenrändern innerhalb der Komponente,Zum Beispielandroid:paddingTop = "5dp"


7.EinstellungEditTextKonzentriere dich,Öffnen Sie gleichzeitig die Tastatur

Über dasEditTextKonzentriere dich,Öffnen Sie die Tastatur,Ich war eine Weile in das Projekt verwickelt. Nachfrage ist:EintretenActivityNachher,LassenEditTextKonzentriere dich,Gleichzeitig erscheint eine kleine Tastatur für den Benutzer! Ich habe viele Online-Methoden ausprobiert.,Ich weiß nicht, ob es daran liegt, dass ich es benutzt habe.5.1Systemproblem! Unter der Zusammenfassung:

Das erste ist zu lassenEditTextKonzentrieren Sie sich und klarer Fokus

edit.requestFocus(); //Bitte um Fokussierung
edit.clearFocus(); //Klarer Fokus

Nachdem ich den Fokus bekommen habe,Pop-up-Tastatur,Ich verbringe die meiste Zeit damit.:

  • Niedrige Version des Systems direktrequestFocusÖffnet automatisch die Tastatur
  • Bei einer etwas höheren Version müssen wir die Tastatur manuell spielen: Erstens:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

Zweitens:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);     imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);  
imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //Zum Ausblenden der Tastatur gezwungen  

Ich weiß nicht warum.,Mit den beiden oben genannten Methoden wird die Tastatur nicht geöffnet.,Ich habe es endlich benutzt.:windowSoftInputModeProperty löst das Problem des Aufklappens der Tastatur,Hier, um mit Ihnen zu teilen:

android:windowSoftInputMode ActivityInteraktionsmodus zwischen Hauptfenster und Softtastatur,Kann verwendet werden, um Okklusionsprobleme bei Eingabemethoden zu vermeiden,Android1.5eine neue Funktion。
Diese Eigenschaft kann zwei Dinge beeinflussen:
【Eins】Wenn es Fokus gibt,Ist die Softtastatur ausgeblendet oder angezeigt?
【Zwei】Gibt an, ob das aktive Hauptfenster verkleinert werden soll, um Platz für die Soft-Tastatur zu schaffen

Der einfache Punkt ist die Tastatursteuerung, wenn es Fokus gibt und ob es verringert wird.ActFenstergröße,Wird verwendet, um eine kleine Tastatur zu platzieren
Folgende Werte stehen zur Auswahl,Es können mehrere Werte eingestellt werden,Verwenden Sie"|"Trennen
stateUnspecified:Der Status der Softtastatur ist nicht angegeben,Das System wählt einen geeigneten Status oder themenabhängige Einstellungen
stateUnchanged:Wenn dasactivityBeim Erscheinen,Die Soft-Tastatur bleibt auf der vorherigenactivityZustand,Ob es ausgeblendet oder angezeigt wird
stateHidden:BenutzerauswahlactivityZeit,Die Softtastatur ist immer ausgeblendet
stateAlwaysHidden:Wann?ActivityWenn das Hauptfenster den Fokus erhält,Weiche Tastaturen werden auch immer ausgeblendet
stateVisible:Softtastatur ist normalerweise sichtbar
stateAlwaysVisible:BenutzerauswahlactivityZeit,Der Status der Softtastatur wird immer angezeigt
adjustUnspecified:Standardeinstellung,Normalerweise wird es vom System ausgeblendet oder angezeigt.
adjustResize:DieActivityPassen Sie die Größe des Bildschirms immer an, um Platz für die Soft-Tastatur zu lassen
adjustPan:Der Inhalt des aktuellen Fensters wird automatisch verschoben, sodass der aktuelle Fokus niemals von der Tastatur verdeckt wird und der Benutzer immer den Teil der Eingabe sehen kann.

Wir könnenAndroidManifest.xmlFür die Notwendigkeit, die Tastatur zu öffnenActivityLegen Sie diese Eigenschaft fest,Zum Beispiel:

Dann umEditTextObjektrequestFocus()Es ist in Ordnung~


8.EditTextCursor-Positionssteuerung

Manchmal brauchen wir unsere KontrolleEditTextBewegen Sie den Cursor an die angegebene Position oder wählen Sie Text aus!
EditTextVersorgt uns mitsetSelection()Methode,Es gibt zwei Formen der Methode:


Ein Parameter ist das Setzen der Cursorposition,Die beiden Parameter sind der mittlere Teil der eingestellten Start- und Endposition.,Teilweise ausgewählt!
Natürlich können wir auch anrufensetSelectAllOnFocus(true);LassenEditTextMarkieren Sie den gesamten Text, wenn Sie den Fokus erhalten!
Darüber hinaus können wir auch anrufensetCursorVisible(false);Stellen Sie den Cursor so ein, dass er nicht angezeigt wird
Kann auch anrufengetSelectionStart()UndgetSelectionEndRuft die vordere und hintere Position des aktuellen Cursors ab


9.AusdruckEditTextEinfache Implementierung

Ich glaube, jeder hat rechtQQOder WeChat ist damit sehr vertraut.,Wenn wir den Text senden, können wir ihn zusammen mit dem Ausdruck senden.,Es gibt zwei einfache Implementierungen:

1.Verwenden SieSpannableStringZu erreichen
2.Verwenden SieHtmlKlasse zu erreichen
Hier verwende ich den ersten,Hier wird nur ein einfacher Effekt erzielt.,Jeder kann die Methode extrahieren,BenutzerdefinierteEditText;
Sie können auch selbst schreiben.QQEin solches Eingabefeld mit mehreren Ausdrucksmöglichkeiten!

Schauen Sie sich die Renderings an(Klicken Sie auf Emotic hinzufügen, um das Hinzufügen des Emoticon abzuschließen):

Der Code ist auch sehr einfach:

public class MainActivity extends Activity {
    private Button btn_add;
    private EditText edit_one;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_add = (Button) findViewById(R.id.btn_add);
        edit_one = (EditText) findViewById(R.id.edit_one);
        btn_add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                SpannableString spanStr = new SpannableString("imge");
                Drawable drawable = MainActivity.this.getResources().getDrawable(R.drawable.f045);
                drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
                ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);
                spanStr.setSpan(span,0,4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                int cursor = edit_one.getSelectionStart();
                edit_one.getText().insert(cursor, spanStr);
            }
        });
    }
}

PS:Richtig,Vergiss nicht, ein Bild zu machen.~


10.Mit Löschen-ButtonEditText

Wir sind oft beiAppGesehen auf der Eingabeschnittstelle:


Wenn wir den Inhalt eingeben,Auf der rechten Seite wird ein kleines Gabel-Symbol angezeigt,Wenn wir auf klicken, wird der Inhalt des Eingabefelds gelöscht.!
Es ist eigentlich sehr einfach zu implementieren.:
为EditText设置addTextChangedListener,然后重写TextWatcher()里的抽象方法,这个用于监听输入框变化的;然后setCompoundDrawablesWithIntrinsicBounds设置小叉叉的图片;最后,重写onTouchEvent方法,如果点击区域是小叉叉图片的位置,清空文本!

实现代码如下:

public class EditTextWithDel extends EditText {

    private final static String TAG = "EditTextWithDel";
    private Drawable imgInable;
    private Drawable imgAble;
    private Context mContext;

    public EditTextWithDel(Context context) {
        super(context);
        mContext = context;
        init();
    }

    public EditTextWithDel(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    public EditTextWithDel(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        init();
    }

    private void init() {
        imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray);
        addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

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

            @Override
            public void afterTextChanged(Editable s) {
                setDrawable();
            }
        });
        setDrawable();
    }

    // 设置删除图片
    private void setDrawable() {
        if (length() < 1)
            setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
        else
            setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
    }

    // 处理删除事件
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (imgInable != null && event.getAction() == MotionEvent.ACTION_UP) {
            int eventX = (int) event.getRawX();
            int eventY = (int) event.getRawY();
            Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);
            Rect rect = new Rect();
            getGlobalVisibleRect(rect);
            rect.left = rect.right - 100;
            if (rect.contains(eventX, eventY))
                setText("");
        }
        return super.onTouchEvent(event);
    }
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
}

本节小结:

本节给大家介绍了Android UI控件中的EditText(输入框)控件,用法有很多,当然上述情况肯定满足不了实际需求的,实际开发中我们可能需要根据自己的需求来自定义EditText!当然,这就涉及到了自定义控件这个高级一点的主题了,在进阶部分我们会对Android中的自定义控件进行详细的讲解!现在会用就可以了~

Tutorial für fliegende Fische@2001-2030