Android
Redigera text
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.
}
});