আমি জানি এটির উত্তরের জন্য খুব দেরি হতে পারে তবে একটি পছন্দসই নিখুঁত সমাধান অবশ্যই পজিশনারের মতো সিস্টেম হতে হবে। মানে, যখন সিস্টেম কোনও সম্পাদক ক্ষেত্রের জন্য একটি অবস্থান তৈরি করে তখন ক্ষেত্রটি ঠিক কীবোর্ড পর্যন্ত স্থাপন করে, যাতে ইউআই / ইউএক্স নিয়ম হিসাবে এটি নিখুঁত।
কোডের নীচে যা কিছু করা হয় তা হ'ল অ্যান্ড্রয়েডের উপায়টি সহজেই পজিশনিং করা। সবার আগে আমরা বর্তমান স্ক্রোল পয়েন্টটিকে রেফারেন্স পয়েন্ট হিসাবে রাখি। দ্বিতীয় বিষয়টি হ'ল কোনও সম্পাদকের জন্য সর্বোত্তম অবস্থানের স্ক্রোল পয়েন্টটি সন্ধান করা, এটি করার জন্য আমরা শীর্ষে স্ক্রোল করব এবং তারপরে সম্পাদকের ক্ষেত্রগুলিকে সর্বোত্তম পজিশনিং করতে স্ক্রোলভিউ উপাদান তৈরি করার জন্য অনুরোধ করব। 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);
}
});
}
}
});
আপনি যদি সমস্ত সম্পাদনা পাঠ্য দৃষ্টান্তের জন্য এই ব্লকটি ব্যবহার করতে চান এবং দ্রুত আপনার স্ক্রীন কোডের সাথে এটি একীভূত করতে চান। আপনি কেবল নীচের মত একটি ট্র্যাভার্সার তৈরি করতে পারেন। এটি করার জন্য, আমি মূল অনফোকাস চ্যাঞ্জলিস্টনারকে ফোকাস চ্যাঞ্জলিস্টনারটসস্ক্রোলএডিটর নামে একটি সদস্য ক্ষেত্র বানিয়েছি এবং নীচে হিসাবে এটি তৈরির সময় কল করেছি।
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();