Android
Edytować tekst
Szukaj…
Praca z EditTexts
EditText to standardowy widget do wprowadzania tekstu w aplikacjach na Androida. Jeśli użytkownik musi wprowadzić tekst do aplikacji, jest to główny sposób, aby to zrobić.
Edytować tekst
Istnieje wiele ważnych właściwości, które można ustawić w celu dostosowania zachowania EditText. Kilka z nich wymieniono poniżej. Sprawdź oficjalny przewodnik po polach tekstowych, aby uzyskać jeszcze więcej informacji na temat pól wejściowych.
Stosowanie
Tekst edycji jest dodawany do układu ze wszystkimi domyślnymi zachowaniami przy użyciu następującego kodu XML:
<EditText
android:id="@+id/et_simple"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</EditText>
Zauważ, że EditText jest po prostu cienkim rozszerzeniem TextView i dziedziczy wszystkie te same właściwości.
Odzyskiwanie wartości
Uzyskanie wartości tekstu wprowadzonego do EditText wygląda następująco:
EditText simpleEditText = (EditText) findViewById(R.id.et_simple);
String strValue = simpleEditText.getText().toString();
Dalsze dostosowywanie wejścia
Możemy ograniczyć wpis do jednego wiersza tekstu (unikaj nowych linii):
<EditText
android:singleLine="true"
android:lines="1"
/>
Możesz ograniczyć liczbę znaków, które można wprowadzić w polu, używając atrybutu cyfry:
<EditText
android:inputType="number"
android:digits="01"
/>
Ograniczyłoby to wprowadzane cyfry do „0” i „1”. Możemy chcieć ograniczyć całkowitą liczbę znaków za pomocą:
<EditText
android:maxLength="5"
/>
Za pomocą tych właściwości możemy zdefiniować oczekiwane zachowanie wejściowe dla pól tekstowych.
Dostosowywanie kolorów
Możesz dostosować kolor podświetlenia zaznaczonego tekstu w android:textColorHighlight
właściwości android:textColorHighlight
:
<EditText
android:textColorHighlight="#7cff88"
/>
Wyświetlanie wskazówek symboli zastępczych
Możesz ustawić podpowiedź do kontrolki EditText, aby monitować użytkownika o określone dane wejściowe za pomocą:
<EditText
...
android:hint="@string/my_hint">
</EditText>
Poradnik
Zmiana koloru dolnej linii
Zakładając, że korzystasz z biblioteki AppCompat, możesz przesłonić style colorControlNormal, colorControlActivated i 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>
Jeśli nie widzisz tych stylów zastosowanych w DialogFragment, istnieje znany błąd podczas korzystania z LayoutInflater przekazanego do metody onCreateView ().
Problem został już rozwiązany w bibliotece AppCompat v23. Zobacz ten przewodnik na temat aktualizacji. Innym tymczasowym obejściem jest użycie inflatora układu działania zamiast tego przekazanego do metody onCreateView ():
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment, container);
}
Odsłuchiwanie wprowadzania EditText
Zapoznaj się z notatkami dla podstawowych słuchaczy zdarzeń, aby dowiedzieć się, jak nasłuchiwać zmian w EditText i wykonywać działania, gdy te zmiany się pojawią.
Wyświetlanie pływającej informacji zwrotnej na etykiecie
Tradycyjnie, EditText ukrywa komunikat podpowiedzi (wyjaśniony powyżej) po tym, jak użytkownik zacznie pisać. Ponadto wszelkie komunikaty o błędach sprawdzania poprawności musiały być zarządzane ręcznie przez programistę.
TextInputLayout
umożliwia ustawienie pływającej etykiety w celu wyświetlania podpowiedzi i komunikatów o błędach. Możesz znaleźć więcej szczegółów tutaj .
Dostosowywanie InputType
Pola tekstowe mogą mieć różne typy wprowadzania, takie jak numer, data, hasło lub adres e-mail. Typ określa, jakie znaki są dozwolone w polu, i może skłonić wirtualną klawiaturę do optymalizacji układu pod kątem często używanych znaków.
Domyślnie wszelka zawartość tekstowa w EditText
jest wyświetlana jako zwykły tekst. inputType
atrybut inputType
, możemy ułatwić wprowadzanie różnych rodzajów informacji, takich jak numery telefonów i hasła:
<EditText
...
android:inputType="phone">
</EditText>
Najpopularniejsze typy wprowadzania obejmują:
Rodzaj | Opis |
---|---|
textUri | Tekst, który będzie używany jako identyfikator URI |
textEmailAddress | Tekst, który będzie używany jako adres e-mail |
textPersonName | Tekst, który jest imieniem osoby |
textPassword | Tekst będący hasłem, które powinno być zasłonięte |
numer | Pole tylko numeryczne |
telefon | Do wprowadzenia numeru telefonu |
data | Za wprowadzenie daty |
czas | Do wprowadzenia czasu |
textMultiLine | Zezwalaj na wiele wierszy tekstu w polu |
android:inputType
pozwala również określić określone zachowania klawiatury, takie jak na przykład android:inputType
wielkimi literami wszystkich nowych słów lub korzystanie z funkcji takich jak automatyczne uzupełnianie i sugestie pisowni.
Oto niektóre z typowych wartości typów wejściowych, które definiują zachowanie klawiatury:
Rodzaj | Opis |
---|---|
textCapSentences | Normalna klawiatura tekstowa, w której każda nowa litera jest pisana wielką literą |
textCapWords | Normalna klawiatura tekstowa, która zawiera wielkie litery każdego słowa. Dobre dla tytułów lub nazwisk osób |
textAutoCorrect | Normalna klawiatura tekstowa, która poprawia często błędnie napisane słowa |
W razie potrzeby można ustawić wiele atrybutów inputType
(oddzielonych inputType
„|”).
Przykład:
<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" />
Możesz zobaczyć listę wszystkich dostępnych typów wejść tutaj .
Atrybut `inputype`
inputype
atrybut EditText
widżet (testowane na Androidzie 4.4.3 i 2.3.3)
<EditText android:id="@+id/et_test" android:inputType="?????"/>
textLongMessage = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko
textFilter = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: małe litery. Sugestia: nie Dodaj. zwęgla: i. i wszystko
textCapWords = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Case: Camel Case . Sugestia: tak. Dodaj. zwęgla: i. i wszystko
textCapSentences = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Case: Case sentent . Sugestia: tak. Dodaj. zwęgla: i. i wszystko
czas = klawiatura: numeryczna. Przycisk Enter: Wyślij / Dalej. Emocja: nie. Walizka: -. Sugestia: nie Dodaj. znaki::
textMultiLine = Klawiatura: alfabet / domyślna. Przycisk Enter: następny wiersz . Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko
liczba = klawiatura: numeryczna . Przycisk Enter: Wyślij / Dalej. Emocja: nie. Walizka: -. Sugestia: nie Dodaj. znaki: nic
textEmailAddress = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: nie . Obudowa: małe litery. Sugestia: nie Dodaj. znaki: @ i . i wszystko
(Bez typu) = Klawiatura: alfabet / wartość domyślna. Przycisk Enter: następny wiersz . Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko
textPassword = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: nie. Obudowa: małe litery. Sugestia: nie Dodaj. zwęgla: i. i wszystko
tekst = Klawiatura: Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko
textShortMessage = Klawiatura: alfabet / domyślna. Przycisk Enter: emocja . Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko
textUri = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: nie. Obudowa: małe litery. Sugestia: nie Dodaj. znaki: / i . i wszystko
textCapCharacters = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: DUŻA . Sugestia: tak. Dodaj. zwęgla: i. i wszystko
telefon = klawiatura: numeryczna . Przycisk Enter: Wyślij / Dalej. Emocja: nie. Walizka: -. Sugestia: nie Dodaj. znaki: *** #. - / () WPN, + **
textPersonName = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko
Uwaga: Auto-capitalization
włączania Auto-capitalization
zmieni domyślne zachowanie.
Uwaga 2: Na Numeric keyboard
WSZYSTKIE numery to angielski 1234567890.
Uwaga 3: Ustawienie Correction/Suggestion
zmieni domyślne zachowanie.
Ukrywanie SoftKeyboard
Ukrywanie Softkeyboard jest podstawowym wymogiem, zwykle podczas pracy z EditText. Klawiaturę programową domyślnie można zamknąć tylko przez naciśnięcie przycisku Wstecz, więc większość programistów używa InputMethodManager, aby zmusić Androida do ukrycia wirtualnej klawiatury wywołującej hideSoftInputFromWindow i przekazując token okna zawierającego skoncentrowany widok. Kod do wykonania następujących czynności:
public void hideSoftKeyboard()
{
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
Kod jest bezpośredni, ale innym poważnym problemem, który się pojawia, jest konieczność wywołania funkcji ukrywania w przypadku wystąpienia jakiegoś zdarzenia. Co zrobić, gdy potrzebujesz ukryć klawiaturę programową po naciśnięciu dowolnego miejsca poza tekstem edycji? Poniższy kod podaje schludną funkcję, którą należy wywołać w metodzie onCreate () tylko raz.
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);
}
}
}
Ikona lub przycisk wewnątrz niestandardowej edycji tekstu oraz jego akcji i detektorów kliknięć.
Ten przykład pomoże Ci edytować tekst z ikoną po prawej stronie.
Uwaga: W tym właśnie używam setCompoundDrawablesWithIntrinsicBounds, więc jeśli chcesz zmienić pozycję ikony, możesz to osiągnąć za pomocą setCompoundDrawablesWithIntrinsicBounds w 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);
}
}
Jeśli chcesz zmienić obszar dotykowy, możesz zmienić domyślne wartości EXTRA_TOUCH_AREA, które podałem jako 50.
Aby włączyć przycisk nasłuchiwania przycisku i kliknięcia, do którego możesz zadzwonić z działania lub fragmentu w ten sposób,
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.
}
});