2

편집 : 나는 page for this 오류를 보았습니다. 답변이 없습니다. 아직 해결되지 않은 시스템 버그 인 Android 인 것 같습니다.WebView DialogFragment에서 소프트 키보드가 터치로 표시되지 않습니다.

처음에 나는 this similar question.을 언급했지만 그 해결책은 내 해결책이 아닌 것 같습니다. 나는 WebView만을 포함하는 DialogFragment을 가지고있다. WebView의 모든 내용은 손댈 수있는 것 같습니다. 그러나 문제는 양식 필드를 터치하면 커서가 나타나지만 소프트 키보드가 나타나지 않는다는 것입니다.

여기 내 코드는 DialogFragment 클래스 내에서 onCreateDialog() 방법입니다 :

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    WebView web = new WebView(getActivity()); 
    web.loadUrl(InternetDialog.this.url); 
    web.setFocusable(true); 
    web.setFocusableInTouchMode(true); 
    web.requestFocus(View.FOCUS_DOWN); 
    web.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
       case MotionEvent.ACTION_UP: 
        if (!v.hasFocus()) { 
         v.requestFocus(); 
        } 
        break; 
      } 
      return false; 
     } 
    }); 

    builder.setView(web); 
    return builder.create(); 
내가 양식 필드를 선택하면 소프트 키보드가 표시 얻을 수있는 방법

?

답변

11

이것은 아직 해결되지 않은 시스템 버그입니다. More information can be found here.이 버그는 사람마다 다르게 발생하므로 다른 해결책이있는 것 같습니다. 내 특별한 경우에는 단 하나의 해결책이 있습니다 (다른 모든 것을 시도한 것처럼). 해결 방법 : onCreateDialog 방법에 DialogFragment 클래스, 그리고

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

<EditText 
    android:id="@+id/edit" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:focusable="true" 
    android:visibility="invisible"/> 

<WebView 
    android:id="@+id/web" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 

</RelativeLayout> 

:

첫째, 나는 Dialog 레이아웃을 생성

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater = LayoutInflater.from(getActivity()); 
    View v = inflater.inflate(R.layout.internet_dialog, null); 

    WebView web = (WebView) v.findViewById(R.id.web); 
    EditText edit = (EditText) v.findViewById(R.id.edit); 
    edit.setFocusable(true); 
    edit.requestFocus(); 
    web.loadUrl(url); 
    this.webView = web; 
    builder.setView(v); 

    return builder.create(); 

그리고 그게 모든 있었다입니다. 이것이 효과가 있었던 이유는 제가 초점을 둔 EditText을 보이지 않게 만들었 기 때문입니다. EditText은 보이지 않으므로 WebView을 방해하지 않으며 초점이 맞기 때문에 소프트 키보드를 적절하게 위로 당깁니다. 비슷한 상황에 처한 사람들에게 도움이되기를 바랍니다.

+0

나를 위해이 해킹과이 작업을 모두 수행해야했습니다. http://stackoverflow.com/a/4977247/445348 – cottonBallPaws

관련 문제