android - কার্যকলাপ প্রারম্ভে ফোকাস অর্জন থেকে EditText থামান




listview android-edittext (20)

Luc এবং মার্ক থেকে চমৎকার উত্তর যদিও একটি ভাল কোড নমুনা অনুপস্থিত। android:focusableInTouchMode="true" ট্যাগ যুক্ত করা android:focusableInTouchMode="true" <LinearLayout> android:focusableInTouchMode="true" নিম্নলিখিত উদাহরণের মতো সমস্যাটি সমাধান করবে।

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

আমার দুটি উপাদানের সাথে Android এ একটি Activity রয়েছে:

  1. EditText
  2. ListView

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

EditText.setSelected(false);

ভাগ্য নেই. যখন Activity শুরু হয় তখন নিজের নির্বাচন না করার জন্য আমি কীভাবে EditText কে সন্তুষ্ট করতে পারি?


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

এক্সএমএল লেআউট

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

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

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

আপনার মূল লেআউট এই লাইন লিখুন ...

 android:focusableInTouchMode="true"

আপনি লেআউট প্রস্থ এবং উচ্চতা সেট 0dp একটি ডামি EditText তৈরি করে এটি অর্জন করতে পারেন এবং সেই দৃশ্যে ফোকাস অনুরোধ করুন। আপনার xml বিন্যাসে নিম্নলিখিত কোড স্নিপেটটি যোগ করুন:

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>

আমার জন্য, সব ডিভাইসে কি কাজ এই হল:

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

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


আমি পেয়েছি একমাত্র সমাধান হল:

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

এবং সম্পাদনা শুরু করার পরে EditText ফোকাস পাবেন না


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

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

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


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

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

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

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

Guillaume Perrot থেকে ভাল মন্তব্য :

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

প্রকৃতপক্ষে, আমরা দেখতে পারি যে পূর্ববর্তী beforeDescendants ViewGroup.initViewGroup() পদ্ধতিতে ডিফল্ট হিসাবে সেট (Android ViewGroup.initViewGroup() )। কিন্তু 0 সমান নয়। ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;

Guillaume ধন্যবাদ।


দেরী, কিন্তু হয়তো সহায়ক। আপনার লেআউটের শীর্ষে একটি ডামি EditText তৈরি করুন তারপরে myDummyEditText.requestFocus() onCreate()

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

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


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

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

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

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

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

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


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

ListView.requestFocus(); 

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

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


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

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

<requestFocus />

যে যে কিছু দিতে হবে:

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

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

সহজ উত্তর, শুধু এক্সএমএল এর পিতা বা মাতা লেআউট এ এই যোগ করুন।

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

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

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

একটি কাজ ফোকাস পরিত্রাণ পেতে শুধু অনেক কাজ ..

ধন্যবাদ


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

Source


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

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

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





android-edittext