Odpowiedzi:
Jest to najlepsze narzędzie, którego możesz użyć do wszystkich widoków, i ZA DARMO wiele dzięki @ Jérôme Van Der Linden .
Generator kolorów Holo dla Androida pozwala w łatwy sposób tworzyć komponenty dla Androida, takie jak EditText
lub pokrętło z własnymi kolorami dla aplikacji na Androida. Wygeneruje wszystkie niezbędne dziewięć łatek plus powiązane pliki XML i style, które można skopiować bezpośrednio do projektu.
AKTUALIZACJA 1
Ta domena wydaje się wygasła, ale projekt jest otwartym źródłem, które można znaleźć tutaj
Spróbuj
ten obraz został umieszczony w tle EditText
android:background="@drawable/textfield_activated"
AKTUALIZACJA 2
W przypadku interfejsu API 21 lub nowszego można użyć android:backgroundTint
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Underline color change"
android:backgroundTint="@android:color/holo_red_light" />
Aktualizacja 3
teraz Mamy wsparcie z powrotemAppCompatEditText
Uwaga: Musimy użyć app: backgroundTint zamiast Androida: backgroundTint
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Underline color change"
app:backgroundTint="@color/blue_gray_light" />
Nie lubię poprzednich odpowiedzi. Najlepszym rozwiązaniem jest użycie:
<android.support.v7.widget.AppCompatEditText
app:backgroundTint="@color/blue_gray_light" />
android:backgroundTint
dla EditText
działa tylko na API21 + . Z tego powodu musimy korzystać z biblioteki wsparcia i AppCompatEditText
.
Uwaga: musimy użyć app:backgroundTint
zamiastandroid:backgroundTint
Wersja AndroidX
<androidx.appcompat.widget.AppCompatEditText
app:backgroundTint="@color/blue_gray_light" />
Możesz także szybko zmienić kolor podkreślenia EditText poprzez przyciemnienie tła EditText w następujący sposób:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Something or Other"
android:backgroundTint="@android:color/holo_green_light" />
dla interfejsu API poniżej 21 możesz użyć atrybutu kompozycji w EditText
kodzie poniżej kodu do pliku stylu
<style name="MyEditTextTheme">
<item name="colorControlNormal">#FFFFFF</item>
<item name="colorControlActivated">#FFFFFF</item>
<item name="colorControlHighlight">#FFFFFF</item>
</style>
użyj tego stylu EditText
jako
<EditText
android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="@dimen/user_input_field_height"
android:layout_marginTop="40dp"
android:hint="@string/password_hint"
android:theme="@style/MyEditTextTheme"
android:singleLine="true" />
Programowo możesz spróbować:
editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_red_light), PorterDuff.Mode.SRC_ATOP);
myślę, że najlepszym sposobem jest temat:
<style name="MyEditTextTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorControlNormal">@color/black</item>
<item name="colorControlActivated">@color/action_blue</item>
<item name="colorControlHighlight">@color/action_blue</item>
</style>
<style name="AddressBookStyle" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">13sp</item>
<item name="android:theme">@style/MyEditTextTheme</item>
</style>
<android.support.v7.widget.AppCompatEditText
style="@style/AddressBookStyle"/>
Aby zmienić kolor podkreślenia Edittext:
Jeśli chcesz, aby cała aplikacja współdzieliła ten styl, możesz wykonać następujące czynności.
(1) przejdź do pliku styles.xml. Twój AppTheme, który dziedziczy element nadrzędny Theme.AppCompat.Light.DarkActionBar (w moim przypadku) będzie podstawowym elementem nadrzędnym wszystkich plików stylów w Twojej aplikacji. Zmień jego nazwę na „AppBaseTheme”. Utwórz inny styl pod nim, który ma nazwę AppTheme i dziedziczy po AppBaseTheme, który właśnie edytowałeś. Będzie to wyglądać następująco:
<!-- Base application theme. -->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="windowActionBar">false</item>
<!--see http://www.google.com/design/spec/style/color.html#color-color-palette-->
<item name="colorPrimary">@color/material_brown_500</item>
<item name="colorPrimaryDark">@color/material_brown_700</item>
<item name="colorAccent">@color/flamingo</item>
<style name="AppTheme" parent="AppBaseTheme">
<!-- Customize your theme here. -->
</style>
Następnie zmień „colorAccent” na dowolny kolor, jaki ma mieć kolor linii EditText.
(2) Jeśli masz inne foldery wartości ze stylem.xml, ten krok jest bardzo ważny. Ponieważ plik ten odziedziczy po poprzednim nadrzędnym pliku XML. Na przykład mam wartości-19 / styles.xml. Dotyczy to w szczególności KitKata i nowszych wersji. Zmień jego element nadrzędny na AppBaseTheme i upewnij się, że pozbyłeś się „colorAccent”, aby nie zastępował koloru elementu nadrzędnego. Musisz także zachować elementy specyficzne dla wersji 19. Wtedy będzie to wyglądać tak.
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:windowTranslucentStatus">true</item>
</style>
</resources>
Jest to dość proste (wymagane: minimum API 21) ...
Keep Coding ........ :)
Kolor linii jest określony przez EditText
właściwość tła. Aby to zmienić, należy zmienić android:background
plik układu.
Powinienem zauważyć, że ten styl został osiągnięty dzięki zastosowaniu 9-łatowej szuflady. Jeśli spojrzysz na SDK, zobaczysz, że tłem EditText
jest ten obraz:
Aby to zmienić, możesz otworzyć go w programie do obróbki zdjęć i pokolorować go w żądanym kolorze. Zapisz go jako, bg_edit_text.9.png
a następnie włóż do folderu, który możesz wyciągnąć. Teraz możesz zastosować go jako tło dla swojego EditText
podobnego:
android:background="@drawable/bg_edit_text"
Możesz zmienić kolor EditText programowo za pomocą następującego wiersza kodu:edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));
Tło widżetów zależy od poziomu interfejsu API .
ALTERNATYWNY 1
Możesz podać niestandardowy obraz jako EditText
tło
android:background="@drawable/custom_editText"
Twój obraz powinien wyglądać mniej więcej tak. Daje pożądany efekt.
ALTERNATYWNY 2
Ustaw ten plik XML na EditText
atrybut tła.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">
<solid android:color="#4C000000"/>
<corners android:bottomRightRadius="5dp"
android:bottomLeftRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp"/>
</shape>
Będzie to miało taki sam wygląd i działanie EditText
na każdym interfejsie API.
Możesz zmienić kolor poprzez przyciemnienie tła
<EditText
android:backgroundTint="@color/red"/>
drawable / bg_edittext.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="@color/colorDivider" />
</shape>
</item>
</layer-list>
Ustaw na EditText
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_edittext"/>
Użyj tej metody ... i zmodyfikuj ją zgodnie z nazwami widoków. Ten kod działa świetnie.
private boolean validateMobilenumber() {
if (mobilenumber.getText().toString().trim().isEmpty() || mobilenumber.getText().toString().length() < 10) {
input_layout_mobilenumber.setErrorEnabled(true);
input_layout_mobilenumber.setError(getString(R.string.err_msg_mobilenumber));
// requestFocus(mobilenumber);
return false;
} else {
input_layout_mobilenumber.setError(null);
input_layout_mobilenumber.setErrorEnabled(false);
mobilenumber.setBackground(mobilenumber.getBackground().getConstantState().newDrawable());
}
Jeśli potrzebujesz płaskiej linii, możesz to łatwo zrobić za pomocą xml. Oto przykład xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:top="-1dp"
android:left="-1dp"
android:right="-1dp"
android:bottom="1dp"
>
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#6A9A3A"/>
</shape>
</item>
</layer-list>
Zastąp kształt selektorem, jeśli chcesz ustawić inną szerokość i kolor dla zogniskowanego tekstu edycyjnego.
Najlepszym rozwiązaniem jest, aby używać AppCompatEditText
z backgroundTint
atrybutem app
nazw. to znaczy
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
app:backgroundTint="YOUR COLOR"
android:layout_height="wrap_content" />
kiedy android:backgroundTint
go używamy , będzie działał tylko w API21 lub więcej, ale app:backgroundTint
działa na wszystkich poziomach API, które robi Twoja aplikacja.
<EditText
android:id="@+id/et_password_tlay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:textColorHint="#9e9e9e"
android:backgroundTint="#000"
android:singleLine="true"
android:drawableTint="#FF4081"
android:paddingTop="25dp"
android:textColor="#000"
android:paddingBottom="5dp"
android:inputType="textPassword"/>
<View
android:id="@+id/UnderLine"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/et_password_tlay"
android:layout_centerHorizontal="true"
android:background="#03f94e" />
** to robi z widokiem **
Wypróbuj następujący sposób, gdy zostanie użyty jako właściwość tła, przekonwertuje kolor dolnej linii EditText.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="@dimen/spacing_neg"
android:right="@dimen/spacing_neg"
android:top="@dimen/spacing_neg">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="@dimen/spacing_1"
android:color="@android:color/black" />
</shape>
</item>
</layer-list>