Cách ngăn EditText không tập trung khi khởi động Activity trong Android


2873

Tôi có một Activitytrong Android, với hai yếu tố:

  1. EditText
  2. ListView

Khi tôi Activitybắt đầu, EditTextngay lập tức có tiêu điểm đầu vào (con trỏ nhấp nháy). Tôi không muốn bất kỳ kiểm soát nào có trọng tâm đầu vào khi khởi động. Tôi đã thử:

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

Không may mắn. Làm thế nào tôi có thể thuyết phục EditTextđể không chọn chính nó khi Activitybắt đầu?

Câu trả lời:


2593

Câu trả lời tuyệt vời từ Luc và Mark tuy nhiên thiếu một mẫu mã tốt. Thêm thẻ android:focusableInTouchMode="true"android:focusable="true"vào bố trí cha mẹ (ví dụ LinearLayouthoặc ConstraintLayout) như ví dụ sau sẽ khắc phục vấn đề.

<!-- 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
Điều gì về việc thiết lập bố trí cha mẹ thành android:focusableInTouchMode="true"!
Muhammad Babar

28
Hoàn hảo! Cảm ơn ... Một điều cần lưu ý là vật phẩm giả phải được PLACED RIGHT TRƯỚC KHI yếu tố có thể tập trung !!! Tôi đã có một TextView giữa hình nộm của tôi và EditText và phương thức không hoạt động!
maddob

25
thiết lập android: FocusableInTouchMode = "true" cho bố cục cha mẹ là cách tiếp cận tốt, cảm ơn @Muhammad Babar
sujith s

7
Mã tuyệt vời, đã giúp tôi rất nhiều :) Để cố gắng cải thiện nó, android:focusableInTouchMode="true"bao gồm android:focusable="true"+ một số chi tiết khác, vì vậy trong trường hợp android:focusable="true"này là không cần thiết, và có thể được gỡ bỏ. Ngoài ra, chế độ xem giả có thể là Chế độ xem thay vì Tuyến tính. Điều này giúp tiết kiệm sức mạnh xử lý + giúp bạn tiết kiệm từ một số Cảnh báo. Do đó, đề xuất của tôi là thay thế chế độ xem giả bằng<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
Jacob R

20
@PietroRea Android có các hành vi lấy nét tự động gây phiền nhiễu được tích hợp vào hành vi cốt lõi của cấu trúc ứng dụng. Nếu bạn nói với nó rằng một văn bản chỉnh sửa đang phát hành hoặc mất tiêu điểm, nó sẽ tự động đưa ra quyết định về nơi tiêu điểm đi. Không có đối tượng mới để lấy nét, nó sẽ chọn phần tử có thể lấy nét đầu tiên trong bố cục ngay cả khi phần tử đó là phần tử vừa xóa tiêu điểm của nó! Đó là một loại hạt và bực bội, nhưng có lẽ có một lý do hợp lệ cho loại hành vi này.
Đám cưới Weston

1676

Có phải vấn đề thực sự mà bạn không muốn nó tập trung vào tất cả? Hoặc bạn không muốn nó hiển thị bàn phím ảo là kết quả của việc tập trung vào EditText? Tôi thực sự không thấy vấn đề gì với EditTextviệc tập trung vào khởi động, nhưng chắc chắn có vấn đề khi mở cửa sổ softInput khi người dùng không yêu cầu rõ ràng tập trung vào EditText(và kết quả là mở bàn phím).

Nếu đó là sự cố của bàn phím ảo, hãy xem tài liệu AndroidManifest.xml phần tử <Activity> .

android:windowSoftInputMode="stateHidden" - luôn ẩn nó khi vào hoạt động.

hoặc android:windowSoftInputMode="stateUnchanged"- không thay đổi nó (ví dụ: không hiển thị nếu nó chưa được hiển thị, nhưng nếu nó được mở khi tham gia hoạt động, hãy để nó mở).


24
Tuy nhiên, con trỏ vẫn ở EditText đầu tiên trong bố cục - mặc dù bàn phím không được hiển thị
martyglaubitz

39
@Anderson: Không có gì về câu trả lời ngụ ý rằng nó sẽ ngăn không cho EditTextlấy được trọng tâm. Nó thực sự nói rõ rằng đây là cách bạn ngăn bàn phím phần mềm IME tự động mở khi lấy nét; bởi vì nhiều khả năng mối quan tâm lớn hơn là bàn phím mềm bật lên bất ngờ, không phải là trọng tâm. Nếu vấn đề của bạn là EditTextthực sự có trọng tâm, thì hãy sử dụng câu trả lời của người khác.
Joe

1
thiết lập chương trình theo chương trình: stackoverflow.com/questions/6138330/ từ
Nick Franceschina

3
Đừng làm điều này trên một hoạt động với máy ảnh - nó phá vỡ thời gian của đèn flash (đừng hỏi tôi tại sao)
Daniel Wilson

1
@Joe câu hỏi này không phải là về việc ẩn bàn phím khi khởi động. Câu hỏi như vậy đã được hỏi ở đây stackoverflow.com/questions/18977187/ từ
user924

1141

Một giải pháp đơn giản hơn tồn tại. Đặt các thuộc tính này trong bố trí cha mẹ của bạn:

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

Và bây giờ, khi hoạt động bắt đầu, bố cục chính này sẽ được lấy nét theo mặc định.

Ngoài ra, chúng ta có thể xóa tiêu điểm khỏi chế độ xem con trong thời gian chạy (ví dụ: sau khi hoàn thành chỉnh sửa con) bằng cách đặt lại tiêu điểm cho bố cục chính, như sau:

findViewById(R.id.mainLayout).requestFocus();

Nhận xét tốt từ Guillaume Perrot :

android:descendantFocusability="beforeDescendants"dường như là mặc định (giá trị nguyên là 0). Nó hoạt động chỉ bằng cách thêm android:focusableInTouchMode="true".

Thực sự, chúng ta có thể thấy rằng beforeDescendantsthiết lập là mặc định trong ViewGroup.initViewGroup()phương thức (Android 2.2.2). Nhưng không bằng 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;

Cảm ơn Guillaume.


1
Điều quan trọng là đặt các thuộc tính này thành cha mẹ trực tiếp của chế độ xem tập trung vào việc tạo hoạt động, nếu không nó sẽ không hoạt động.
tomrozb

4
Chỉ là một giải pháp hoàn hảo. Hoạt động cho cả hai: 1. Tắt chức năng tự động lấy nét và 2. Tắt tự động mở bàn phím mềm
Gặp gỡ

Đẹp. Nó không cần phải là cha mẹ trực tiếp. Tôi đặt nó ở mức gốc của bố cục và nó có vẻ hoạt động tốt.
Kurotsuki

@DanielWilson khi nào bạn muốn có một scrollview với tư cách là cha mẹ trực tiếp của một edittext?
Đánh dấu Buikema

Bạn phải làm việc với đầu vào mềm của cửa sổ như readyandroid.wordpress.com/ Từ
Sẵn sàng cho Android

427

Giải pháp duy nhất tôi tìm thấy là:

  • Tạo một linearLayout (Tôi không biết nếu các loại Bố cục khác sẽ hoạt động)
  • Đặt thuộc tính android:focusable="true"android:focusableInTouchMode="true"

EditTextsẽ không tập trung sau khi bắt đầu hoạt động


Đơn giản!! Ban đầu tôi đã thêm các thuộc tính này vào chế độ xem cha, không thành công, sau đó tôi đặt các thuộc tính này sang bố cục khác và hoạt động tốt. Cảm ơn!!
Rino

Nó cũng hoạt động với ConstraintLayout.
Hawklike

86

Vấn đề dường như đến từ một tài sản mà tôi chỉ có thể nhìn thấy trong XML formbố cục.

Đảm bảo xóa dòng này ở cuối phần khai báo trong các EditTextthẻ XML:

<requestFocus />

Điều đó sẽ cho một cái gì đó như thế:

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

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

78

sử dụng thông tin được cung cấp bởi các áp phích khác, tôi đã sử dụng giải pháp sau:

trong bố cục 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"/>

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

và cuối cùng, trong onResume ()

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

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

74

Hãy thử ClearF Focus () thay vì setSelected(false). Mọi chế độ xem trong Android đều có khả năng lấy nét và khả năng chọn lọc, và tôi nghĩ rằng bạn muốn xóa tiêu điểm.


Điều đó nghe có vẻ hứa hẹn, nhưng tại thời điểm nào trong vòng đời Activity nên được gọi là? Nếu tôi gọi nó bằng onCreate (), thì EditText vẫn có tiêu điểm. Nó có nên được gọi trong onResume () hoặc một số vị trí khác không? Cảm ơn!
Đánh dấu

8
Tôi kết hợp câu trả lời được chấp nhận với câu trả lời này. Tôi gọi myEditText.clearFocus(); myDummyLinearLayout.requestFocus();trong onResumeHoạt động. Điều này đảm bảo EditText không giữ được trọng tâm khi điện thoại được xoay.
teedyay

71

Việc sau đây sẽ ngăn edittext lấy nét khi được tạo, nhưng lấy nó khi bạn chạm vào chúng.

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

Vì vậy, bạn đặt tiêu điểm thành false trong xml, nhưng khóa nằm trong java, bạn thêm trình nghe sau:

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

Bởi vì bạn đang trả về false, tức là không tiêu thụ sự kiện, hành vi lấy nét sẽ diễn ra như bình thường.


6
Nhưng điều này sẽ không bao giờ đạt được sự tập trung trong tương lai, làm thế nào để chỉ dừng tập trung cho ban đầu (bắt đầu hoạt động) ??
Jayesh

1
OnTouchListener được gọi trước các hành động chạm khác. Vì vậy, bằng cách cho phép lấy nét khi chạm, tiêu chuẩn sẽ xảy ra ở lần chạm đầu tiên. Bàn phím sẽ xuất hiện và mọi thứ.
MinceMan

1
Tôi nghĩ rằng đây là cách tốt nhất để làm điều đó. Ngoài ra, mã giả ma thuật mumbo-jumbo xml ở trên KHÔNG hoạt động đối với một tập hợp các văn bản chỉnh sửa phức tạp ... Nếu điều này hoạt động, tôi chắc chắn sẽ bỏ phiếu.
Radu

Nhưng nếu bạn đang có nhiều văn bản chỉnh sửa, nó sẽ tập trung vào văn bản chỉnh sửa tiếp theo và mở bàn phím để tốt hơn khi thêm android: windowSoftInputMode = "stateAlwaysHidden" trong tệp kê khai cho hoạt động cụ thể.
Karan sharma

Lưu ý: trên Android P, hệ thống sẽ không còn lấy tiêu điểm mặc định. Điều này có nghĩa là việc hack này là không cần thiết bắt đầu với P.
MinceMan

65

Tôi đã thử một vài câu trả lời riêng lẻ nhưng trọng tâm vẫn là tại EditText. Tôi chỉ có thể giải quyết nó bằng cách sử dụng hai trong số các giải pháp dưới đây cùng nhau.

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

(Tham khảo từ Bạc https://stackoverflow.com/a/8639921/15695 )

và loại bỏ

 <requestFocus />

tại EditText

(Tham khảo từ floydaddict https://stackoverflow.com/a/9681809 )


1
Tôi đã phải thêm edittext.clearF Focus () ngoài các cách trên để nó hoạt động :)
Nav

57

Câu trả lời muộn nhưng đơn giản nhất, chỉ cần thêm điều này trong bố trí cha mẹ của XML.

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

Upvote nếu nó giúp bạn! Chúc mừng mã hóa :)


2
làm việc hoàn hảo cho tôi một điều nữa cần lưu ý là, đừng thêm những dòng này vào chế độ xem cuộn. Nó không hoạt động trong chế độ xem cuộn. Nhưng làm việc hoàn hảo với bố trí tuyến tính.
Karthic Srinivasan

46

Không có giải pháp nào làm việc cho tôi. Cách tôi sửa lấy nét tự động là:

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

2
android: windowSoftInputMode = "điều chỉnh" trên bất kỳ hoạt động nào trong Bản kê khai Android
rallat

43

Giải pháp đơn giản: Trong AndroidManifesttrong Activitysử dụng thẻ

android:windowSoftInputMode="stateAlwaysHidden"

6
Nói đúng ra, điều này không giải quyết được vấn đề. OP cho biết: "Tôi không muốn bất kỳ sự kiểm soát nào có trọng tâm đầu vào khi khởi động." Giải pháp của bạn chỉ ẩn bàn phím, có một sự khác biệt sublte.
katzenhut

@katzenhut yep, đó là vấn đề của tôi với câu trả lời này chính xác. Tập trung vào edittext của tôi sẽ mở ra một hoạt động PlaceAutoComplete, vì vậy câu trả lời này không đầy đủ
Zach

Câu trả lời này sẽ đầy đủ nếu câu hỏi là: Làm thế nào để tôi luôn đảm bảo hoạt động của mình không bao giờ hiển thị bàn phím. Cái nào không.
Martin Marconcini

37

Bạn chỉ có thể thiết lập "đặt tiêu điểm""đặt tiêu điểm trong chế độ cảm ứng" để đánh giá đúng vào ngày đầu tiên TextViewcủa layout. Theo cách này khi hoạt động bắt đầu TextViewsẽ được tập trung nhưng do tính chất của nó, bạn sẽ thấy không có gì tập trung vào màn hình và tất nhiên, sẽ không có bàn phím nào được hiển thị ...


hoạt động hoàn hảo đối với tôi, chỉ có tôi đặt giá trị trên bố cục ngoài cùng trong hoạt động của mình chứ không phải ở chế độ xem văn bản đầu tiên
Maverick1st

36

Sau đây làm việc cho tôi trong Manifest. Viết,

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

1
Điều này không bỏ tập trung vào trường văn bản: nó chỉ ẩn bàn phím. Bạn vẫn sẽ nhận được một gợi ý bị đẩy ra khỏi trường và bất kỳ bộ chọn trạng thái màu nào cũng sẽ hiển thị trạng thái "tập trung = đúng".
A. Rager

31

Tôi cần phải xóa tập trung từ tất cả các lĩnh vực lập trình. Tôi chỉ thêm hai câu sau vào định nghĩa bố cục chính của mình.

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

Đó là nó. Đã khắc phục sự cố của tôi ngay lập tức. Cảm ơn, Silver, vì đã chỉ cho tôi đi đúng hướng.


28

Thêm android:windowSoftInputMode="stateAlwaysHidden"vào thẻ hoạt động của Manifest.xmltập tin.

Nguồn


1
Điều này không bỏ tập trung vào trường văn bản: nó chỉ ẩn bàn phím. Bạn vẫn sẽ nhận được một gợi ý bị đẩy ra khỏi trường và bất kỳ bộ chọn trạng thái màu nào cũng sẽ hiển thị trạng thái "tập trung = đúng".
A. Rager

25

Nếu bạn có quan điểm khác về hoạt động của mình như a ListView, bạn cũng có thể làm:

ListView.requestFocus(); 

trong của bạn onResume()để lấy tập trung từ editText.

Tôi biết câu hỏi này đã được trả lời nhưng chỉ cung cấp một giải pháp thay thế phù hợp với tôi :)


22

Hãy thử điều này trước trường có thể chỉnh sửa đầu tiên của bạn:

<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

Thêm vào sau trong onCreatephương thức:

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

1
Điều này không bỏ tập trung vào trường văn bản: nó chỉ ẩn bàn phím. Bạn vẫn sẽ nhận được một gợi ý bị đẩy ra khỏi trường và bất kỳ bộ chọn trạng thái màu nào cũng sẽ hiển thị trạng thái "tập trung = đúng".
A. Rager

17

Vì tôi không muốn làm ô nhiễm XML bằng thứ gì đó liên quan đến chức năng, tôi đã tạo phương thức này "trong suốt" đánh cắp tiêu điểm từ chế độ xem có thể lấy nét đầu tiên và sau đó đảm bảo xóa chính nó khi cần thiết!

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

Muộn, nhưng có thể hữu ích. Tạo một EditText giả ở đầu bố cục của bạn sau đó gọi myDummyEditText.requestFocus()vàoonCreate()

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

Điều đó dường như hành xử như tôi mong đợi. Không cần xử lý các thay đổi cấu hình, v.v. Tôi cần điều này cho một Hoạt động với TextView dài (hướng dẫn).


Tại sao không chỉ làm điều này với chế độ xem gốc?
CJBS


13

Vâng, tôi đã làm điều tương tự - tạo bố cục tuyến tính 'giả', lấy trọng tâm ban đầu. Hơn nữa, tôi đặt ID tiêu điểm 'tiếp theo' để người dùng không thể lấy nét nữa sau khi cuộn một lần:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

rất nhiều công việc chỉ để thoát khỏi sự tập trung vào một cái nhìn ..

Cảm ơn


12

Đối với tôi, những gì hoạt động trên tất cả các thiết bị là thế này:

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

Chỉ cần đặt nó dưới dạng một khung nhìn trước khung nhìn tập trung có vấn đề, và đó là nó.


10

Điều đơn giản nhất tôi đã làm là tập trung vào một chế độ xem khác trong onCreate:

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

Điều này đã dừng bàn phím mềm đi lên và không có con trỏ nhấp nháy trong EditText.


10

Đây là giải pháp hoàn hảo và dễ dàng nhất. Tôi luôn sử dụng điều này trong ứng dụng của mình.

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

Điều này không bỏ tập trung vào trường văn bản: nó chỉ ẩn bàn phím. Bạn vẫn sẽ nhận được một gợi ý bị đẩy ra khỏi trường và bất kỳ bộ chọn trạng thái màu nào cũng sẽ hiển thị trạng thái "tập trung = đúng".
A. Rager

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

Viết mã này bên trong Manifesttệp ở Activitynơi bạn không muốn mở bàn phím.

android:windowSoftInputMode="stateHidden"

Tệp kê khai:

 <?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
Điều này không bỏ tập trung vào trường văn bản: nó chỉ ẩn bàn phím. Bạn vẫn sẽ nhận được một gợi ý bị đẩy ra khỏi trường và bất kỳ bộ chọn trạng thái màu nào cũng sẽ hiển thị trạng thái "tập trung = đúng".
A. Rager

7

Tại onCreateHoạt động của bạn, chỉ cần thêm sử dụng clearFocus()vào phần tử EditText của bạn. Ví dụ,

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

Và nếu bạn muốn chuyển hướng sự tập trung sang một yếu tố khác, hãy sử dụng requestFocus()nó. Ví dụ,

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

6

Tôi sử dụng đoạn mã sau để ngăn EditText đánh cắp tiêu điểm khi nhấn nút của tôi.

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

Về cơ bản, ẩn văn bản chỉnh sửa và sau đó hiển thị lại. Điều này làm việc với tôi vì EditText không trong tầm nhìn nên không quan trọng là nó có hiển thị hay không.

Bạn có thể thử ẩn và hiển thị nó liên tiếp để xem liệu điều đó có giúp nó mất tập trung không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.