मुझे पता है कि बेहतर उत्तर के लिए बहुत देर हो सकती है लेकिन एक वांछित सही समाधान पोजिशनर की तरह एक सिस्टम होना चाहिए। मेरा मतलब है, जब सिस्टम एक एडिटर फील्ड के लिए पोजिशनिंग बनाता है, तो वह फील्ड को कीबोर्ड की तरफ रखता है, इसलिए UI / UX रूल्स के अनुसार यह परफेक्ट है।
क्या नीचे कोड बनाता है Android तरीका आसानी से स्थिति है। सबसे पहले हम वर्तमान स्क्रॉल बिंदु को संदर्भ बिंदु के रूप में रखते हैं। दूसरी बात यह है कि किसी संपादक के लिए सबसे अच्छी पोजिशनिंग स्क्रॉल प्वाइंट को ढूंढना है। ऐसा करने के लिए हम टॉप पर स्क्रॉल करते हैं, और फिर एडिटर्स फील्ड्स से अनुरोध करते हैं कि स्क्रॉलिंग कंपोनेंट को बेस्ट पोजिशनिंग करें। Gatcha! हमने सबसे अच्छी स्थिति सीखी है। अब, हम जो करेंगे वह पिछले बिंदु से उस बिंदु तक आसानी से स्क्रॉल करेंगे, जो हमने नया पाया है। क्या आप का उपयोग करके स्क्रॉल चिकनी छोड़ सकते हैं चाहते हैं scrollTo बजाय smoothScrollTo केवल।
नोट: मुख्य कंटेनर स्क्रॉलव्यू एक सदस्य क्षेत्र है जिसका नाम स्क्रॉलव्यूसिग्नअप है, क्योंकि मेरा उदाहरण एक साइनअप स्क्रीन था, क्योंकि आप बहुत कुछ समझ सकते हैं।
view.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(final View view, boolean b) {
if (b) {
scrollViewSignup.post(new Runnable() {
@Override
public void run() {
int scrollY = scrollViewSignup.getScrollY();
scrollViewSignup.scrollTo(0, 0);
final Rect rect = new Rect(0, 0, view.getWidth(), view.getHeight());
view.requestRectangleOnScreen(rect, true);
int new_scrollY = scrollViewSignup.getScrollY();
scrollViewSignup.scrollTo(0, scrollY);
scrollViewSignup.smoothScrollTo(0, new_scrollY);
}
});
}
}
});
यदि आप सभी EditText इंस्टेंसेस के लिए इस ब्लॉक का उपयोग करना चाहते हैं , और इसे जल्दी से अपने स्क्रीन कोड के साथ एकीकृत करें। आप बस नीचे की तरह एक ट्रैवर्स बना सकते हैं। ऐसा करने के लिए, मैंने मुख्य OnFocusChangeListener को फ़ोकसचेंजListenerToScrollEditor नाम का एक सदस्य फ़ील्ड बनाया है , और नीचे दिए गए अनुसार इसे कॉल करें।
traverseEditTextChildren(scrollViewSignup, focusChangeListenerToScrollEditor);
और विधि कार्यान्वयन नीचे दिया गया है।
private void traverseEditTextChildren(ViewGroup viewGroup, View.OnFocusChangeListener focusChangeListenerToScrollEditor) {
int childCount = viewGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
View view = viewGroup.getChildAt(i);
if (view instanceof EditText)
{
((EditText) view).setOnFocusChangeListener(focusChangeListenerToScrollEditor);
}
else if (view instanceof ViewGroup)
{
traverseEditTextChildren((ViewGroup) view, focusChangeListenerToScrollEditor);
}
}
}
इसलिए, हमने यहां जो कुछ किया है वह सभी एडिटटेक्स्ट इंस्टेंस बच्चों को ध्यान केंद्रित करने के लिए बुला रहा है।
इस समाधान तक पहुंचने के लिए, मैंने इसे यहां सभी समाधानों की जांच की है, और बेहतर यूआई / यूएक्स परिणाम के लिए एक नया समाधान उत्पन्न किया है।
अन्य सभी जवाबों के लिए बहुत धन्यवाद मुझे बहुत प्रेरित कर रहा है।
the form may changed from user to user
लेकिन आप सिर्फ इस्तेमाल कर सकते हैंmEditView.getTop();