অ্যান্ড্রয়েডের ক্রিয়াকলাপ সূচনায় ফোকাস অর্জন থেকে কীভাবে সম্পাদনা পাঠানো বন্ধ করবেন


2870

Activityঅ্যান্ড্রয়েডে আমার একটি দুটি উপাদান রয়েছে:

  1. EditText
  2. ListView

আমার Activityশুরু হয়ে গেলে , EditTextতাত্ক্ষণিকভাবে ইনপুট ফোকাস থাকবে (ফ্ল্যাশিং কার্সার)। প্রারম্ভকালে ইনপুট ফোকাস রাখতে কোনও নিয়ন্ত্রণ চাই না। আমি চেষ্টা করেছিলাম:

EditText.setSelected(false);
EditText.setFocusable(false);

ভাগ্য নেই. আমি কীভাবে বোঝাতে পারি যে শুরু EditTextহওয়ার পরে নিজেকে নির্বাচন না করা Activity?

উত্তর:


2591

লুক এবং মার্কের দুর্দান্ত উত্তরগুলি তবে একটি ভাল কোডের নমুনা অনুপস্থিত। নিম্নলিখিত উদাহরণের মতো ট্যাগ android:focusableInTouchMode="true"এবং android:focusable="true"প্যারেন্ট লেআউটে যুক্ত করুন (যেমন LinearLayoutবা ConstraintLayout) সমস্যার সমাধান করবে।

<!-- 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"/>

711
প্যারেন্ট লেআউট সেট করার কী android:focusableInTouchMode="true"!
মুহাম্মদ বাবর

28
পারফেক্ট! ধন্যবাদ ... একটি বিষয় লক্ষণীয় যে ডামি আইটেমটিকে ফোকাসযোগ্য উপাদানগুলির আগে সঠিকভাবে স্থান দেওয়া উচিত !!! আমার ডামি এবং সম্পাদনা পাঠের মধ্যে আমার কাছে একটি টেক্সটভিউ ছিল এবং পদ্ধতিটি কার্যকর হয়নি!
ম্যাডডব

25
অ্যান্ড্রয়েড সেটিং: ফোকাসেবলআইনটচমোড = "সত্য" পিতামাতার লেআউটে ভাল পন্থা ছিল ধন্যবাদ ধন্যবাদ @ মুহাম্মদ বাবর
সুজিথ

7
দুর্দান্ত কোড, আমাকে অনেক সাহায্য করেছে :) এটিকে উন্নত করার চেষ্টা করার জন্য, আরও কিছুকে android:focusableInTouchMode="true"কভার করে android:focusable="true", সুতরাং android:focusable="true"এক্ষেত্রে অপ্রয়োজনীয়, এবং মুছে ফেলা যায়। অতিরিক্তভাবে ডামি ভিউ লিনিয়ারলআউটের পরিবর্তে একটি ভিউ হতে পারে। এটি প্রক্রিয়াকরণ শক্তি বাঁচায় + কিছু সতর্কতা থেকে আপনাকে বাঁচায়। সুতরাং, আমার প্রস্তাবটি ডামি দৃশ্যের পরিবর্তে<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
জ্যাকব আর

20
@ পিট্রোরিয়া অ্যান্ড্রয়েডের বিরক্তিকর স্বয়ংক্রিয়-মনোযোগী আচরণ রয়েছে যা এর অ্যাপ্লিকেশন কাঠামোর মূল আচরণ হিসাবে নির্মিত। যদি আপনি এটিকে বলেন যে কোনও সম্পাদনা পাঠ্য ফোকাস প্রকাশ করছে বা হারাচ্ছে, তবে ফোকাসটি কোথায় যায় সে সম্পর্কে স্বয়ংক্রিয়ভাবে সিদ্ধান্ত নেয়। ফোকাসের দিকে স্থানান্তরিত করার জন্য কোনও নতুন অবজেক্ট ছাড়াই এটি বিন্যাসে প্রথম ফোকাসযোগ্য উপাদানটিকে বেছে নিয়েছে এমনকি যখন সেই উপাদানটি কেবল তার ফোকাসটি সাফ করেছে! এটি দারুণ বাদাম এবং হতাশার কারণ তবে এই ধরণের আচরণের একটি বৈধ কারণ থাকতে পারে।
ওয়েস্টন ওয়েডিং

1674

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

যদি এটি ভার্চুয়াল কীবোর্ডের সমস্যা হয় তবে AndroidManifest.xml << কার্যকলাপ> উপাদান ডকুমেন্টেশন দেখুন।

android:windowSoftInputMode="stateHidden" - ক্রিয়াকলাপে প্রবেশ করার সময় সর্বদা এটি আড়াল করুন।

বা android:windowSoftInputMode="stateUnchanged"- এটি পরিবর্তন করবেন না (উদাহরণস্বরূপ এটি ইতিমধ্যে প্রদর্শিত না হলে এটি দেখাবেন না, তবে ক্রিয়াকলাপে প্রবেশের সময় এটি যদি খোলা থাকে তবে এটি খুলুন)।


24
তবুও কার্সারটি লেআউটে প্রথম সম্পাদনা পাঠের মধ্যে রয়েছে
কীবোর্ডটি

39
@ অ্যান্ডারসন: উত্তরের বিষয়ে কিছুই বোঝায় নি যে এটি EditTextফোকাস পেতে বাধা দেবে । এটি প্রকৃতপক্ষে পরিষ্কারভাবে জানিয়েছে যে আপনি ফোকাসে স্বয়ংক্রিয়ভাবে খোলার থেকে সফ্টওয়্যার কীবোর্ড আইএমইকে এইভাবে প্রতিরোধ করবেন ; কারণ এটির আরও বেশি সম্ভাবনা থাকে যে বড় উদ্বেগের নরম অপ্রত্যাশিতভাবে পপিং আপ কীবোর্ড হয়, না ফোকাস নিজেই। আপনার সমস্যাটি যদি EditTextআসলেই কিছুটা ফোকাস করার সাথে থাকে তবে অন্য কারও উত্তর ব্যবহার করুন।
জো

1
এটি প্রোগ্রামিয়ালি সেট করুন: স্ট্যাকওভারফ্লো.com
নিক ফ্রাঞ্চেসিনা

3
ক্যামেরার সাথে কোনও ক্রিয়াকলাপে এটি করবেন না - এটি ফ্ল্যাশের সময় ভেঙে দেয় (আমাকে জিজ্ঞাসা করবেন না কেন)
ড্যানিয়েল উইলসন

1
@ জো এই প্রশ্নটি শুরুতে কীবোর্ডটি লুকানোর বিষয়ে নয় about এই ধরনের প্রশ্ন এখানে জিজ্ঞাসা করা হল stackoverflow.com/questions/18977187/...
user924

1140

একটি সহজ সমাধান বিদ্যমান। আপনার প্যারেন্ট লেআউটে এই বৈশিষ্ট্যগুলি সেট করুন:

<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();

গিলিয়াম পেরের কাছ থেকে ভাল মন্তব্য :

android:descendantFocusability="beforeDescendants"ডিফল্ট বলে মনে হচ্ছে (পূর্ণসংখ্যা মান 0)। এটি কেবল যুক্ত করে কাজ করে android:focusableInTouchMode="true"

সত্যই, আমরা দেখতে পাচ্ছি যে পদ্ধতিটি beforeDescendantsডিফল্ট হিসাবে সেট ViewGroup.initViewGroup()(অ্যান্ড্রয়েড ২.২.২)। তবে 0 এর সমান নয়।ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;

গিলিয়ামকে ধন্যবাদ


1
এই বৈশিষ্ট্যগুলি দর্শনের প্রত্যক্ষ পিতামাতার কাছে সেট করা গুরুত্বপূর্ণ যা ক্রিয়াকলাপ তৈরিতে ফোকাস অর্জন করে, অন্যথায় এটি কাজ করবে না।
টমরোজব

4
শুধু একটি নিখুঁত সমাধান। উভয়ের জন্য কাজ করে: 1.Disabling অটোফোকাস, এবং 2. অক্ষম নরম কীবোর্ডের স্বয়ং-খোলার
দেখা

খুশী হলাম। এটি সরাসরি পিতা বা মাতা হওয়ার দরকার নেই। আমি এটিকে বিন্যাসের মূল স্তরে সেট করেছি এবং এটি ঠিকঠাক বলে মনে হচ্ছে।
কুরোটসুকি

@ ড্যানিয়েলস উইলসন আপনি কখন এডিটেক্সটের সরাসরি পিতা বা মাতা হিসাবে স্ক্রোলভিউ চান?
মার্ক বুয়েকিমা


426

আমি একমাত্র সমাধানটি খুঁজে পেয়েছি:

  • একটি লিনিয়ারলআউট তৈরি করুন (অন্যান্য ধরণের লেআউটের কাজ হবে তবে আমি জানি না)
  • বৈশিষ্ট্য নির্ধারণ করুন android:focusable="true"এবংandroid:focusableInTouchMode="true"

এবং EditTextক্রিয়াকলাপ শুরু করার পরে মনোযোগ পাবে না


সরল !! আমি প্রাথমিকভাবে এই বৈশিষ্ট্যগুলিকে প্যারেন্ট ভিউতে যুক্ত করেছি, যা ব্যর্থ হয়েছে, তারপরে আমি এগুলি অন্য লেআউটে সেট করেছিলাম এবং সূক্ষ্মভাবে কাজ করেছি। ধন্যবাদ !!
রিনো

এটিও কনস্ট্রেন্টলয়েট নিয়ে কাজ করে।
হক্কলাইক

85

সমস্যাটি এমন কোনও সম্পত্তি থেকে এসেছে যা আমি কেবল XML formবিন্যাসের মধ্যে দেখতে পাচ্ছি ।

EditTextএক্সএমএল ট্যাগগুলির মধ্যে ঘোষণার শেষে এই লাইনটি সরিয়ে দেওয়ার বিষয়টি নিশ্চিত করুন :

<requestFocus />

এরকম কিছু দেওয়া উচিত:

<EditText
   android:id="@+id/emailField"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:inputType="textEmailAddress">

   //<requestFocus /> /* <-- without this line */
</EditText>

77

অন্যান্য পোস্টার প্রদত্ত তথ্য ব্যবহার করে আমি নিম্নলিখিত সমাধানটি ব্যবহার করেছি:

এক্সএমএল বিন্যাসে

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

অনক্রিটে ()

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

এবং পরিশেষে, অনারুমে ()

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}

73

পরিবর্তে ক্লিয়ারফোকস () চেষ্টা করুন setSelected(false)। অ্যান্ড্রয়েডের প্রতিটি দৃশ্যে ফোকাসযোগ্যতা এবং নির্বাচনযোগ্যতা উভয়ই রয়েছে এবং আমি মনে করি আপনি কেবল ফোকাসটি সাফ করতে চান।


এটি আশাব্যঞ্জক শোনাচ্ছে তবে ক্রিয়াকলাপের লাইফসাইকেলের কোন পর্যায়ে এটি বলা উচিত? যদি আমি এটিকে অনক্রিয়েট () এ কল করি তবে এডিট টেক্সটটিতে এখনও ফোকাস রয়েছে। এটি অনারিউম () বা অন্য কোনও স্থানে কল করা উচিত? ধন্যবাদ!
চিহ্নিত করুন

8
আমি এই উত্তরের সাথে স্বীকৃত উত্তরকে একত্রিত করেছি। আমি নামক myEditText.clearFocus(); myDummyLinearLayout.requestFocus();মধ্যে onResumeকার্যকলাপের। এটি নিশ্চিত করেছে যে ফোনটি ঘোরার সময় এডিটেক্সট ফোকাসটি রাখেনি।
teedyay

71

নিম্নলিখিতটি তৈরি করার সময় ফোকাস নেওয়া থেকে সম্পাদনা বন্ধ করবে, তবে আপনি যখন তাদের স্পর্শ করবেন তখন এটি দখল করুন grab

<EditText
    android:id="@+id/et_bonus_custom"
    android:focusable="false" />

সুতরাং আপনি এক্সএমএলে মিথ্যাতে ফোকাসযোগ্য সেট রেখেছেন, তবে কীটি জাভাতে রয়েছে, যা আপনি নীচের শ্রোতাদের সাথে যুক্ত করেছেন:

etBonus.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        return false;
    }
});

কারণ আপনি মিথ্যা প্রত্যাবর্তন করছেন, অর্থাত্ ইভেন্টটি গ্রাস করছেন না, কেন্দ্রীভূত আচরণটি স্বাভাবিকের মতো এগিয়ে যাবে will


6
তবে এটি ভবিষ্যতে কখনই মনোযোগ অর্জন করবে না, কীভাবে কেবলমাত্র প্রাথমিক (ক্রিয়াকলাপের সূচনা) জন্য ফোকাস বন্ধ করবেন কীভাবে ??
জয়েশ

1
অন ​​টাচলিস্টনারকে অন্যান্য স্পর্শ ক্রিয়া করার আগে ডাকা হয়। সুতরাং স্পর্শে মনোনিবেশযোগ্য সক্ষম করে স্ট্যান্ডার্ড ফোকাসটি প্রথম স্পর্শে ঘটে। কীবোর্ড এবং সবকিছু উপস্থিত হবে।
MinceMan

1
আমি মনে করি এটি এটি করার সেরা উপায়। এছাড়াও উপরের মম্বো-জাম্বো এক্সএমএল ম্যাজিক ডামি কোড সম্পাদনা পাঠ্যের জটিল সেটটির জন্য কাজ করে নি ... যদি এটি কাজ করে তবে আমি অবশ্যই সংজ্ঞা দিয়ে ভোট দেব।
রাদু

তবে যদি আপনার একাধিক সম্পাদনা পাঠ্য থাকে তবে এটি পরবর্তী সম্পাদনা পাঠ্যের উপর ফোকাস পাবে এবং কীবোর্ড খোলার জন্য অ্যান্ড্রয়েড যুক্ত করা ভাল : নির্দিষ্ট ক্রিয়াকলাপের জন্য উইন্ডোসফট ইনপুটমড = "stateAlwaysHided" manifest
করণ শর্মা

দ্রষ্টব্য: অ্যান্ড্রয়েড পি-তে সিস্টেম আর ডিফল্ট ফোকাস গ্রহণ করবে না। এর অর্থ এই হ্যাকটি পি থেকে শুরু করার প্রয়োজন নেই
মিনসম্যান

65

আমি স্বতন্ত্রভাবে বেশ কয়েকটি উত্তর চেষ্টা করেছিলাম তবে ফোকাসটি এখনও সম্পাদনা পাঠ্যে রয়েছে। আমি কেবল নীচের দুটি সমাধান একসাথে ব্যবহার করে এটি সমাধান করতে সক্ষম হয়েছি।

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/mainLayout"
  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true" >

(সিলভার https://stackoverflow.com/a/8639921/15695 থেকে রেফারেন্স )

এবং অপসারণ

 <requestFocus />

এডিট টেক্সটে

(ফ্লয়েডডিক্ট্ট https://stackoverflow.com/a/9681809 থেকে রেফারেন্স )


1
এটি কাজ করার জন্য উপরের ছাড়াও আমাকে edittext.cियरFocus () যুক্ত করতে হয়েছিল :)
নভে

57

দেরীতে কিন্তু সহজ উত্তর, এক্সএমএল এর প্যারেন্ট লেআউটে এটি যুক্ত করুন।

android:focusable="true" 
android:focusableInTouchMode="true"

উপভোট করুন যদি এটি আপনাকে সহায়তা করে! শুভ কোডিং :)


2
আমার জন্য পুরোপুরি কাজ। আরও একটি বিষয় লক্ষণীয়, স্ক্রোল ভিউতে এই লাইনগুলি যুক্ত করবেন না। এটি স্ক্রোল ভিউতে কাজ করবে না। তবে লিনিয়ার লেআউটে পুরোপুরি কাজ করেছেন।
কার্তিক শ্রীনিবাসন

46

এই সমাধানগুলির কোনওোটাই আমার পক্ষে কাজ করেনি। আমি অটোফোকাস ঠিক করার উপায়টি ছিল:

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>

2
অ্যান্ড্রয়েড: উইন্ডোসফটআইনপুটমোড = অ্যান্ড্রয়েড ম্যানিফেস্টের যে কোনও ক্রিয়াকলাপের উপর "অ্যাডজাস্টপ্যান"
8:48

43

সহজ সমাধান: ইন AndroidManifestActivityট্যাগ ব্যবহার

android:windowSoftInputMode="stateAlwaysHidden"

6
কঠোরভাবে বলতে গেলে, এটি সমস্যার সমাধান করে না। ওপি বলেছিল: "আমি শুরুতে ইনপুট ফোকাস রাখতে কোনও নিয়ন্ত্রণ চাই না।" আপনার সমাধানটি কেবল কীবোর্ডকে আড়াল করে, একটি sublte পার্থক্য রয়েছে।
katzenhut

@ কেটজেনহুত হ্যাঁ, আমার উত্তরটি ঠিক এই উত্তর দিয়ে ts আমার সম্পাদনা পাঠ্যের উপর ফোকাস করা একটি প্লেসআউট কমপ্লিট ক্রিয়াকলাপ খুলবে, সুতরাং এই উত্তরটি অসম্পূর্ণ
জ্যাচ

এই উত্তরটি যদি সম্পূর্ণ হয় তবে এই প্রশ্নটি সম্পূর্ণ হবে: আমি কীভাবে সর্বদা নিশ্চিত করব যে আমার ক্রিয়াকলাপ কখনই কোনও কীবোর্ড না দেখায়। যা নয়.
মার্টিন মার্কনকিনি

37

আপনি শুধু সেট করতে পারেন "focusable" এবং "স্পর্শ মোডে focusable" প্রথম সত্য মূল্যবান বলে গণ্য করতে TextViewএর layout। এইভাবে যখন ক্রিয়াকলাপ শুরু TextViewহবে তখন মনোনিবেশ করা হবে তবে প্রকৃতির কারণে আপনি পর্দার উপর কেন্দ্রীভূত কিছুই দেখতে পাবেন না এবং অবশ্যই কোনও কীবোর্ড প্রদর্শিত হবে না ...


আমার জন্য নিখুঁতভাবে কাজ করে, কেবল আমি আমার ক্রিয়াকলাপের সর্বাধিক বিন্যাসে মান সেট করি এবং প্রথম পাঠ্যদর্শনটিতে না
Maverick1st

36

নিম্নলিখিত আমার জন্য কাজ করে Manifest। লিখুন,

<activity
android:name=".MyActivity"
android:windowSoftInputMode="stateAlwaysHidden"/>

1
এটি পাঠ্য ক্ষেত্রটিকে অন-ফোকাস করে না: এটি কেবল কীবোর্ডটি আড়াল করে। আপনি এখনও একটি ইঙ্গিত পাবেন যা মাঠের বাইরে ফেলে দেওয়া হবে এবং যে কোনও রঙের রাষ্ট্র নির্বাচকরা "কেন্দ্রীভূত = সত্য" অবস্থা প্রদর্শন করবে।
এ। রাগার 18

31

আমি প্রোগ্রাম থেকে সমস্ত ক্ষেত্র থেকে ফোকাস সাফ করা প্রয়োজন। আমি কেবলমাত্র আমার মূল বিন্যাস সংজ্ঞায় নিম্নলিখিত দুটি বিবৃতি যুক্ত করেছি।

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

এটাই. তাত্ক্ষণিকভাবে আমার সমস্যা সমাধান করুন। ধন্যবাদ, সিলভার, আমাকে সঠিক দিকে নির্দেশ করার জন্য।


28

যোগ android:windowSoftInputMode="stateAlwaysHidden"কার্যকলাপ ট্যাগে Manifest.xmlফাইল।

সূত্র


1
এটি পাঠ্য ক্ষেত্রটিকে অন-ফোকাস করে না: এটি কেবল কীবোর্ডটি আড়াল করে। আপনি এখনও একটি ইঙ্গিত পাবেন যা মাঠের বাইরে ফেলে দেওয়া হবে এবং যে কোনও রঙের রাষ্ট্র নির্বাচকরা "কেন্দ্রীভূত = সত্য" অবস্থা প্রদর্শন করবে।
এ। রাগার 18

25

এর মতো আপনার ক্রিয়াকলাপে আপনার যদি অন্য মতামত থাকে তবে ListViewআপনি এটি করতেও পারেন:

ListView.requestFocus(); 

আপনার onResume()থেকে ফোকাস দখল করতে editText

আমি জানি এই প্রশ্নের উত্তর দেওয়া হয়েছে তবে কেবলমাত্র একটি বিকল্প সমাধান প্রদান করা যা আমার পক্ষে কাজ করেছে :)


22

আপনার প্রথম সম্পাদনযোগ্য ক্ষেত্রের আগে এটি চেষ্টা করুন:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();

21

onCreateপদ্ধতিতে নিম্নলিখিত যুক্ত করুন :

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

1
এটি পাঠ্য ক্ষেত্রটিকে অন-ফোকাস করে না: এটি কেবল কীবোর্ডটি আড়াল করে। আপনি এখনও একটি ইঙ্গিত পাবেন যা মাঠের বাইরে ফেলে দেওয়া হবে এবং যে কোনও রঙের রাষ্ট্র নির্বাচকরা "কেন্দ্রীভূত = সত্য" অবস্থা প্রদর্শন করবে।
এ। রাগার 18

17

কার্যকারিতার সাথে সম্পর্কিত এমন কোনও কিছুর সাথে আমি এক্সএমএলকে দূষিত করতে পছন্দ করি না, তাই আমি এই পদ্ধতিটি তৈরি করেছি যা "স্বচ্ছভাবে" প্রথম দৃষ্টি নিবদ্ধযোগ্য দৃষ্টিভঙ্গি থেকে ফোকাসকে চুরি করে এবং তারপরে প্রয়োজনে নিজেকে মুছে ফেলার বিষয়টি নিশ্চিত করে!

public static View preventInitialFocus(final Activity activity)
{
    final ViewGroup content = (ViewGroup)activity.findViewById(android.R.id.content);
    final View root = content.getChildAt(0);
    if (root == null) return null;
    final View focusDummy = new View(activity);
    final View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View view, boolean b)
        {
            view.setOnFocusChangeListener(null);
            content.removeView(focusDummy);
        }
    };
    focusDummy.setFocusable(true);
    focusDummy.setFocusableInTouchMode(true);
    content.addView(focusDummy, 0, new LinearLayout.LayoutParams(0, 0));
    if (root instanceof ViewGroup)
    {
        final ViewGroup _root = (ViewGroup)root;
        for (int i = 1, children = _root.getChildCount(); i < children; i++)
        {
            final View child = _root.getChildAt(i);
            if (child.isFocusable() || child.isFocusableInTouchMode())
            {
                child.setOnFocusChangeListener(onFocusChangeListener);
                break;
            }
        }
    }
    else if (root.isFocusable() || root.isFocusableInTouchMode())
        root.setOnFocusChangeListener(onFocusChangeListener);

    return focusDummy;
}

15

দেরীতে হলেও সহায়ক হতে পারে। আপনার লেআউট উপরের একটি ডামি editText তৈরি করুন তারপর কল myDummyEditText.requestFocus()মধ্যেonCreate()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

এটি আমার প্রত্যাশা মতো আচরণ করবে বলে মনে হয়। কনফিগারেশন পরিবর্তনগুলি হ্যান্ডল করার দরকার নেই, ইত্যাদি দীর্ঘ টেক্সটভিউ (নির্দেশাবলী) সহ ক্রিয়াকলাপের জন্য আমার এটির প্রয়োজন ছিল needed


কেবল রুট ভিউ দিয়েই কেন এটি করবেন না?
সিজেবিএস


13

হ্যাঁ আমি একই জিনিসটি করেছি - একটি 'ডমি' লিনিয়ার লেআউট তৈরি করুন যা প্রাথমিক ফোকাস পায়। তদতিরিক্ত, আমি 'পরবর্তী' ফোকাস আইডি সেট করেছি যাতে ব্যবহারকারী একবারে স্ক্রোল করার পরে এটি আর ফোকাস করতে না পারে:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

একটি ভিউতে ফোকাস থেকে মুক্তি পাওয়ার জন্য প্রচুর কাজ ..

ধন্যবাদ


12

আমার জন্য, সমস্ত ডিভাইসে কী কাজ করেছে তা হ'ল:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

    <View
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

সমস্যাযুক্ত দৃষ্টি নিবদ্ধ করা দৃশ্যের আগে এটি কেবল একটি দৃশ্য হিসাবে রাখুন এবং এটিই।


10

আমি যে সহজ কাজটি করেছি তা হ'ল অনক্রিয়েটে অন্য ভিউতে ফোকাস সেট করা:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

এটি সফট কীবোর্ড আসা বন্ধ করে দিয়েছিল এবং এডিট টেক্সটে কোনও কার্সার ঝলকানি ছিল না।


10

এটি নিখুঁত এবং সবচেয়ে সহজ সমাধান I আমি সর্বদা এটি আমার অ্যাপ্লিকেশনটিতে ব্যবহার করি।

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

এটি পাঠ্য ক্ষেত্রটিকে অন-ফোকাস করে না: এটি কেবল কীবোর্ডটি আড়াল করে। আপনি এখনও একটি ইঙ্গিত পাবেন যা মাঠের বাইরে ফেলে দেওয়া হবে এবং যে কোনও রঙের রাষ্ট্র নির্বাচকরা "কেন্দ্রীভূত = সত্য" অবস্থা প্রদর্শন করবে।
এ। রাগার 18

9
<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>

8

যেখানে আপনি কীবোর্ডটি খুলতে চান না সেখানে Manifestফাইলটির অভ্যন্তরে এই কোডটি লিখুন Activity

android:windowSoftInputMode="stateHidden"

ম্যানিফেস্ট ফাইল:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.projectt"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="24" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
         <activity
            android:name=".Splash"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Login"
            **android:windowSoftInputMode="stateHidden"**
            android:label="@string/app_name" >
        </activity>

    </application>

</manifest>

2
এটি পাঠ্য ক্ষেত্রটিকে অন-ফোকাস করে না: এটি কেবল কীবোর্ডটি আড়াল করে। আপনি এখনও একটি ইঙ্গিত পাবেন যা মাঠের বাইরে ফেলে দেওয়া হবে এবং যে কোনও রঙের রাষ্ট্র নির্বাচকরা "কেন্দ্রীভূত = সত্য" অবস্থা প্রদর্শন করবে।
এ। রাগার 18

7

onCreateআপনার ক্রিয়াকলাপের শুধু ব্যবহার যোগ clearFocus()আপনার editText উপাদান। উদাহরণ স্বরূপ,

edittext = (EditText) findViewById(R.id.edittext);
edittext.clearFocus();

এবং যদি আপনি ফোকাসটিকে অন্য কোনও উপাদানে সরিয়ে নিতে চান তবে এটি ব্যবহার requestFocus()করুন। উদাহরণ স্বরূপ,

button = (Button) findViewById(R.id.button);
button.requestFocus();

6

আমার বোতামটি টিপলে আমি কোনও সম্পাদনা পাঠ্যকে ফোকাস চুরি করা বন্ধ করতে নীচের কোডটি ব্যবহার করি।

addButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        View focused = internalWrapper.getFocusedChild();
        focused.setVisibility(GONE);
        v.requestFocus();
        addPanel();
        focused.setVisibility(VISIBLE);
    }
});

মূলত, সম্পাদনা পাঠ্যটি গোপন করুন এবং তারপরে এটি আবার দেখান। এডিট টেক্সট না হওয়ায় এটি আমার পক্ষে কাজ করে দৃশ্যমান নয় তাই এটি প্রদর্শিত হচ্ছে কিনা তা ।

আপনি এটি লুকিয়ে রাখতে এবং পর পর এটি দেখানোর চেষ্টা করতে পারেন এটি এটি ফোকাস হারাতে সহায়তা করে কিনা।

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