मैं EditText's
कर्सर का रंग प्रोग्रामेटिक रूप से कैसे बदल सकता हूं?edittext कर्सर रंग बदलें
एंड्रॉइड 4.0 और ऊपर, कर्सर रंग सफेद है। और यदि EditText
की पृष्ठभूमि भी सफेद है, तो यह अदृश्य हो जाती है।
मैं EditText's
कर्सर का रंग प्रोग्रामेटिक रूप से कैसे बदल सकता हूं?edittext कर्सर रंग बदलें
एंड्रॉइड 4.0 और ऊपर, कर्सर रंग सफेद है। और यदि EditText
की पृष्ठभूमि भी सफेद है, तो यह अदृश्य हो जाती है।
अपने EditText गुण में, वहाँ एक विशेषता android:textCursorDrawable
अब यह @null की तरह करने के लिए सेट,
android:textCursorDrawable="@null"
तो अब अपने EditText कर्सर अपने EditText textcolor रूप में ही है।
संदर्भ मैं इसे ठीक करने के लिए एक रास्ता मिल गया। यह सबसे बड़ा समाधान नहीं है, लेकिन यह काम करता है।
दुर्भाग्यवश, मैं केवल कर्सर रंग के लिए स्थिर रंग का उपयोग कर सकता हूं।
पहले, मैं drawable
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#ff000000"/>
<size android:width="1dp"/>
</shape>
में एक काला कर्सर को परिभाषित अगला मैं लेआउट में एक नमूना EditText परिभाषित करते हैं।
AttributeSet editText30AttributeSet = null;
int res = getResources().getIdentifier("edit30", "layout", getPackageName());//edit30 is EditText layout
XmlPullParser parser = getResources().getXml(res);
int state=0;
do {
try {
state = parser.next();
} catch (Exception e1) {
e1.printStackTrace();
}
if (state == XmlPullParser.START_TAG) {
if (parser.getName().equals("EditText")) {
editText30AttributeSet = Xml.asAttributeSet(parser);
break;
}
}
} while(state != XmlPullParser.END_DOCUMENT);
EditText view = new EditText(getContext(),editText30AttributeSet);
अब आप एक EditText दृश्य एक काले रंग की कर्सर है कि है:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textCursorDrawable="@drawable/blackpipe"
>
</EditText>
जब मैं क्रम में एक EditText बनाना चाहते हैं, मैं इस का उपयोग करें। शायद कोई मेरे समाधान पर सुधार कर सकता है ताकि कर्सर रनटाइम पर बदला जा सके।
महान काम, धन्यवाद! कस्टम EditText घटक के लिए एक आकर्षण की तरह काम करता है। – Divers
यहां, जो मुझे लगता है, @Adem पोस्ट किए गए एक बेहतर समाधान से है।
जावा:
try {
// https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564
Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
f.setAccessible(true);
f.set(yourEditText, R.drawable.cursor);
} catch (Exception ignored) {
}
एक्सएमएल:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ff000000" />
<size android:width="1dp" />
</shape>
आप @null
करने के लिए android:textCursorDrawable
विशेषता है कि कर्सर रंग के रूप में android:textColor
के उपयोग में परिणाम होगा सेट कर सकते हैं।
गुण textCursorDrawable
एपीआई स्तर 12 और उच्च में उपलब्ध है ...
धन्यवाद ...
क्या styles.xml
का उपयोग कर AppCompat-v7 के बारे में?
<item name="colorControlNormal">@color/accentColor</item>
<item name="colorControlActivated">@color/accentColor</item>
<item name="colorControlHighlight">@color/accentColor</item>
मेरे लिए काम करता है (यह उदाहरण सरल है)।
क्या ये उच्चारण आपके लिए प्री-लॉलीपॉप डिवाइस पर एडिटटेक्स्ट कर्सर के लिए लागू होते हैं? –
नहीं, फिर यह डिफ़ॉल्ट सिस्टम का कर्सर (दुख की बात) लेता है। अच्छे जवाब पोस्ट किए गए हैं, जिस तरह से और अधिक पूरा हो गया है। – shkschneider
जारेड Rummler के जवाब में सुधार लाने
जावा:
try {
// https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564
Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
f.setAccessible(true);
f.set(yourEditText, R.drawable.cursor);
} catch (Exception ignored) {
}
रेस में custom_cursor.xml बनाने/drawable फ़ोल्डर:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ff000000" />
<size android:width="1dp" />
एक्सएमएल:
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textCursorDrawable="@drawable/custom_cursor"
>
</EditText>
तो, अंतिम शब्द यहाँ है सायन - एक्सएमएल की जरूरत है और काम करता है के रूप में @null लेकिन प्रोग्राम के रूप में नहीं करता है:
try {
Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
f.setAccessible(true);
f.set((TextView)yourEditText, 0);
} catch (Exception ignored) {
}
केवल समस्या यह है कि एंड्रॉयड के कुछ नए संस्करण के साथ एक दिन काम करना बंद कर सकता है।
पीएस मैंने इसे 4.1.2 से 5.1 पर परीक्षण किया।
मुझे प्रोग्राम की आवश्यकता है, एक्सएमएल आधारित – Adem
उपयोगी जानकारी के लिए धन्यवाद – raju
@Adem अगर आप इसे एक्सएमएल में सेट करते हैं तो आप पाठ रंग के रूप में प्रोग्रामिक रूप से किसी भी रंग को सेट कर सकते हैं। – user363349