ඇන්ඩ්‍රොයිඩ් හි ක්‍රියාකාරකම් ආරම්භය වෙත අවධානය යොමු කිරීමෙන් EditText නතර කරන්නේ කෙසේද?


2879

මට Activityඇන්ඩ්‍රොයිඩ් හි අංග දෙකක් ඇත:

  1. EditText
  2. ListView

මගේ Activityආරම්භය වූ විට , EditTextවහාම ආදාන නාභිගත වේ (ෆ්ලෑෂ් කර්සරය). ආරම්භයේ දී ආදාන අවධානය යොමු කිරීමට මට කිසිදු පාලනයක් අවශ්‍ය නොවේ. මම උත්සාහ කළා:

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

වාසනාවක් නැහැ. ආරම්භයේදී EditTextතෝරා නොගන්නා ලෙස මා ඒත්තු Activityගන්වන්නේ කෙසේද?

Answers:


2599

ලූක් සහ මාක්ගේ විශිෂ්ට පිළිතුරු කෙසේ වෙතත් හොඳ කේත නියැදියක් නොමැත. පහත උදාහරණය මෙන් ටැගය 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"/>

713
මව් පිරිසැලසුම සැකසීම ගැන කුමක් කිව හැකිද android:focusableInTouchMode="true"!
මුහම්මද් බාබර්

28
පරිපූර්ණ! ස්තූතියි ... අවධානයට ගත යුතු එක් කරුණක් නම්, අවධානය යොමු කළ හැකි මූලද්‍රව්‍යයට පෙර ව්‍යාජ අයිතමය නිවැරදිව තැබිය යුතු බවයි !!! මගේ ව්‍යාජ සහ සංස්කරණ ටෙක්ස්ට් අතර පෙළ දර්ශනයක් මා සතුව තිබූ අතර ක්‍රමය ක්‍රියාත්මක නොවීය!
මැඩෝබ්

25
ඇන්ඩ්රොයිඩ් සැකසීම: focusableInTouchMode = මවු සැකැස්ම සඳහා "සත්යය" ස්තුති @Muhammad Babar හොඳ ප්රවේශයක් විය
sujith ගේ

7
නියම කේතය, මට බොහෝ උපකාර කළා :) එය වැඩි දියුණු කිරීමට උත්සාහ කිරීම සඳහා, තවත් සමහරක් android:focusableInTouchMode="true"ආවරණය කරයි android:focusable="true", එබැවින් මෙම අවස්ථාවේදී android:focusable="true"අනවශ්‍ය වන අතර එය ඉවත් කළ හැකිය. ඊට අමතරව ව්‍යාජ දර්ශනය රේඛීය සැකැස්ම වෙනුවට දර්ශනයක් විය හැකිය. මෙය සැකසුම් බලය ඉතිරි කරයි + සමහර අනතුරු ඇඟවීම් වලින් ඔබව ගලවා ගනී. මේ අනුව, මගේ නිර්දේශය වන්නේ ව්‍යාජ දර්ශනය ප්‍රතිස්ථාපනය කිරීමයි<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
ජාකොබ් ආර්

20
IetPietroRea ඇන්ඩ්‍රොයිඩ් එහි යෙදුම් ව්‍යුහයේ මූලික හැසිරීම තුළ ගොඩනගා ඇති කරදරකාරී ස්වයංක්‍රීය-නාභිගත හැසිරීම් ඇත. සංස්කරණ පා text යක් අවධානය යොමු කිරීම හෝ නැතිවීම බව ඔබ එයට පැවසුවහොත්, එය ස්වයංක්‍රීයව අවධානය යොමු වන්නේ කොතැනටද යන්න තීරණය කරයි. නාභිගත කිරීම සඳහා නව වස්තුවක් නොමැතිව, පිරිසැලසුමෙහි පළමු අවධානය යොමු කළ හැකි මූලද්‍රව්‍යය තෝරාගන්නේ එම මූලද්‍රව්‍යය එහි අවධානය නිරවුල් කළ විට පවා ය! එය ටිකක් ගෙඩි සහ කලකිරීමක්, නමුත් සමහර විට මෙම ආකාරයේ හැසිරීමට වලංගු හේතුවක් තිබේ.
වෙස්ටන්

1679

ඔබට කිසිසේත්ම අවධානය යොමු නොකිරීමට අවශ්‍ය නොවන සැබෑ ගැටළුවද? හෝ අවධානය යොමු කිරීමේ ප්‍රති result ලයක් ලෙස එය අථත්‍ය යතුරුපුවරුව පෙන්වීමට ඔබට අවශ්‍ය EditTextනැද්ද? EditTextආරම්භය කෙරෙහි අවධානය යොමු කිරීම පිළිබඳ ගැටළුවක් මට නොපෙනේ , නමුත් පරිශීලකයා පැහැදිලිවම අවධානය යොමු නොකරන ලෙස ඉල්ලා සිටි විට EditText(සහ එහි ප්‍රති key ලයක් ලෙස යතුරු පුවරුව විවෘත කරන්න) මෘදු ඉන්පුට් කවුළුව විවෘතව තිබීම අනිවාර්යයෙන්ම ගැටලුවකි .

එය අථත්ය යතුරුපුවරුවේ ගැටළුව නම්, AndroidManifest.xml <activity> මූලද්රව්ය ලේඛනය බලන්න.

android:windowSoftInputMode="stateHidden" - ක්‍රියාකාරකමට ඇතුළු වන විට එය සැමවිටම සඟවන්න.

හෝ android:windowSoftInputMode="stateUnchanged"- එය වෙනස් කරන්න එපා (උදා: නෑ පෙන්වන්න එය දැනටමත් පෙන්වා ඇත නැති නම් එය, නමුත් ක්රියාකාරකම් ඇතුළු විට එය විවෘත වූයේ නම්, විවෘත එය තබන්න).


24
යතුරු පුවරුව
නොපෙන්වා

39
Nd ඇන්ඩර්සන්: පිළිතුර ගැන කිසිවක් ඇඟවෙන්නේ එය EditTextඅවධානය ලබා ගැනීම වලක්වනු ඇති බවයි. මෘදුකාංග යතුරුපුවරුව IME ස්වයංක්‍රීයව නාභිගත වීම වැළැක්වීම මෙය බව එය සැබවින්ම පැහැදිලිව සඳහන් කරයි ; මක්නිසාද යත්, වැඩි අවධානයක් යොමු වන්නේ මෘදු යතුරුපුවරුව අනපේක්ෂිත ලෙස මතු වීම මිස අවධානය යොමු කිරීම නොවේ. ඔබේ ගැටලුව EditTextඇත්ත වශයෙන්ම අවධානය යොමු කිරීම සමඟ නම් , වෙනත් කෙනෙකුගේ පිළිතුර භාවිතා කරන්න.
ජෝ

1
එය ක්‍රමලේඛගතව සකසන්න: stackoverflow.com/questions/6138330/…
නික් ෆ්‍රැන්චෙස්චිනා

3
කැමරාවක් සහිත ක්‍රියාකාරකමක් මත මෙය නොකරන්න - එය සැණෙළියෙහි වේලාව බිඳ දමයි (ඇයිදැයි මගෙන් අහන්න එපා)
ඩැනියෙල් විල්සන්

1
Oe මෙම ප්‍රශ්නය ආරම්භයේ දී යතුරුපුවරුව සැඟවීම ගැන නොවේ. එවැනි ප්‍රශ්නයක් මෙහි ඇසුවේ stackoverflow.com/questions/18977187/…
user924

1143

සරල විසඳුමක් තිබේ. මෙම ගුණාංග ඔබේ මව් පිරිසැලසුම තුළ සකසන්න:

<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".

සැබවින්ම, ක්‍රමයේ beforeDescendantsපෙරනිමිය ලෙස කට්ටලය අපට දැක ගත හැකිය ViewGroup.initViewGroup()(ඇන්ඩ්‍රොයිඩ් 2.2.2). නමුත් 0 ට සමාන නොවේ.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;

ගුයිලූම්ට ස්තූතියි.


1
ක්‍රියාකාරකම් නිර්මාණය කිරීම කෙරෙහි අවධානය යොමු කරන view ජු මාපියන්ට මෙම ගුණාංග සැකසීම වැදගත්ය , එසේ නොමැති නම් එය ක්‍රියා නොකරනු ඇත.
tomrozb

4
පරිපූර්ණ විසඳුමක් පමණි. දෙකම සඳහා ක්‍රියා කරයි: 1. ස්වයංක්‍රීය කේන්ද්‍රය අක්‍රීය කිරීම සහ 2. මෘදු යතුරුපුවරුව ස්වයංක්‍රීයව විවෘත කිරීම අක්‍රීය කරන්න
හමුවන්න

හොඳයි. එය සෘජු දෙමාපියෙකු වීමට අවශ්‍ය නොවේ. මම එය පිරිසැලසුමේ මූල මට්ටමින් සකස් කළ අතර එය හොඳින් ක්‍රියාත්මක වන බව පෙනේ.
කුරොට්සුකි

An ඩැනියෙල් විල්සන් ඔබට සංස්කරණ පෙළක සෘජු මාපියෙකු ලෙස අනුචලන දර්ශනයක් අවශ්‍ය වන්නේ කවදාද?
මාර්ක් බුකෙමා


427

මා සොයාගත් එකම විසඳුම:

හා EditTextක්රියාකාරකම් ආරම්භ පසු අවධානය යොමු ලබා ගැනීමට නොහැකි වනු ඇත


සරල!! මම මුලින් මෙම ගුණාංග මව් දර්ශනයට එකතු කළ අතර එය අසාර්ථක විය, පසුව මම මේවා වෙනත් පිරිසැලසුමකට සකසා හොඳින් වැඩ කළෙමි. ස්තූතියි !!
රිනෝ

එය ConstraintLayout සමඟද ක්‍රියා කරයි.
හෝක් වැනි

86

ගැටලුව පැමිණෙන්නේ මට පමණක් දැකිය හැකි දේපලකිනි XML form පිරිසැලසුම දේපලකිනි.

EditTextXML ටැග් තුළ ප්‍රකාශය අවසානයේ මෙම රේඛාව ඉවත් කිරීමට වග බලා ගන්න :

<requestFocus />

එය එවැනි දෙයක් ලබා දිය යුතුය:

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

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

78

වෙනත් පෝස්ටර් මගින් සපයන ලද තොරතුරු භාවිතා කරමින් මම පහත විසඳුම භාවිතා කළෙමි:

XML පිරිසැලසුම තුළ

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

onCreate () හි

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

අවසාන වශයෙන්, onResume () හි

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

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

74

ඒ වෙනුවට clearFocus () උත්සාහ කරන්න setSelected(false). ඇන්ඩ්‍රොයිඩ් හි සෑම දර්ශනයකටම නාභිගත කිරීමේ හැකියාව සහ තෝරා ගැනීමේ හැකියාව යන දෙකම ඇත, තවද ඔබට අවධානය යොමු කිරීමට අවශ්‍ය යැයි මම සිතමි.


එය යහපත් යැයි පෙනේ, නමුත් ක්‍රියාකාරකම් ජීවන චක්‍රයේ කුමන අවස්ථාවේදී එය හැඳින්විය යුතුද? මම එය onCreate () හි අමතන්නේ නම්, EditText වෙත තවමත් අවධානය යොමු වී ඇත. එය onResume () හෝ වෙනත් ස්ථානයකට කැඳවිය යුතුද? ස්තූතියි!
මාර්ක්

8
මම පිළිගත් පිළිතුර මෙම පිළිතුර සමඟ ඒකාබද්ධ කළෙමි. නමින් මම myEditText.clearFocus(); myDummyLinearLayout.requestFocus();තුළ onResumeක්රියාකාරකම. දුරකථනය භ්‍රමණය වන විට EditText අවධානය යොමු නොකිරීමට මෙය සහතික විය.
teedyay

71

පහත දැක්වෙන්නේ සංස්කරණ පෙළ නිර්මාණය කරන විට අවධානය යොමු කිරීමෙන් වළක්වනු ඇත, නමුත් ඔබ ඒවා ස්පර්ශ කරන විට එය අල්ලා ගන්න.

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

එබැවින් ඔබ xml හි අසත්‍යය වෙත අවධානය යොමු කළ හැකි නමුත් යතුර ජාවා තුළ ඇත, එය ඔබ පහත සවන්දෙන්නන් එක් කරයි:

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

ඔබ වැරදි ලෙස ආපසු පැමිණෙන නිසා, එනම් සිදුවීම පරිභෝජනය නොකිරීම නිසා, අවධානය යොමු කිරීමේ හැසිරීම සාමාන්‍ය පරිදි ඉදිරියට යනු ඇත.


6
නමුත් මෙය අනාගතයේදී කිසි විටෙකත් අවධානය යොමු නොකරනු ඇත, ආරම්භක (ක්‍රියාකාරකම් ආරම්භය) සඳහා පමණක් අවධානය යොමු කිරීම නවත්වන්නේ කෙසේද ??
ජයෂ්

1
වෙනත් ස්පර්ශ ක්‍රියා වලට පෙර onTouchListener ලෙස හැඳින්වේ. එබැවින් ස්පර්ශය කෙරෙහි අවධානය යොමු කළ හැකි වන පරිදි සම්මත අවධානය පළමු ස්පර්ශය මත සිදු වේ. යතුරුපුවරුව ඉහළට එනු ඇති අතර සියල්ල.
මින්ස්මන්

1
මම හිතන්නේ මෙය කළ හැකි හොඳම ක්‍රමයයි. එසේම, ඉහත සඳහන් mumbo-jumbo xml මැජික් ව්‍යාජ කේතය සංකීර්ණ සංස්කරණ පෙළක් සඳහා ක්‍රියා නොකළේය ... මෙය ක්‍රියාත්මක වන්නේ නම්, මම නිශ්චිතවම ඡන්දය ප්‍රකාශ කරමි.
රාදු

ඔබ සතුව සංස්කරණ පෙළ කිහිපයක් තිබේ නම් එය ඊළඟ සංස්කරණ පෙළ කෙරෙහි අවධානය යොමු කර යතුරුපුවරුව විවෘත කරනු ඇත, එබැවින් ඇන්ඩ්‍රොයිඩ් එක් කිරීම වඩා හොඳය : windowSoftInputMode = විශේෂිත ක්‍රියාකාරකම් සඳහා ප්‍රකාශිතව “stateAlwaysHidden” .
කරන් ෂර්මා

සටහන: ඇන්ඩ්‍රොයිඩ් පී හි පද්ධතිය තවදුරටත් පෙරනිමි අවධානයක් ලබා නොගනී. මෙයින් අදහස් වන්නේ පී.
මින්ස්මන්

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

EditText හි

(Floydaddict https://stackoverflow.com/a/9681809 වෙතින් යොමු කිරීම )


1
එය ක්‍රියාත්මක කිරීම සඳහා මට ඉහත සංස්කරණයට අමතරව edittext.clearFocus () එකතු කිරීමට සිදු විය :)
Nav

57

ප්‍රමාද නමුත් සරලම පිළිතුර, මෙය XML හි මව් පිරිසැලසුමට එක් කරන්න.

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

එය ඔබට උදව් කළේ නම් ඉහළට ඔසවන්න! සුබ කේතීකරනය :)


2
මා වෙනුවෙන් පරිපූර්ණව වැඩ කළා. සැලකිල්ලට ගත යුතු තවත් දෙයක් නම්, අනුචලන දර්ශනයට මෙම රේඛා එක් නොකරන්න. එය අනුචලන දර්ශනයෙන් ක්‍රියා නොකරයි. නමුත් රේඛීය පිරිසැලසුම සමඟ පරිපූර්ණව වැඩ කළේය.
කාර්තික් ශ‍්‍රිනිවාසන්

46

මෙම විසඳුම් කිසිවක් මට වැඩ කළේ නැත. මම ස්වයංක්‍රීය අවධානය යොමු කරන ආකාරය:

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

2
android: windowSoftInputMode = ඇන්ඩ්‍රොයිඩ් මැනිෆෙස්ට් හි ඕනෑම ක්‍රියාකාරකමක් පිළිබඳව "adjustPan"
rallat

43

සරල විසඳුමක්: දී AndroidManifestඇති Activityටැගය භාවිතා

android:windowSoftInputMode="stateAlwaysHidden"

6
නිශ්චිතවම කිවහොත්, මෙය ගැටළුව විසඳන්නේ නැත. OP පැවසුවේ “ආරම්භයේ දී ආදාන අවධානය යොමු කිරීමට මට කිසිදු පාලනයක් අවශ්‍ය නැත.” ඔබගේ විසඳුම යතුරුපුවරුව සඟවයි, එහි වෙනසක් ඇත.
katzenhut

atkatzenhut ඔව්, මෙම පිළිතුර සමඟ මගේ ප්‍රශ්නය හරියටම එයයි. මගේ සංස්කරණ පා on ය වෙත අවධානය යොමු කිරීමෙන් PlaceAutoComplete ක්‍රියාකාරකමක් විවෘත වේ, එබැවින් මෙම පිළිතුර අසම්පූර්ණයි
Zach

ප්‍රශ්නය නම් මෙම පිළිතුර සම්පුර්ණ වනු ඇත: මගේ ක්‍රියාකාරකම කිසි විටෙක යතුරුපුවරුවක් නොපෙන්වන බව සහතික කරන්නේ කෙසේද? නැති.
මාටින් මාකොන්සිනි

37

ඔබ සැකසිය හැක "focusable" හා "ස්පර්ශ ආකාරයෙන් focusable" පළමු මත සැබෑ අගය කිරීමට TextViewපිළිබඳ layout. මේ ආකාරයෙන් ක්‍රියාකාරකම ආරම්භ වන TextViewවිට අවධානය යොමු වනු ඇත, නමුත් එහි ස්වභාවය නිසා, ඔබ තිරය මත අවධානය යොමු කර ඇති කිසිවක් නොපෙනෙන අතර ඇත්ත වශයෙන්ම යතුරුපුවරුවක් නොපෙන්වයි ...


මා වෙනුවෙන් පරිපූර්ණව ක්‍රියා කරයි, මගේ ක්‍රියාකාරකම්වල ඉහළම පිරිසැලසුමෙහි වටිනාකම මා විසින් පමණක් සකසා ඇති අතර පළමු පෙළ දර්ශනයට නොවේ
Maverick1st

36

පහත දැක්වෙන්නේ මා වෙනුවෙන් වැඩ කිරීමයි Manifest. ලියන්න,

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

1
මෙය පෙළ ක්ෂේත්‍රය වෙත අවධානය යොමු නොකරයි: එය යතුරුපුවරුව සඟවයි. ඔබට තවමත් ක්ෂේත්‍රයෙන් ඉවතට තල්ලු කළ ඉඟියක් ලැබෙනු ඇති අතර ඕනෑම වර්ණ රාජ්‍ය තේරීම් කරුවන් විසින් “නාභිගත = සත්‍ය” තත්වය පෙන්වනු ඇත.
ඒ. රේගර්

31

ක්‍රමලේඛිකව සියලු ක්ෂේත්‍රයන්ගෙන් අවධානය ඉවත් කිරීමට මට අවශ්‍ය විය. මම පහත දැක්වෙන ප්‍රකාශ දෙක මගේ ප්‍රධාන පිරිසැලසුම් අර්ථ දැක්වීමට එකතු කළෙමි.

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

ඒක තමයි. මගේ ගැටලුව ක්ෂණිකව විසඳා ඇත. ස්තූතියි, රිදී, මාව නිවැරදි දිශාවට යොමු කිරීම ගැන.


28

එකතු android:windowSoftInputMode="stateAlwaysHidden"වූ ක්රියාකාරකම් ටැගය Manifest.xmlගොනුව.

මූලාශ්රය


1
මෙය පෙළ ක්ෂේත්‍රය වෙත අවධානය යොමු නොකරයි: එය යතුරුපුවරුව සඟවයි. ඔබට තවමත් ක්ෂේත්‍රයෙන් ඉවතට තල්ලු කළ ඉඟියක් ලැබෙනු ඇති අතර ඕනෑම වර්ණ රාජ්‍ය තේරීම් කරුවන් විසින් “නාභිගත = සත්‍ය” තත්වය පෙන්වනු ඇත.
ඒ. රේගර්

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
මෙය පෙළ ක්ෂේත්‍රය වෙත අවධානය යොමු නොකරයි: එය යතුරුපුවරුව සඟවයි. ඔබට තවමත් ක්ෂේත්‍රයෙන් ඉවතට තල්ලු කළ ඉඟියක් ලැබෙනු ඇති අතර ඕනෑම වර්ණ රාජ්‍ය තේරීම් කරුවන් විසින් “නාභිගත = සත්‍ය” තත්වය පෙන්වනු ඇත.
ඒ. රේගර්

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

එය මා බලාපොරොත්තු වන පරිදි හැසිරෙන බව පෙනේ. වින්‍යාස වෙනස්වීම් හැසිරවීමට අවශ්‍ය නැත. දීර් Text පෙළ දර්ශනයක් (උපදෙස්) සහිත ක්‍රියාකාරකමක් සඳහා මට මෙය අවශ්‍ය විය.


මූල දෘෂ්ටියෙන් පමණක් මෙය නොකරන්නේ ඇයි?
CJBS


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

මම කළ සරලම දෙය නම් onCreate හි වෙනත් මතයක් කෙරෙහි අවධානය යොමු කිරීමයි:

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

මෙය මෘදු යතුරුපුවරුව ඉහළට පැමිණීම නැවැත්වූ අතර සංස්කරණ ටෙක්ස්ට් හි කර්සරය දැල්වීමක් නොතිබුණි.


10

මෙය පරිපූර්ණ හා පහසුම විසඳුමයි. මම මෙය සැමවිටම මගේ යෙදුමේ භාවිතා කරමි.

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

මෙය පෙළ ක්ෂේත්‍රය වෙත අවධානය යොමු නොකරයි: එය යතුරුපුවරුව සඟවයි. ඔබට තවමත් ක්ෂේත්‍රයෙන් ඉවතට තල්ලු කළ ඉඟියක් ලැබෙනු ඇති අතර ඕනෑම වර්ණ රාජ්‍ය තේරීම් කරුවන් විසින් “නාභිගත = සත්‍ය” තත්වය පෙන්වනු ඇත.
ඒ. රේගර්

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
මෙය පෙළ ක්ෂේත්‍රය වෙත අවධානය යොමු නොකරයි: එය යතුරුපුවරුව සඟවයි. ඔබට තවමත් ක්ෂේත්‍රයෙන් ඉවතට තල්ලු කළ ඉඟියක් ලැබෙනු ඇති අතර ඕනෑම වර්ණ රාජ්‍ය තේරීම් කරුවන් විසින් “නාභිගත = සත්‍ය” තත්වය පෙන්වනු ඇත.
ඒ. රේගර්

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

මූලික වශයෙන්, සංස්කරණ පෙළ සඟවා නැවත එය පෙන්වන්න. EditText ලෙස මෙය මට වැඩ කරයි දර්ශනය නොවන එබැවින් එය පෙන්වන්නේද යන්න ගැටළුවක් නොවේ.

අවධානය යොමු නොවීමට එය උපකාරී වේදැයි බැලීමට ඔබට එය සැඟවීමට හා අනුප්‍රාප්තිකව පෙන්වීමට උත්සාහ කළ හැකිය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.