Sök…


Arbeta med EditTexts

EditText är den vanliga textinmatningswidgeten i Android-appar. Om användaren behöver ange text i en app är detta det primära sättet för dem att göra det.

Redigera text

Det finns många viktiga egenskaper som kan ställas in för att anpassa beteendet för en EditText. Flera av dessa listas nedan. Kolla in den officiella textfältguiden för ännu mer information om fältet.

Användande

Ett EditText läggs till i en layout med alla standardbeteenden med följande XML:

<EditText
    android:id="@+id/et_simple"
    android:layout_height="wrap_content"
    android:layout_width="match_parent">
</EditText>

Observera att ett EditText helt enkelt är en tunn förlängning av TextView och ärver alla samma egenskaper.

Hämta värdet

Att få värdet på den text som matats in i ett EditText är följande:

EditText simpleEditText = (EditText) findViewById(R.id.et_simple);
String strValue = simpleEditText.getText().toString();

Ytterligare anpassning

Vi kanske vill begränsa posten till en textrad (undvika nya linjer):

<EditText
  android:singleLine="true"
  android:lines="1"
/>

Du kan begränsa tecknen som kan matas in i ett fält med siffrorna attribut:

<EditText
  android:inputType="number"
  android:digits="01"
/>

Detta skulle begränsa siffrorna som anges till bara "0" och "1". Vi kanske vill begränsa det totala antalet tecken med:

<EditText
  android:maxLength="5"
/>

Med hjälp av dessa egenskaper kan vi definiera det förväntade inmatningsbeteendet för textfält.

Justera färger

Du kan justera markeringens bakgrundsfärg på vald text i ett EditText med egenskapen android:textColorHighlight :

<EditText
    android:textColorHighlight="#7cff88"
/>

Visar tips om platshållare

Du kanske vill ställa in ledtråd för EditText-kontrollen för att be en användare om specifik inmatning med:

<EditText
    ...
    android:hint="@string/my_hint">
</EditText>

tips

Ändra den nedersta färgen

Förutsatt att du använder AppCompat-biblioteket, kan du åsidosätta stilarna colorControlNormal, colorControlActivated och colorControlHighlight:

<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#d32f2f</item>
    <item name="colorControlActivated">#ff5722</item>
    <item name="colorControlHighlight">#f44336</item>
</style>

Om du inte ser dessa stilar tillämpas i ett DialogFragment finns det ett känt fel när du använder LayoutInflater som skickas in på metoden onCreateView ().

Problemet har redan åtgärdats i AppCompat v23-biblioteket. Se den här guiden om hur du uppgraderar. En annan tillfällig lösning är att använda Aktivitetens layoutuppblåsare i stället för den som skickas in på metoden onCreateView ():

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment, container);
  }

Lyssnar efter EditText-ingång

Kolla in de grundläggande evenemangets lyssnares klippnoter för att titta på hur du lyssnar på ändringar i ett EditText och utför en åtgärd när dessa ändringar inträffar.

Visar flytande etikettåterkoppling

Traditionellt döljer EditText antydningsmeddelandet (förklaras ovan) efter att användaren började skriva. Dessutom måste alla valideringsfelmeddelanden hanteras manuellt av utvecklaren.

Med TextInputLayout du ställa in en flytande etikett för att visa tips och felmeddelanden. Du hittar mer information här .

Anpassa InputType

Textfält kan ha olika inmatningstyper, såsom nummer, datum, lösenord eller e-postadress. Typen avgör vilken typ av tecken som är tillåtna i fältet och kan uppmana det virtuella tangentbordet att optimera dess layout för ofta använda tecken.

Som standard visas allt EditText en EditText kontroll som vanlig text. Genom att ställa inputType attributet inputType kan vi underlätta inmatning av olika typer av information, till exempel telefonnummer och lösenord:

<EditText
    ...
    android:inputType="phone">
</EditText>

De vanligaste ingångstyperna inkluderar:

Typ Beskrivning
textUri Text som kommer att användas som en URI
textEmailAddress Text som kommer att användas som e-postadress
textPersonName Text som är namnet på en person
textPassword Text som är ett lösenord som bör döljas
siffra Ett numeriskt fält
telefon För att ange ett telefonnummer
datum För att ange ett datum
tid För att komma in en tid
textMultiLine Tillåt flera rader med text i fältet

android:inputType låter dig också specificera vissa tangentbordsbeteenden, till exempel om du vill använda alla nya ord eller använda funktioner som automatisk komplettering och stavförslag.
Här är några vanliga värden för inmatningstyp som definierar tangentbordsbeteenden:

Typ Beskrivning
textCapSentences Normalt texttangentbord som bokstäver den första bokstaven för varje ny mening
textCapWords Normalt texttangentbord som aktiverar varje ord. Bra för titlar eller personnamn
textAutoCorrect Normalt texttangentbord som korrigerar vanligtvis felstavade ord

Du kan ställa in flera inputType attribut om det behövs (separerat med '|').
Exempel:

<EditText
    android:id="@+id/postal_address"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/postal_address_hint"
    android:inputType="textPostalAddress|
                       textCapWords|
                       textNoSuggestions" />

Du kan se en lista över alla tillgängliga ingångstyper här .

"inputype" -attribut

inputype attribut i EditText : (testad i Android 4.4.3 och 2.3.3)

<EditText android:id="@+id/et_test" android:inputType="?????"/>

textLongMessage = Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: ja. Fall: små bokstäver Förslag: ja. Lägg till. tecken: och. och allting

textFilter = Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: ja. Fall: små bokstäver Förslag: nej . Lägg till. tecken: och. och allting

textCapWords = Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: ja. Fall: Camel Case . Förslag: ja. Lägg till. tecken: och. och allting

textCapSentences = Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: ja. Ärende: Meningsfall . Förslag: ja. Lägg till. tecken: och. och allting

time = Tangentbord: numeriskt. Enter-knapp: Skicka / Nästa. Känslor: nej. Fall: -. Förslag: nej . Lägg till. tecken::

textMultiLine = Tangentbord: alfabet / standard. Enter-knapp: nästa rad . Känslor: ja. Fall: små bokstäver Förslag: ja. Lägg till. tecken: och. och allting

nummer = Tangentbord: numeriskt . Enter-knapp: Skicka / Nästa. Känslor: nej. Fall: -. Förslag: nej. Lägg till. tecken: ingenting

textEmailAddress = Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: nej . Fall: små bokstäver Förslag: nej . Lägg till. tecken: @ och . och allting

(Ingen typ) = Tangentbord: alfabet / standard. Enter-knapp: nästa rad . Känslor: ja. Fall: små bokstäver Förslag: ja. Lägg till. tecken: och. och allting

textPassword = Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: nej. Fall: små bokstäver Förslag: nej . Lägg till. tecken: och. och allting

text = Tangentbord: Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: ja. Fall: små bokstäver Förslag: ja. Lägg till. tecken: och. och allting

textShortMessage = Tangentbord: alfabet / standard. Enter-knapp: känslor . Känslor: ja. Fall: små bokstäver Förslag: ja. Lägg till. tecken: och. och allting

textUri = Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: nej. Fall: små bokstäver Förslag: nej . Lägg till. tecken: / och . och allting

textCapCharacters = Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: ja. Fodral: UPPERCASE . Förslag: ja. Lägg till. tecken: och. och allting

telefon = Tangentbord: numeriskt . Enter-knapp: Skicka / Nästa. Känslor: nej. Fall: -. Förslag: nej . Lägg till. karaktär: *** #. - / () WPN, + **

textPersonName = Tangentbord: alfabet / standard. Enter-knapp: Skicka / Nästa. Känslor: ja. Fall: små bokstäver Förslag: ja. Lägg till. tecken: och. och allting


Obs! Inställningen för Auto-capitalization bokstäver ändrar standardbeteendet.

Obs 2: I det Numeric keyboard är ALLA nummer engelska 1234567890.

Obs 3: Inställning av Correction/Suggestion kommer att ändra standardbeteendet.

Gömmer SoftKeyboard

Dölja Softkeyboard är vanligtvis ett grundläggande krav när du arbetar med EditText. Softkeyboard kan som standard bara stängas genom att trycka på bakåtknappen så att de flesta utvecklare använder InputMethodManager för att tvinga Android att dölja det virtuella tangentbordet som kallar hideSoftInputFromWindow och passerar in symbolet för fönstret som innehåller din fokuserade vy. Koden för att göra följande:

public void hideSoftKeyboard()    
{
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);    
}

Koden är direkt, men ytterligare stora problem som uppstår är att döljfunktionen måste anropas när någon händelse inträffar. Vad gör du när du behöver Softkeyboard dolda när du trycker någon annanstans än din EditText? Följande kod ger en snygg funktion som måste anropas i din onCreate () -metod bara en gång.

public void setupUI(View view) 
{
        String s = "inside";
        //Set up touch listener for non-text box views to hide keyboard.
        if (!(view instanceof EditText)) {

            view.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    hideSoftKeyboard();
                    return false;
                }

            });
        }

        //If a layout container, iterate over children and seed recursion.
        if (view instanceof ViewGroup) {

            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

                View innerView = ((ViewGroup) view).getChildAt(i);

                setupUI(innerView);
            }
        }    
}

Ikon eller knapp i anpassad redigera text och dess handling och klicka på lyssnarna.

Detta exempel hjälper till att ha redigera texten med ikonen till höger.

Obs! I detta bara använder jag setCompoundDrawablesWithIntrinsicBounds, så om du vill ändra ikonpositionen kan du uppnå det med setCompoundDrawablesWithIntrinsicBounds i setIcon.

public class MKEditText extends AppCompatEditText {

    public interface IconClickListener {
        public void onClick();
    }

    private IconClickListener mIconClickListener;

    private static final String TAG = MKEditText.class.getSimpleName();

    private final int EXTRA_TOUCH_AREA = 50;
    private Drawable mDrawable;
    private boolean touchDown;

    public MKEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MKEditText(Context context) {
        super(context);
    }

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

    public void showRightIcon() {
        mDrawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_android_black_24dp);

        setIcon();
    }

    public void setIconClickListener(IconClickListener iconClickListener) {
        mIconClickListener = iconClickListener;
    }

    private void setIcon() {
        Drawable[] drawables = getCompoundDrawables();

        setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], mDrawable, drawables[3]);

        setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
        setSelection(getText().length());
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int right = getRight();
        final int drawableSize = getCompoundPaddingRight();
        final int x = (int) event.getX();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA) {
                    touchDown = true;
                    return true;
                }
                break;
            case MotionEvent.ACTION_UP:
                if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA && touchDown) {
                    touchDown = false;
                    if (mIconClickListener != null) {
                        mIconClickListener.onClick();
                    }
                    return true;
                }
                touchDown = false;
                break;

        }
        return super.onTouchEvent(event);
    }
}

Om du vill ändra beröringsområdet kan du ändra värdena EXTRA_TOUCH_AREA som jag gav som 50.

Och för Aktivera knappen och klicka på lyssnaren kan du ringa från din aktivitet eller fragment som det här,

MKEditText mkEditText = (MKEditText) findViewById(R.id.password);
mkEditText.showRightIcon();
mkEditText.setIconClickListener(new MKEditText.IconClickListener() {
            @Override
            public void onClick() {
              // You can do action here for the icon.
               
            }
        });


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow