2013-02-09 45 views
5

Tôi đã đọc xung quanh về các câu hỏi về cách đặt đối tượng cần tập trung tuy nhiên dường như tôi không tìm được câu trả lời cho những gì tôi đang cố gắng làm.cách tập trung chỉnh sửa văn bản

Sử dụng On Focus Listener Tôi đã làm như sau:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (Ehour.getText().length()<=0) { 
        Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        Calendar nohour = Calendar.getInstance(); 
        Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 
Ehour.setFocusable(true); 
Ehour.requestFocus(); 


       } 
      } 
     }}); 

Tôi đã thử những gợi ý từ bài viết sau:

Tôi đọc bài này nhưng sử dụng các đề xuất này cũng không có vẻ công việc: How to set focus on a view when a layout is created and displayed?

Mục tiêu của tôi là khi tiêu điểm văn bản chỉnh sửa bị mất, tôi cần phải quay lại nếu mục nhập không hợp lệ.

Hơn nữa theo các gợi ý được đưa ra bởi Bill Mote Tôi cũng đã cố gắng:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (Ehour.getText().length()<=0) { 
        Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        Calendar nohour = Calendar.getInstance(); 
        Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 

        ((EditText)arg0).requestFocus(); 

       } 
      } 
     }}); 

** EDIT ** Tôi thậm chí thêm vào dòng dưới đây trước khi requestFocus():

((EditText)arg0).setFocusable(true); 

*** CHỈNH SỬA ****

Đã thử từ bài đăng này: Stop EditText from gaining focus at Activity startup

Những thay đổi sau đây: Trong bố trí tại tiêu đề bố trí đầu tiên tôi nói thêm:

android:id="@+id/enterdata" 
android:descendantFocusability="beforeDescendants" 
android:focusableInTouchMode="true" 

Sau đó, trong OnChangeFocusListener Tôi đã làm điều này:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (((EditText)arg0).getText().length()<=0) { 
        Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        Calendar nohour = Calendar.getInstance(); 
        ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 
        findViewById(R.id.enterdata).requestFocus(); 
        ((EditText)arg0).setFocusable(true); 
        ((EditText)arg0).setFocusableInTouchMode(true); 
        ((EditText)arg0).requestFocus(); 

       } 
      } 
     }}); 

Tuy nhiên tôi vẫn nhận được hành vi tương tự như trước, văn bản chỉnh sửa mà trọng tâm đi đến phần còn lại theo cách đó nhưng văn bản chỉnh sửa mà tôi muốn trọng tâm chuyển sang trông tập trung nhưng dường như nó không thể được sử dụng như thể nó vẫn đang chờ để được tập trung.

*** EDIT ****

Mã dưới đây theo bài gần đây cho thấy trên stackoverflow nơi người dùng hỏi những câu hỏi đang gặp vấn đề tương tự như tôi:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (((EditText)arg0).getText().length()<=0) { 

        Calendar nohour = Calendar.getInstance(); 
        ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 
        if (((EditText)arg0).requestFocus()) { 
         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
         Emin.clearFocus(); 
         Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        } 


       } 
      } 
     }}); 
+0

Nhìn vào bài đăng này: http: // stackoverflow.com/questions/1555109/stop-edittext-from-gain-focus-at-activity-startup Tôi đã thử trên các câu trả lời mà tôi sẽ thêm vào câu hỏi của mình – TimCS

+0

Tôi thậm chí đã cố gắng mã hóa cứng tất cả các hộp văn bản chỉnh sửa để xóa tập trung và đặt setFocusable và setFocusableInTouchMode thành false nhưng hành vi vẫn giống như văn bản chỉnh sửa mà tôi muốn tiêu điểm được tập trung nhưng mọi thao tác nhập sẽ kết thúc trong văn bản chỉnh sửa mà người dùng sẽ chuyển sang !!!!! CỨU GIÚP!!!! – TimCS

+0

Nó xuất hiện trong bài đăng này: http: //stackoverflow.com/questions/14327412/set-focus-on-edittext? Rq = 1 người dùng có cùng một vấn đề và có vẻ như nó không được giải quyết, tuy nhiên tôi sẽ để thử các gợi ý ở đây để xem họ có làm việc cho tôi không? – TimCS

Trả lời

3

Hãy thử arg0.requestFocus().

Không chắc chắn nếu View thực hiện requestFocus() khỏi đầu của tôi để bạn có thể phải bỏ ... ((EditText) arg0).requestFocus().

+0

Xin lỗi đã nói trong câu hỏi của tôi, cố gắng như bạn đã đề xuất với kết quả tương tự như đã đề cập – TimCS

+0

Hành vi của hai văn bản chỉnh sửa xuất hiện lạ với tôi trong đó tôi muốn di chuyển trở lại trông tập trung và dường như có con trỏ dựa vào nó nhưng một trong đó trọng tâm đã chuyển sang cũng dường như giống nhau, ngay cả khi tôi "bấm" trở lại vào cái tôi muốn sử dụng văn bản chỉnh sửa mà nó thay đổi không phải là cái này – TimCS

+0

Dường như với tôi rằng có dường như bây giờ là cách xung quanh này. Do đó, tôi sẽ phải thử và thực hiện kiểm tra xác nhận tại thời điểm chấp nhận bản ghi thay vì kiểm tra nó tại thời điểm người dùng di chuyển ra khỏi trường. Đây là trên Android 2.2 nên tôi không chắc liệu nó có kéo dài đến 4 hay không – TimCS

0
new OnEditorActionListener(){ 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     editText.requestFocus(); 
     //used ******* return true ****** 
     return **true**; 
    } 
} 
0

Tôi có vấn đề này cùng, đây mã mà tôi sử dụng để giải quyết:

EditText editText = (EditText) findViewById(R.id.myTextViewId); 
editText.requestFocus(); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

Best Regards,

Các vấn đề liên quan