2012-05-09 12 views
39

Khi đoạn của tôi bắt đầu, tôi muốn tập trung vào văn bản/cho phép người dùng bắt đầu nhập vào đó. Tôi có thể tập trung vào nó với requestFocus(), nhưng tôi không thể lấy bàn phím để hiển thị.Hiển thị bàn phím cho văn bản khi đoạn bắt đầu

Tôi đã thử cả hai điều này:

edit = (EditText) view.findViewById(R.id.search); 
edit.requestFocus(); 
InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
imgr.showSoftInput(edit, 0); 

edit = (EditText) view.findViewById(R.id.search); 
InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
imgr.showSoftInput(edit, 0); 
edit.requestFocus(); 

Làm thế nào tôi có thể nhận bàn phím để hiển thị lên cho EditText?

+0

Đây là những gì làm việc cho tôi - [http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629](http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629) – v01d

+0

Danh tiếng của tôi là quá thấp để bình luận e câu hỏi. Tôi đã trả lời [ở đây] (http://stackoverflow.com/a/43807917/5390932) với một phương pháp để kiểm soát thời điểm hiển thị hoặc ẩn bàn phím – Catapimba

Trả lời

77

Tính năng này có hoạt động không?

imgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
+0

Nếu bạn gặp sự cố khi đóng, hãy sử dụng một phương pháp khác [những phương pháp này] (http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#hideSoftInputFromInputMethod%28android.os.IBinder,%20int%29) – Sam

+2

Điều này giống như một cách giải quyết khác. Các thủ tục chính xác nên được hoặc là OP đề nghị hoặc để gọi 'imgr.showSoftInput (getView(), InputMethodManager.SHOW_IMPLICIT)'. Chuyển đổi sẽ thực sự * đóng * bàn phím nếu nó đã được mở. Các giải pháp được mô tả là duy nhất tôi đã nhận được để làm việc mặc dù, do đó, đây là một lỗi trong khuôn khổ? Giải pháp hay giải thích tốt hơn sẽ được đánh giá cao. – Nilzor

+0

@Nilzor Tôi biết bình luận của bạn là một chút cũ, nhưng gần đây đã có cùng một vấn đề và tìm thấy báo cáo lỗi này https://code.google.com/p/android/issues/detail?id=25812. Có thể có liên quan, chưa thấy nhiều từ nhóm Android trên nó mặc dù, vì vậy không chắc chắn nó có ưu tiên. – MikeIsrael

0

Như Nilzor nói làm việc này

imgr.showSoftInput(getView(), InputMethodManager.SHOW_IMPLICIT) 

và tôi đồng ý đó là một giải pháp tốt nhất so với toogleSoftInput

+1

Không hoạt động cho mọi trường hợp. – cesards

6

Bạn có thể thử này

@Override 
public void onResume() { 
    super.onResume(); 
    edit.post(new Runnable() { 
     @Override 
     public void run() { 
      edit.requestFocus(); 
      InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imgr.showSoftInput(edit, InputMethodManager.SHOW_IMPLICIT); 
     } 
    }); 
} 
+0

Giải pháp này làm việc với tôi mặc dù tôi không cần phải làm điều edit.post, tôi chỉ thêm 3 dòng bên trong chạy của bạn() vào phương thức tiếp tục trực tiếp. –

+1

Không hoạt động đối với tất cả các trường hợp. – cesards

0

Một cách khác để làm cho bàn phím mở khi đoạn của bạn bắt đầu là gọi requestFocus() trong onCreateView và phản ứng accor dingly bằng cách mở bàn phím nếu và chỉ khi các EditText là tập trung.

if(this.editText.requestFocus()) 
{ 
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
} 
+1

Không hoạt động cho mọi trường hợp. – cesards

0
@Override 
public void onHiddenChanged (boolean hidden) 
{ 
    super.onHiddenChanged(hidden); 

    if(hidden) 
    { 
     hideKeyboard(yourView); 
    } 
    else 
    { 
     toggleKeyboard(yourView); 
    } 
} 

    public static void toggleKeyboard(View v) 
{ 
    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
    v.requestFocus(); 

    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS); 
} 

public static void hideKeyboard(View v) 
{ 
    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 

    imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 
-1

bài viết này đã giúp tôi

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) 
{ 
    View view = inflater.inflate(R.layout.fragment_edit_name, container); 
    editText = (EditText) view.findViewById(R.id.txt_yourName); 
    editText.requestFocus(); 
    getDialog().getWindow().setSoftInputMode(
         LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
    return view; 
} 

https://turbomanage.wordpress.com/2012/05/02/show-soft-keyboard-automatically-when-edittext-receives-focus/

2

Kể từ khi sử dụng showSoftInput không làm việc cho tất cả các trường hợp và sau khi thử một số các giải pháp đề cập ở đây, như:

if (binding.account.requestFocus()) { 
    getActivity().getWindow() 
     .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
} 

Cuối cùng tôi đã làm cho nó làm việc sử dụng:

if (binding.account.requestFocus()) { 
    ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(
     InputMethodManager.SHOW_FORCED, 
     InputMethodManager.HIDE_IMPLICIT_ONLY 
); 
} 

Từ:

binding.account.requestFocus() 

chỉ yêu cầu sự tập trung cho EditText (nó không mở bàn phím)

((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(
     InputMethodManager.SHOW_FORCED, 
     InputMethodManager.HIDE_IMPLICIT_ONLY 
); 

là chỉ giải pháp dường như hoạt động chính xác để hiển thị bàn phím (và được chọn nhiều nhất)

Chúc may mắn!:-)

0

Đơn giản chỉ cần sử dụng thêm 2 dây chuyền sẽ làm việc như một nét duyên dáng:

Nếu sử dụng XML

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

khác trong Java:

view.setFocusableInTouchMode(true); 
view.requestFocus();