I got a relative simple question. I have an activity with a lot of EditText's in them. When I open the activity it automatically focusses to the first EditText and displays the virtual keyboard.
আমি কীভাবে এটি প্রতিরোধ করতে পারি?
I got a relative simple question. I have an activity with a lot of EditText's in them. When I open the activity it automatically focusses to the first EditText and displays the virtual keyboard.
আমি কীভাবে এটি প্রতিরোধ করতে পারি?
উত্তর:
Use this attributes in your layout tag in XML file:
android:focusable="true"
android:focusableInTouchMode="true"
মতামত হিসাবে অন্যান্য সদস্যদের দ্বারা রিপোর্ট হিসাবে এটি কাজ করে না ScrollView
তাই আপনার প্রধান বৈশিষ্ট্য এই বৈশিষ্ট্য যুক্ত করা প্রয়োজন ScrollView
।
আপনি এটি আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট কার্যকলাপে যুক্ত করতে পারেন:
android:windowSoftInputMode="stateHidden|adjustResize"
android:windowSoftInputMode="stateHidden|adjustPan"
আমি এখানে বর্ণিত বেশ কয়েকটি বাস্তবায়ন করেছি, তবে এখন আমি AndroidManifest.xml
আমার Activity
সম্পত্তিটির জন্য যুক্ত করেছি :
android:windowSoftInputMode="stateAlwaysHidden"
fragments
।" stateAlwaysHided " ক্রিয়াকলাপের মূল উইন্ডোতে ইনপুট ফোকাস থাকলে নরম কীবোর্ড সর্বদা লুকিয়ে থাকে।
https://stackoverflow.com/a/11627976/5217837 এটি প্রায় সঠিক:
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
তবে এটি SOFT_INPUT_STATE_ALWAYS_VISIBLE এর চেয়ে SOFT_INPUT_STATE_HIDDEN হওয়া উচিত
আপনার ক্রিয়াকলাপের কোডগুলিতে এটি ব্যবহার করুন:
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
ট্যাবগুলিতে স্যুইচ করার সময়ও কীবোর্ডটি স্বয়ংক্রিয়ভাবে পপ আপ হয়ে গেছে এবং ট্যাবলেটে অ্যান্ড্রয়েড 3..২.১ রেখেছিল, এমন সময়ও আমার একটি সমস্যা ছিল। নিম্নলিখিত পদ্ধতিটি ব্যবহার করুন:
public void setEditTextFocus(EditText searchEditText, boolean isFocused)
{
searchEditText.setCursorVisible(isFocused);
searchEditText.setFocusable(isFocused);
searchEditText.setFocusableInTouchMode(isFocused);
if (isFocused) {
searchEditText.requestFocus();
} else {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
}
}
প্রতিটি সম্পাদনা পাঠের ক্রিয়াকলাপের অনক্রিট () এবং অনপজ () এ:
setEditTextFocus (myEditText, মিথ্যা);
প্রতিটি সম্পাদনা পাঠানোর জন্য একটি অন-টাচলিস্টনার:
myEditText.setOnTouchListener(new EditText.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
setEditTextFocus(myEditText, true);
return false;
}
});
প্রত্যেকের EditText
জন্য OnEditorActionListener
:
myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
.......
setEditTextFocus(myEditText, false);
return false;
}
});
আর প্রত্যেকের জন্য EditText
এ layout xml
:
android:imeOptions="actionDone"
android:inputType="numberDecimal|numberSigned" // Or something else
সম্ভবত আরও কোড অনুকূলিতকরণ সম্ভব possible
((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);
আমি এই সহজ সমাধানটি পেয়েছি যা আমার পক্ষে কাজ করেছে your আপনার প্যারেন্ট লেআউটে এই বৈশিষ্ট্যগুলি সেট করুন:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
এবং এখন, যখন ক্রিয়াকলাপ শুরু হবে তখন এই মূল বিন্যাসটি ডিফল্টরূপে ফোকাস পাবে।
এছাড়াও, আমরা আবার মূল বিন্যাসে ফোকাসটি দিয়ে রানটাইমের সময় শিশুদের দৃষ্টিভঙ্গি থেকে ফোকাস সরিয়ে দিতে পারি:
findViewById(R.id.mainLayout).requestFocus();
আশা করি এটি আপনার পক্ষে কাজ করবে।
এই সমাধানটি আমি ব্যবহার করছি, এটি সেরা সমাধান নয় তবে এটি আমার পক্ষে ভালভাবে কাজ করছে
editComment.setFocusableInTouchMode(false);
editComment.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event)
{
// TODO Auto-generated method stub
editComment.setFocusableInTouchMode(true);
editComment.requestFocus() ;
return false;
}});
মজার বিষয় হচ্ছে এই ডকুমেন্টেশনটি https://developer.android.com/training/keyboard-input/visibility.html উল্লেখ করেছে যে যখন কোনও কার্যকলাপ শুরু হয় এবং একটি পাঠ্য ক্ষেত্রে মনোনিবেশ দেওয়া হয়, তখন নরম কীবোর্ডটি প্রদর্শিত হয় না (এবং তারপরে চলে যায় আপনি যদি কিছু কোড সহ চান তবে কী-বোর্ডটি কীভাবে প্রদর্শিত হবে তা আপনাকে দেখায়)।
আমার স্যামসং গ্যালাক্সি এস 5 এ, আমার অ্যাপটি (কোনও ম্যানিফেস্ট এন্ট্রি বা নির্দিষ্ট কোড সহ) এইভাবে কাজ করে - কোনও সফ্ট কীবোর্ড নেই। তবে ললিপপ এভিডিতে একটি নরম কীবোর্ড দেখানো হয়েছে - উপরে বর্ণিত ডকটির বিপরীতে।
কোনও এভিডি পরীক্ষার সময় আপনি যদি এই আচরণটি পান তবে কী ঘটবে তা দেখতে আপনি কোনও বাস্তব ডিভাইসে পরীক্ষা করতে চাইতে পারেন।
নিম্নলিখিত পোস্টে এটির বেশ কয়েকটি ভাল উত্তর রয়েছে: ক্রিয়াকলাপের সূচনাকালীন ফোকাস অর্জন থেকে সম্পাদনা পাঠানো বন্ধ করুন । আমি নিয়মিত যা ব্যবহার করি তা হল মরগানের নিম্নলিখিত কোডগুলি :
<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>
<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:nextFocusUp="@id/autotext"
android:nextFocusLeft="@id/autotext"/>
দ্রষ্টব্য: ডামি আইটেমটিকে ফোকাসযোগ্য উপাদানগুলির আগে সঠিকভাবে স্থান দেওয়া উচিত।
এবং আমি মনে করি এটি এমনকি স্ক্রোলভিউয়ের সাথে নিখুঁতভাবে কাজ করা উচিত এবং এর জন্য অ্যাক্সেসযোগ্যতায় কোনও সমস্যা হয়নি।
আপনার এডিটেক্সটটি স্বয়ংক্রিয়ভাবে ফোকাস হয়ে যায় যখন আপনার কার্যকলাপ শুরু হয় This এটিকে ঠিক করার একটি সহজ ও স্থিতিশীল উপায় হ'ল প্রাথমিক ফোকাসটিকে অন্য কোনও ভিউতে যেমন একটি বাটন ইত্যাদি হিসাবে সেট করা simply
আপনি আপনার লেআউট এক্সএমএলে এটি করতে পারেন, কোনও কোডের প্রয়োজন নেই ..
স্বীকৃত উত্তর আমার পক্ষে কাজ করছে না, সে কারণেই উত্তরটি কার্যকর সমাধান দিন, এটি সহায়ক হতে পারে!
EditText edt = (EditText) findViewById(R.id.edt);
edt.requestFocus();
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
এখন কীবোর্ড খোলা আছে আনন্দ :)
অ্যান্ড্রয়েড: উইন্ডোসফটআইনপুটমোড = "স্টেটহিডেড | অ্যাডজাস্ট্রেসাইজ"
ভাল কাজ করছে
android:focusableInTouchMode="true"
এর উপরের লাইনটির এক্সএমএলে যোগ করুন EditText
বা TextInputLayout
যার ফোকাস রয়েছে এবং এর কারণ ঘটছেsoftInputKeyboard
।
এটি আমাদের জন্য সমস্যার সমাধান করে এবং এখন কীবোর্ড পপআপ করে না
অনুসন্ধান_পরিচালিত_পাঠ্য = (সম্পাদনা পাঠ্য) FindViewById (R.id.search_edit_text);
search_edit_text.requestFocus();
search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
এটি আমার জন্য কাজ করে ছেলেরা খণ্ডে কিছু আলাদা সিনট্যাক্স থাকতে পারে। কার্যকলাপের জন্য এই কাজ করে
যদি আপনার ভিউতে এডিটেক্সট এবং তালিকাভিউ থাকে তবে কীবোর্ডটি ডিফল্টরূপে খোলে। ডিফল্ট পপ আপ থেকে কীবোর্ড আড়াল করতে নিম্নলিখিতটি করুন
this.listView.requestFocus();
নিশ্চিত হয়ে নিন যে আপনি সম্পাদনা পাঠের জন্য ভিউ পাওয়ার পরে তালিকাগুলিতে ফোকাসের অনুরোধ করছেন।
যেমন যেমন
this.listView = (ListView) this.findViewById(R.id.list);
this.editTextSearch = (EditText) this.findViewById(R.id.editTextSearch);
this.listView.requestFocus();
আপনি যদি এটি করেন, তবে সম্পাদনা পাঠ্য ফোকাস পাবেন এবং কীবোর্ড পপ আপ হবে।