যখন কোনও বিন্যাস তৈরি এবং প্রদর্শিত হবে তখন কীভাবে কোনও দৃশ্যের উপর ফোকাস সেট করবেন?


90

বর্তমানে, আমার একটি লেআউট রয়েছে যার মধ্যে a Button, a TextViewএবং an রয়েছে EditText। যখন বিন্যাসটি প্রদর্শিত হবে, তখন ফোকাসটি স্বয়ংক্রিয়ভাবে এর উপর দেওয়া EditTextহবে যা অ্যান্ড্রয়েড ফোনে প্রদর্শিত কীবোর্ডটিকে ট্রিগার করবে। আমি যা চাই তা নয়। TextViewযখন কোনও বিন্যাস প্রদর্শিত হবে তখন কি আমি এমন কোনও উপায়ে ফোকাস সেট করতে পারি বা কিছুইতে সেট করতে পারি না ?

উত্তর:


109

ফোকাস সেট করুন: ফ্রেমওয়ার্কটি ব্যবহারকারী ইনপুটটির প্রতিক্রিয়া হিসাবে চলন্ত ফোকাস পরিচালনা করবে। একটি নির্দিষ্ট দৃশ্যে ফোকাস জোর করতে, অনুরোধ কল করুন ফোকাস ()


17

এইটা কাজ করে:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

এটার কাজ কি? দেখে মনে হচ্ছে এটি পুরো ক্রিয়াকলাপের জন্য কিছুটা স্থিতিশীল করছে, এবং কেবল একটি দৃশ্য বা খণ্ড নয়, তাই আমি এই বিষয়ে সতর্ক থাকব এবং আমি এর সমস্ত প্রভাবগুলি না বুঝলে এটি ব্যবহার করব না।
কার্টিক ভাদ্দাদি

প্রকৃতপক্ষে আমি মূল পোস্টারের অনুরোধের ভিত্তিতে এটি করব না। এটি বর্তমান সমস্যার সমাধান করতে পারে, তবে এটি ব্যবহারের পার্শ্ব-প্রতিক্রিয়া রয়েছে যা পরে সমস্যা হতে পারে। এটি হ্যাকগুলি এই জাতীয় কোডগুলিতে প্রবেশের জন্য তৈরি করে যা অন্যান্য হ্যাকগুলিকে পরে মূল হ্যাকটিকে অস্বীকার করার জন্য যুক্ত করা হয়..এই দুষ্টচক্রটি চালিয়ে যায় .... এবং লোকেরা আশ্চর্য হয় কেন কোডটি অনিবার্য নয়। হ্যাঁ, আপনি অনুমান করেছেন .... আমি অন্যদের সাথে কাজ করি যারা এই জাতীয় জিনিসগুলি করে এবং এটি আমার জীবনকে খুব কঠিন করে তোলে।
dell116



6

ফোকাস সেট করতে, হ্যান্ডলার ব্যবহার করে অনুরোধফোকাস () বিলম্ব করুন।

private Handler mHandler= new Handler();

public class HelloAndroid extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     LinearLayout mainVw = (LinearLayout) findViewById(R.id.main_layout);

     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( 
           LinearLayout.LayoutParams.FILL_PARENT,
           LinearLayout.LayoutParams.WRAP_CONTENT);

     EditText edit = new EditText(this);
     edit.setLayoutParams(params);
     mainVw.addView(edit);

     TextView titleTv = new TextView(this);
     titleTv.setText("test");
     titleTv.setLayoutParams(params);
     mainVw.addView(titleTv);

     mHandler.post(
       new Runnable() 
       {
          public void run() 
          {
            titleTv.requestFocus();
          } 
       }
     );
   }
}

5

আপনি কেবল কীবোর্ডটি লুকিয়ে রেখে চেষ্টা করতে পারেন। এটার মতো কিছু:

InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);


3

এই রেখাগুলিগুলিকেও সেট করুন OnResumeএবং নিশ্চিত করুন যে focusableInTouchআপনি নিজের নিয়ন্ত্রণ শুরু করার সময় সত্যতে সেট করা আছে কিনা

<controlName>.requestFocus();

<controlName>.requestFocusFromTouch();

3

ফোকাস পরিবর্তন করতে টেক্সটভিউকে এক্সএমএলে ফোকাসযোগ্য করে তুলুন

<TextView
            **android:focusable="true"**
            android:id="@+id/tv_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

এবং জাভা মধ্যে তৈরি

textView.requestFocus();

অথবা কেবল কীবোর্ডটি লুকান

public void hideKeyBoard(Activity act) {
    act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
    InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE);
}

অ্যান্ড্রয়েড: ফোকাসযোগ্য = "সত্য" এবং পাঠ্য ভিউ.প্রিয়ফোকাস (); আমার জন্য কাজ। ধন্যবাদ!
ওয়ার্নার

2

উপরের উত্তরগুলির কোনওটিই আমার পক্ষে কাজ করে না। একমাত্র (বলা যাক) সমাধানটি হ'ল এক অক্ষম সম্পাদনা পাঠের প্রথম পাঠ্য ভিউ পরিবর্তন করা যা ফোকাস গ্রহণ করে এবং তারপরে যুক্ত করা

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

মধ্যে onCreate কীবোর্ড প্রতিরোধ কলব্যাক দেখানো হয়। এখন আমার প্রথম এডিটেক্সটটি টেক্সটভিউয়ের মতো দেখাচ্ছে তবে প্রাথমিকভাবে ফোকাসটি পেতে পারে finally


2

শেষ পরামর্শটি সঠিক সমাধান। কেবল পুনরাবৃত্তি করতে প্রথমে android:focusable="true"বিন্যাস xmlফাইলে সেট করুন, তারপরে requestFocus()আপনার কোডের ভিউতে।


1

আমি মনে করি একটি পাঠ্য ভিউ মনোনিবেশযোগ্য নয়। উদাহরণস্বরূপ একটি বোতামে ফোকাস সেট করার চেষ্টা করুন, বা সম্পত্তিটিকে সত্য হিসাবে সেট করার জন্য।


1

ইউআর এক্সএমএলে প্রথম নিয়ন্ত্রণ হিসাবে আপনি "0 ডিপ" আকারের একটি সম্পাদনা পাঠ্য যুক্ত করতে পারেন, সুতরাং, এটি রেন্ডারে ফোকাসটি পাবে ((নিশ্চিত করুন এটির ফোকাসযোগ্য এবং সমস্ত ...)


1

আপনি ফাইলটিতে android:windowSoftInputModeআপনার ক্রিয়াকলাপ যোগ করে শুরু করতে পারেন AndroidManifest.xml

<activity android:name="YourActivity"
          android:windowSoftInputMode="stateHidden" />

এটি কীবোর্ডটি প্রদর্শন না করার জন্য তৈরি করবে তবে EditTextএটি এখনও ফোকাস পেয়েছে। যে সমাধানের জন্য, আপনি সেট করতে পারেন android:focusableInTouchmodeএবং android:focusableকরতে trueআপনার রুট দৃশ্য উপর।

<LinearLayout android:orientation="vertical"
              android:focusable="true"
              android:focusableInTouchMode="true"
              ...
              >
    <EditText
         ...
       />
    <TextView
         ...
       />
    <Button
         ...
       />
</LinearLayout>

উপরের কোডটি RelativeLayoutএটির পরিবর্তে ফোকাস পাচ্ছে কিনা তা নিশ্চিত করবেEditText


0

আপনি যখন স্পর্শের পাশাপাশি কিছু ব্যবহার করছেন (যেমন, একটি ডি-প্যাড, একটি কীবোর্ড ইত্যাদি) তখন ইউআই উপাদান নির্বাচন করার জন্য ফোকাস। কোনও ভিউ ফোকাস গ্রহণ করতে পারে, যদিও কিছু ডিফল্টরূপে ফোকাসযোগ্য হয় না। (আপনি একটি দৃশ্যের সাথে মনোনিবেশযোগ্য করে তুলতে setFocusable(true)এবং এটির সাথে মনোনিবেশ করতে বাধ্য করতে পারেন requestFocus()))

যাইহোক, এটি লক্ষ্য করা গুরুত্বপূর্ণ যে আপনি যখন টাচ মোডে থাকবেন তখন ফোকাসটি অক্ষম করা হবে । সুতরাং আপনি যদি নিজের আঙ্গুলগুলি ব্যবহার করেন তবে প্রোগ্রামক্রমে ফোকাস পরিবর্তন করা কোনও কাজ করে না। এর ব্যতিক্রমটি এমন দৃশ্যগুলির জন্য যা কোনও ইনপুট সম্পাদক থেকে ইনপুট গ্রহণ করে। একটি EditTextযেমন একটি উদাহরণ। এই বিশেষ পরিস্থিতির setFocusableInTouchMode(true)জন্য নরম কীবোর্ডটি কোথায় ইনপুট প্রেরণ করা যায় তা জানাতে ব্যবহৃত হয়। একটি EditTextডিফল্টভাবে এই সেটিং আছে। নরম কীবোর্ড স্বয়ংক্রিয়ভাবে পপ আপ হবে।

আপনি যদি চান না যে নরম কীবোর্ড স্বয়ংক্রিয়ভাবে পপ আপ হয়ে যায় তবে আপনি @ অবেলজাসের উল্লিখিত হিসাবে আপনি সাময়িকভাবে এটিকে দমন করতে পারেন:

InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

কোনও ব্যবহারকারী যখন ক্লিক করে EditText, তবুও এটি কীবোর্ডটি প্রদর্শন করা উচিত।

আরও পড়া:


এই উত্তরটি কি ভুল? ডাউনটোটের সাথে কোনও মন্তব্য করা হয়নি।
সুরগাচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.