ฉันกำลังสร้าง EditText ในไฟล์ xml เลย์เอาต์ของฉัน
แต่ฉันต้องการเปลี่ยนเส้นสีใน EditText จาก Holo เป็น (เช่น) สีแดง สามารถทำได้อย่างไร?
ฉันกำลังสร้าง EditText ในไฟล์ xml เลย์เอาต์ของฉัน
แต่ฉันต้องการเปลี่ยนเส้นสีใน EditText จาก Holo เป็น (เช่น) สีแดง สามารถทำได้อย่างไร?
คำตอบ:
นี่เป็นเครื่องมือที่ดีที่สุดที่คุณสามารถใช้ได้กับทุกมุมมองและขอขอบคุณ @ Jérôme Van Der Lindenอย่างเต็มที่
Android Holo Colors Generator ช่วยให้คุณสร้างส่วนประกอบ Android เช่นEditText
หรือสปินเนอร์ด้วยสีของคุณเองสำหรับแอปพลิเคชัน Android ของคุณ มันจะสร้างสินทรัพย์แก้ไขที่จำเป็นทั้งหมดเก้ารายการพร้อมกับความสามารถในการดึง XML และสไตล์ที่คุณสามารถคัดลอกไปยังโครงการของคุณได้โดยตรง
อัพเดท 1
ดูเหมือนว่าโดเมนนี้จะหมดอายุ แต่โครงการเป็นโอเพนซอร์สที่คุณสามารถหาได้ที่นี่
ลองมัน
ภาพนี้ใส่ในพื้นหลังของ EditText
android:background="@drawable/textfield_activated"
อัพเดท 2
สำหรับ API 21 หรือสูงกว่าคุณสามารถใช้ 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" />
อัปเดต 3
ตอนนี้เรามีการสนับสนุนด้านหลังAppCompatEditText
หมายเหตุ:เราต้องใช้แอพ: backgroundTintแทนandroid: 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" />
ฉันไม่ชอบคำตอบก่อนหน้า ทางออกที่ดีที่สุดคือการใช้:
<android.support.v7.widget.AppCompatEditText
app:backgroundTint="@color/blue_gray_light" />
android:backgroundTint
สำหรับEditText
ใช้กับAPI21 +เท่านั้น AppCompatEditText
เพราะมันเราจะต้องใช้ห้องสมุดสนับสนุนและ
หมายเหตุ: เราต้องใช้app:backgroundTint
แทนandroid:backgroundTint
รุ่น AndroidX
<androidx.appcompat.widget.AppCompatEditText
app:backgroundTint="@color/blue_gray_light" />
คุณสามารถเปลี่ยนสีขีดเส้นใต้ของ EditText ได้อย่างรวดเร็วโดยการย้อมสีพื้นหลังของ EditText ดังนี้:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Something or Other"
android:backgroundTint="@android:color/holo_green_light" />
สำหรับAPI ที่ต่ำกว่า 21 คุณสามารถใช้แอตทริบิวต์ attribute ในการEditText
ใส่โค้ดด้านล่างลงในไฟล์สไตล์
<style name="MyEditTextTheme">
<item name="colorControlNormal">#FFFFFF</item>
<item name="colorControlActivated">#FFFFFF</item>
<item name="colorControlHighlight">#FFFFFF</item>
</style>
ใช้สไตล์นี้ในEditText
ฐานะ
<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" />
โดยทางโปรแกรมคุณสามารถลอง:
editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_red_light), PorterDuff.Mode.SRC_ATOP);
ฉันคิดว่าวิธีที่ดีที่สุดคือตามธีม:
<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"/>
ในการเปลี่ยนสีขีดเส้นใต้ของ Edittext:
หากคุณต้องการให้ทั้งแอปแชร์สไตล์นี้คุณสามารถทำตามวิธีดังต่อไปนี้
(1) ไปที่ไฟล์ styles.xml AppTheme ของคุณที่สืบทอดพาเรนต์ของ Theme.AppCompat.Light.DarkActionBar (ในกรณีของฉัน) จะเป็นพาเรนต์หลักของไฟล์สไตล์ทั้งหมดในแอปของคุณ เปลี่ยนชื่อเป็น“ AppBaseTheme ' สร้างสไตล์อื่นภายใต้ชื่อ AppTheme และสืบทอดจาก AppBaseTheme ที่คุณเพิ่งแก้ไข มันจะมีลักษณะดังนี้:
<!-- 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>
จากนั้นเปลี่ยน "colorAccent" เป็นสีใดก็ได้ที่คุณต้องการให้สีเส้น EditText ของคุณเป็น
(2) ถ้าคุณมีโฟลเดอร์ค่าอื่น ๆ ที่มี style.xml ขั้นตอนนี้สำคัญมาก เพราะไฟล์นั้นจะสืบทอดมาจากไฟล์ xml พาเรนต์ก่อนหน้าของคุณ ตัวอย่างเช่นฉันมี values-19 / styles.xml นี่คือเฉพาะสำหรับ Kitkat ขึ้นไป เปลี่ยนพาเรนต์เป็น AppBaseTheme และตรวจสอบให้แน่ใจว่าได้กำจัด“ colorAccent” เพื่อไม่ให้ลบล้างสีของผู้ปกครอง นอกจากนี้คุณต้องเก็บไอเท็มเฉพาะสำหรับเวอร์ชัน 19 จากนั้นจะมีลักษณะเช่นนี้
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:windowTranslucentStatus">true</item>
</style>
</resources>
มันค่อนข้างง่าย (จำเป็น: API ขั้นต่ำ 21) ...
เข้ารหัสต่อไป ........ :)
สีของเส้นถูกกำหนดโดยEditText
คุณสมบัติพื้นหลังของ หากต้องการเปลี่ยนคุณควรเปลี่ยนไฟล์android:background
ในโครงร่าง
ฉันควรทราบว่าสไตล์นี้ทำได้โดยใช้โปรแกรม 9-patchable หากคุณดูใน SDK คุณจะเห็นว่าพื้นหลังของEditText
ภาพนี้คือ:
หากต้องการเปลี่ยนคุณสามารถเปิดได้ในโปรแกรมการจัดการภาพและสีในสีที่ต้องการ บันทึกเป็นbg_edit_text.9.png
แล้วใส่ไว้ในโฟลเดอร์ที่คุณวาดได้ ตอนนี้คุณสามารถใช้เป็นพื้นหลังสำหรับสิ่งที่คุณEditText
ชอบได้:
android:background="@drawable/bg_edit_text"
คุณสามารถเปลี่ยนสีของ EditText โดยทางโปรแกรมโดยใช้โค้ดบรรทัดนี้:edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));
พื้นหลังของเครื่องมือที่มีระดับ API ขึ้น
ทางเลือก 1
คุณสามารถให้ภาพที่กำหนดเองกับEditText
พื้นหลังของคุณโดย
android:background="@drawable/custom_editText"
ภาพของคุณควรมีลักษณะเช่นนี้ มันจะให้ผลที่ต้องการ
ทางเลือก 2
ตั้ง xml นี้เป็นEditText
คุณสมบัติพื้นหลังของคุณ
<?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>
สิ่งนี้จะมีรูปลักษณ์และความรู้สึกเดียวกันกับคุณEditText
ในทุก ๆ API
คุณสามารถเปลี่ยนสีด้วยการย้อมสีพื้นหลัง
<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>
ตั้งค่าเป็น EditText
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_edittext"/>
ใช้วิธีนี้ .. และแก้ไขตามชื่อมุมมองของคุณ รหัสนี้ใช้งานได้ดี
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());
}
หากคุณต้องการเส้นแบนคุณสามารถทำได้อย่างง่ายดายด้วย xml นี่คือตัวอย่าง 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>
แทนที่รูปร่างด้วยตัวเลือกหากคุณต้องการระบุความกว้างและสีที่แตกต่างกันเพื่อเน้น edittext
วิธีที่ดีที่สุดคือใช้AppCompatEditText
กับbackgroundTint
แอตทริบิวต์ของapp
เนมสเปซ กล่าวคือ
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
app:backgroundTint="YOUR COLOR"
android:layout_height="wrap_content" />
เมื่อเราใช้android:backgroundTint
มันจะทำงานได้ใน API21 หรือมากกว่าเท่านั้น แต่app:backgroundTint
ใช้ได้กับทุกระดับ API ที่แอปของคุณใช้
ใช้ android: คุณสมบัติพื้นหลังสำหรับ edittext นั้น ส่งผ่านอิมเมจของโฟลเดอร์ drawable ตัวอย่างเช่น,
android:background="@drawable/abc.png"
<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" />
** มันเป็นหนึ่งในการทำกับมุมมอง **
ลองวิธีต่อไปนี้มันจะแปลงสีบรรทัดด้านล่างของ 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>
สิ่งนี้สามารถทำได้โดยการรวมสิ่งนี้android:theme="@style/AppTheme.AppBarOverlay
เป็นคุณลักษณะในสำหรับ editText ของคุณและเพิ่ม<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
ให้กับสไตล์ของคุณ