2010-09-30 29 views
5

Tôi muốn có bàn phím số có nút đi hoặc nút đã đóng và thực hiện một lớp tính toán. Nhờ một mẹo từ phần mềm phổ biến về nơi để bắt đầu tôi đã làm việc này đẹp trên giả lập. Sau đó, tôi đến để tải nó vào HTC mong muốn của tôi để thử nghiệm và nó không hoạt động ở tất cả. Tôi chắc chắn nó phải được vì HTC cảm giác có ime riêng của nó nhưng chắc chắn phải có một cách để thực hiện công việc này trên điện thoại HTC? Bất kỳ ai khác đã xoay sở để giải quyết vấn đề này?Android: điều khiển phím chức năng trên HTC desire

Trả lời

14

Tôi có thể sao chép những gì tôi nghĩ bạn đang thấy trên HTC Incredible.

Không phải tất cả bàn phím mềm đều sẽ hỗ trợ nút tác vụ IME. Một số, như bàn phím "mềm" Graffiti, có thể không có nút nào cả, hãy để một mình nút hành động IME. Ngay cả các Compatibility Definition Document không nói gì về yêu cầu một nút hành động cho bàn phím được cung cấp với một thiết bị.

Do đó, bạn không nên dựa vào nút tác vụ IME. Nếu nó ở đó, người dùng có thể sử dụng nó. Tuy nhiên, luôn luôn có một số phương tiện khác để hoàn thành bất kỳ mục tiêu nào của bạn.

+0

vì vậy aree bạn nói cách tiếp cận tốt nhất của tôi là tạo bàn phím của riêng tôi, chứ không phải IME mà là chế độ xem? Tôi đã có một nút tính toán tại một thời điểm nhưng nó được bao phủ bởi bàn phím. Thật khó chịu khi phím thao tác trên bàn phím HTC chuyển sang màu xanh lục khi nó được đặt thành loại GO rất tuyệt vời để nó hiểu rằng nó chỉ trả về 0 trong actionid. Im bắt đầu nghĩ rằng việc tạo ra một bàn phím nhỏ bản thân mình là con đường để đi nhưng đã cố gắng để tránh nó? Đó có phải là cách tiếp cận tốt nhất? Có bất kỳ tài liệu nào về thực hành tốt nhất của Android có thể đọc được không? –

+0

Tôi đã đăng ký cuối cùng bằng cách này. ước gì tôi có thể đủ khả năng để tham dự một trong các khóa học của bạn ở London, sẽ khá hữu ích. thật đáng buồn là tôi đang cố gắng tìm hiểu Java và android cùng một lúc bằng cách dùng thử và lỗi –

+0

@Dream Architect: "Vì vậy, aree bạn nói cách tiếp cận tốt nhất của tôi là tạo bàn phím của riêng mình chứ không phải IME mà là chế độ xem?" - đối với một ứng dụng thông thường, bạn chỉ cần có nút hành động tương đương như một phần của hoạt động. Đối với một máy tính, bạn sẽ cần "phím" khác anyway (+, -, *, /, vv), và vì vậy bạn có thể cần bảng điều khiển nút của riêng bạn. Trong trường hợp đó, tôi sẽ đặt các phím số trong bảng điều khiển nút đó, giống như một máy tính thông thường có chúng. – CommonsWare

11

Tôi đang phát hiện xem nút DONE/GO/RETURN đã được nhấn bằng cách sử dụng onEditorActionListener chưa, nhưng kiểm tra các tùy chọn IME và KeyEvents để bao gồm bàn phím HTC cũng như bất kỳ bàn phím nào chấp nhận tùy chọn IME.

(mã này hoạt động cho bàn phím Incredible HTC cũng bất kỳ bàn phím mà có các tùy chọn IME)

EditText.setOnEditorActionListener(new TextView.OnEditorActionListener(){ 
    public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event){ 
     if(actionId == EditorInfo.IME_ACTION_DONE 
      || actionId == EditorInfo.IME_NULL 
      || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){ 

      //Do something in here 
      return true; 
     } else { 
      return false; 
     } 
    } 
}); 
+0

Tôi sợ rằng, với đoạn mã này, phần ** // Do something here ** sẽ được thực thi hai lần .. bạn có thể kiểm tra điều đó không? – Konsumierer

+0

Cảm ơn Asha .... đã làm việc cho tôi – hemu

+0

cho tôi nó bị ERROR/AndroidRuntime (26336): CHỨC NĂNG CHẤT LƯỢNG: chính java.lang.NullPointerException ------ trên chuỗi "if (actionId == ..." – djdance

2

Tôi đã sử dụng một EditText với inputType = "number" và giải quyết vấn đề bằng cách thay đổi giải pháp Asha của:

private TextView.OnEditorActionListener numberEnterListener = new TextView.OnEditorActionListener(){ 
     public boolean onEditorAction(TextView tv, int actionId, KeyEvent event){ 
      if(actionId == EditorInfo.IME_ACTION_DONE 
       || actionId == EditorInfo.IME_NULL 
       || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){ 

       tv.clearFocus(); 

       //Stupid keyboard needs to be closed as well 
       InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(tv.getWindowToken(), 0); 

       return true; 
      } else { 
       return false; 
      } 
     } 
    }; 

Tiêu điểm đã bị xóa để dừng hiển thị bàn phím số. Sự cần thiết được yêu cầu bởi vì một bàn phím mềm vẫn còn hiện diện ngay cả sau khi xóa tập trung.

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