Đặt tiêu điểm ban đầu trong ứng dụng Android


86

Trong ứng dụng Android của tôi, nó sẽ tự động lấy nét đầu tiên Buttontôi có trong bố cục của mình, tạo cho nó một đường viền màu cam. Làm cách nào để tôi có thể đặt tiêu điểm ban đầu tốt hơn trong XML, và điều này có thể được đặt thành không?

Câu trả lời:


159

Bạn có thể sử dụng requestFocusthẻ:

<Button ...>
  <requestFocus />
</Button>

Tôi thấy thật kỳ lạ khi nó tự động lấy nét một trong các nút của bạn, tôi đã không quan sát thấy hành vi đó trong bất kỳ chế độ xem nào của mình.


Vâng, nó đã xảy ra với hai ứng dụng của tôi bây giờ. Tôi đoán tôi có thể requestFocus vào một phần tử không thay đổi như TextView hoặc điều này sẽ không được phép?
stealthcopter

1
@stealthcopter: bạn có thể cho tôi biết bạn đang sử dụng phiên bản Android nào không. Tôi đang sử dụng 2.1 & 2.2, nhưng requestFocus không hoạt động.
anticafe

Tôi đã sử dụng nó trên tất cả các phiên bản, nhưng vấn đề tôi gặp phải dường như tự nó biến mất nên tôi chưa tìm hiểu nhiều.
stealthcopter

19
Tôi đã thử cách tiếp cận XML, tôi đã thử cách tiếp cận có lập trình. Tuy nhiên, EditText vẫn giữ được tiêu điểm. RẤT PHIỀN PHỨC !
Ai đó ở đâu đó vào


64

@Someone Ở đâu đó, tôi đã thử tất cả những cách trên đều không có kết quả. Bản sửa lỗi tôi tìm thấy là từ http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android . Về cơ bản, bạn cần tạo một bố cục vô hình ngay phía trên Nút có vấn đề:

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

Tôi đã có thể tập trung vào AlertDialog và việc bật chế độ cảm ứng tiêu điểm đã giúp tôi làm đúng. Về cơ bản, đây là cách thực hiện: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (true); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar

2
Cảm ơn bạn! Đây là giải pháp duy nhất hiệu quả trong trường hợp của tôi. Mặc dù tôi đã sử dụng nó hơi khác; Tôi đặt nội dung tiêu điểm trong một RelativeLayoutcó chứa EditText.
kaka

1
Với Android P, nền tảng sẽ có những thay đổi sau: "Các chế độ xem có vùng 0 (chiều rộng hoặc chiều cao là 0) không thể lấy tiêu điểm được nữa. Ngoài ra, các hoạt động không còn chỉ định tiêu điểm ban đầu một cách hoàn toàn trong chế độ cảm ứng. Thay vào đó, nó sẽ tăng cho bạn để yêu cầu rõ ràng tiêu điểm ban đầu, nếu muốn. "
AustrianDude

28

Đặt cả hai :focusable:focusableInTouchModethành true và gọi requestFocus. Nó thực hiện thủ thuật.


Có đây là giải pháp thực sự để sửa chữa nó. Cảm ơn Anders
gokhansari

23

Tôi thấy điều này làm việc tốt nhất cho tôi.

Trong AndroidManifest.xml, hãy <activity> elementthêmandroid:windowSoftInputMode="stateHidden"

Điều này luôn ẩn bàn phím khi nhập hoạt động.


Dễ dàng và sạch sẽ!
SHADOW.NET

tuyệt vời ... điều này rất ấn tượng!
gumuruh

11

Tôi chỉ thêm dòng mã này vào onCreate():

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

Vấn đề đã được giải quyết.


Hoạt động trong Android 2.3.3.
Gaurav Agarwal,

7

Sử dụng mã bên dưới,

TableRow _tableRow =(TableRow)findViewById(R.id.tableRowMainBody);
tableRow.requestFocus();

Cần làm việc.


3

@Someone Somewhere Tôi đã sử dụng điều này để xóa tiêu điểm:

editText.clearFocus();

và nó giúp


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.