खोने के लिए बाहरी संपादन को टैप करें, मैं केवल "edittext" के बाहर क्लिक करना चाहता हूं ताकि स्वचालित रूप से फोकस खो जाए और कीबोर्ड छुपा सकें। फिलहाल, यदि मैं "edittext" पर क्लिक करता हूं तो यह फ़ोकस करता है लेकिन मुझे बैक बटन को फ़ोकस करने की आवश्यकता होती है।फोकस
फोकस
उत्तर
मान लीजिए कि आपका संपादन टेक्स्ट रैखिक लेआउट या अन्य व्यू ग्रुप पर रखा गया है। फिर आपको इस कंटेनर को क्लिक करने योग्य, फोकस करने योग्य और फोकस करने योग्य इंटचोडोड बनाना चाहिए। onClick अवहेलना विधि में कोड निम्नलिखित के साथ है कि सेट onClickListener इस कंटेनर में करने के बाद:
@Override
public void onClick(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
मेरे मामले में, मैं टेक्स्ट फ़ील्ड के फ़ोकस पर एक संख्यात्मक कीबोर्ड दिखा रहा हूं। मैंने आपके समाधान का उपयोग करने की कोशिश की। जब मैं पृष्ठभूमि दृश्य पर क्लिक करता हूं, तो संख्यात्मक कीबोर्ड अल्फा न्यूमेरिक कीबोर्ड में परिवर्तित होता है, फिर जब मैं दोबारा क्लिक करता हूं, तो यह गायब हो जाता है। –
@woodshy कुंजीपटल छुपा, लेकिन शायद onClick
में कोड डालने के लिए इस सवाल का जवाब है onFocusChanged
में डालने के रूप में के रूप में अच्छा नहीं है। मजबूर फोकस कम करने के लिए के रूप में, आप वस्तु निर्धारित करने की आवश्यकता आप को फोकस हस्तांतरण करने के लिए अपने एक्सएमएल फ़ाइल में हैं:
android:focusable="true"
android:focusableInTouchMode ="true"
क्या मेरे पास इस से संबंधित कोई प्रश्न हो सकता है: आपका मतलब है कि इन कोडों को LinearLayout, या EditText में रखा जाना चाहिए जिसे मैं निरस्त करना चाहता हूं? धन्यवाद। – detno29
आपको इसे मूल दृश्य (आपकी गतिविधि के सामग्री दृश्य) के गुण के रूप में रखना चाहिए। आप इसे देखना चाह सकते हैं: http://stackoverflow.com/a/19828165/782870 – vida
मैं एक ही आवश्यकता नहीं था क्योंकि मैं एक बार मैं कहीं भी स्पर्श कीबोर्ड छिपाने के लिए किया था मेरे संपादन टेक्स्ट बॉक्स के बाहर। setOnFocusChangeListener नौकरी नहीं करता है भले ही आप संपादन टेक्स्ट बॉक्स के बाहर स्पर्श करते हैं, फिर भी चुना गया है।
इसके लिए मैंने समाधान edc598 here का उपयोग किया।
- मुझे पहले मुख्य दृश्य युक्त मेनलायआउट मिला और इसमें स्पर्श श्रोता जोड़ें।
- जब टच इवेंट ट्रिगर किया गया था तो मैं जांचता हूं कि संपादन टेक्स्ट बॉक्स पर ध्यान केंद्रित किया गया है या नहीं।
- यदि संपादन टेक्स्ट बॉक्स पर ध्यान केंद्रित किया गया है तो मैं ईवेंट के एक्स-वाई समन्वय की जांच करता हूं।
- मेरी EditText बॉक्स के स्थान के आधार पर मैं कुंजी बोर्ड को छिपाने अगर बॉक्स
कोड का नमूना here से संशोधित बाहर कहीं भी छुआ:
LinearLayout MainLayout = (LinearLayout) findViewById(R.id.MainLayout);
EditText textBox = (EditText) findViewById(R.id.textBox);
int X_TOP_LEFT = 157;
int Y_TOP_LEFT = 388;
int X_BOTTOM_RIGHT = 473;
int Y_BOTTOM_RIGHT = 570;
MainLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(textBox.isFocused()){
Log.i("Focussed", "--" + event.getX() + " : " + event.getY() + "--");
if(event.getX() <= 157 || event.getY() <= 388 || event.getX() >= 473 || event.getY() >= 569){
//Will only enter this if the EditText already has focus
//And if a touch event happens outside of the EditText
textBox.clearFocus();
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
//Do something else
}
}
Log.i("X-Y coordinate", "--" + event.getX() + " : " + event.getY() + "--");
//Toast.makeText(getBaseContext(), "Clicked", Toast.LENGTH_SHORT).show();
return false;
}
});
दोस्त, आपको हमें इस जादू संख्याओं के साथ मजाक करनी होगी ... –
निश्चित रूप से संपादन टेक्स्ट के बाद निश्चित रूप से सीमाओं की जांच की आवश्यकता नहीं है स्पर्श घटनाओं। – pstoppani
तो मैं एक छोटा सा के आसपास खोज की, और कोई अन्य समाधान बिल्कुल वैसा ही नहीं था जिसे मैं ढूंढ रहा था। मेरी राय में फोकस संपादन टेक्स्ट दृश्यों पर अजीब तरीके से व्यवहार करता है।
मैं था क्या किया ...
यकीन है कि रूट दृश्य एक RelativeLayout
एक उपरिशायी लेआउट क्षेत्र है कि कुंजीपटल गायब कर देगा खत्म हो गया है कि जोड़े है, लेकिन नहीं लिखाई में बदलाव। नीचे की तरह कुछ:
मेरे मामले में, EditText स्क्रीन के तल पर एक कंटेनर में था। तो यह सब कुछ और ढंका कवर किया।
- एक विधि है कि यह एक तरह एक सा लग रहा है:
private void hideKeyboard() { final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); keyboardOverlay.setVisibility(View.GONE); editText.clearFocus(); }
अब onClick पर इस विधि कॉल आपके द्वारा बनाए गए ओवरले का।
अब जब हम संपादन टेक्स्ट पर दबाते हैं तो ओवरले दृश्यमान बनाना है। आप ऑनफोकस ईवेंट का उपयोग नहीं कर सकते (कम से कम मुझे इसे काम करने के लिए नहीं मिला ...) तो मैंने जो किया वह मैंने टच इवेंट को प्रबंधित किया।
editText.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(final View v, final MotionEvent event) { keyboardOverlay.setVisibility(View.VISIBLE); editText.requestFocus(); return false; } });
requestFocus() यहाँ onTouch साथ फोकस घटना पर हावी नहीं है।
त्वरित सलाह, जब आप इसे आज़माते हैं, तो आप यह देखने के लिए ओवरले में पृष्ठभूमि रंग जोड़ सकते हैं कि वास्तव में क्या हो रहा है।
आशा है कि यह आपके लिए काम करता है!
ऐसा करने का कोई बेहतर तरीका है? – Gohan
इस समस्या को आप क्या करना है हल करने के लिए है कि Edittext का इस्तेमाल पहली बार setOnFocusChangeListener है
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
Log.d("focus", "focus loosed");
// Do whatever you want here
} else {
Log.d("focus", "focused");
}
}
});
और फिर आप गतिविधि है जो होता है, जो Edittext कोड नीचे देखें में dispatchTouchEvent ओवरराइड है क्या करने की जरूरत
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (v instanceof EditText) {
Rect outRect = new Rect();
v.getGlobalVisibleRect(outRect);
if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
Log.d("focus", "touchevent");
v.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
return super.dispatchTouchEvent(event);
}
अब क्या होगा जब कोई उपयोगकर्ता बाहर क्लिक करता है तो सबसे पहले यह प्रेषण टचएवेंट को बुलाया जाएगा जो तब संपादन से फोकस करेगा, अब आपके ऑनफोकस चेंजलिस्ट को यह कहा जाएगा कि फोकस बदल दिया गया है, अब वह फिर आप कुछ भी जो आप करना चाहते थे क्या कर सकते हैं, आशा है कि यह काम करता है :)
मुझे यह विधि पसंद है। इसके अतिरिक्त, 'एंड्रॉइड जोड़ें: फोकस करने योग्य =" सत्य "' और 'एंड्रॉइड: 'संपादन टेक्स्ट' के प्रत्यक्ष माता-पिता के लेआउट में फोकस करने योग्य इंटचोडोड =" सत्य "। –
'फोकस लूका' होना चाहिए 'ध्यान केंद्रित' होना चाहिए :)) – Stack
निम्नलिखित कोड मेरे लिए पूरी तरह से काम करता है, और मैं नियमित रूप से EditText के बाहर कहीं भी SoftKeyboard onTouch बंद करने के लिए इस का उपयोग करें।
public void hideSoftKeyboard()
{
//Hides the SoftKeyboard
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
}
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);
}
}
}
तो तुम सिर्फ अपने onCreate()
विधि और voilla में एक बार setupUI()
समारोह कॉल करने के लिए की जरूरत है, अपने hidingSoftKeyboard सेटअप है!
संपादन टेक्स्ट के पूर्ण ध्यान खोने के लिए, बस अपने hideSoftKeyboard() फ़ंक्शन में editText.clearFocus()
करें।
आप निम्न चरणों करके इस लक्ष्य को हासिल कर सकते हैं:
जनक दृश्य 1.Make (अपनी गतिविधि की सामग्री देखें) क्लिक करने योग्य और निम्न को जोड़कर फ़ोकस करने योग्य गुण
android:clickable="true"
android:focusableInTouchMode="true"
2.Implement एक hideKeyboard() विधि
public void hideKeyboard(View view) {
InputMethodManager inputMethodManager =(InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
3. आखिरकार, अपने संपादन के फ़ोकस चेंजलिस्ट को सेट करें।
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
hideKeyboard(v);
}
}
});
- 1. फोकस
- 2. फोकस
- 3. फोकस
- 4. फोकस
- 5. फोकस
- 6. JQuery फोकस
- 7. स्क्रॉलव्यूयर फोकस
- 8. अंतिम फोकस
- 9. QLineEdit फोकस
- 10. UITextField फोकस
- 11. जावास्क्रिप्ट फोकस()
- 12. कुंजीपटल फोकस दिए बिना तार्किक फोकस कैसे सेट करें?
- 13. execCommand के बाद संतुष्ट करने के लिए फोकस फोकस?
- 14. फोकस कर कर्सर को फोकस कर रहे पाठ इनपुट
- 15. wpf listview फोकस
- 16. सी # फोर्स फॉर्म फोकस
- 17. कीबोर्ड। फोकस WPF
- 18. jQuery फोकस/बाहर
- 19. एडिटेक्स्ट एंड्रॉइड स्वचालित फोकस
- 20. टैबिन्डेक्स फोकस स्टाइल
- 21. WPF विंडो सेट फोकस
- 22. विंडो फोकस बदलें
- 23. पीईक्यूटी विंडो फोकस
- 24. jQuery फोकस इवेंट
- 25. टेक्स्टबॉक्स। फोकस() सी #
- 26. टैब कूद से फोकस
- 27. emacsclient विंडो फोकस
- 28. वीएसटीओ: आवेदन फोकस
- 29. UITextField खो गया फोकस
- 30. फोकस() रंगबॉक्स पॉप-अप
संबंधित प्रश्न: http://stackoverflow.com/q/4165414/782870। मुझे लगता है कि ज्यादातर उत्तरों का परीक्षण पहले से ही किया जा चुका है और काम करने के लिए पाया गया है। – vida
मुझे यह जवाब मिला: http://stackoverflow.com/a/28939113/2610855 सबसे अच्छा। – Loenix