스마트기기개발관련/안드로이드 개발

WebView 포커스 관련 ~ EditText 와 WebView 혼용 사용시 포커스 문제

AlrepondTech 2020. 9. 19. 04:35
반응형

 

 

=================================

=================================

=================================

 

 

 

출처: http://stackoverflow.com/questions/4293965/android-webview-focus-problem

I am fighting with focus management of WebView: WebView messes with focus management of classic components. Here is a simple application with just an EditBox and a WebView in it which loads Google!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:and="http://schemas.android.com/apk/res/android"
              xmlns:webtag="http://schemas.android.com/apk/res/com.webtag"
              and:orientation="vertical" and:layout_width="fill_parent" and:layout_height="fill_parent">
    <LinearLayout and:id="@+id/HorizontalScrollView02"
                  and:layout_width="fill_parent" and:layout_height="wrap_content">
        <EditText and:id="@+id/EditText01"
                  and:layout_width="wrap_content" and:layout_height="wrap_content"
                  and:text="@+id/EditText01"/>
    </LinearLayout>
    <WebView and:id="@+id/uiContent"
             and:layout_weight="1"
             and:layout_width="fill_parent"
             and:layout_height="fill_parent"/>
</LinearLayout>

 

And here is the Java code:

public class WebtagActivity extends Activity
{
    // UI components.
    private WebView mContent;
    private EditText mUrl;


    @Override
    public void onCreate (Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mContent = (WebView) findViewById(R.id.uiContent);
        mContent.getSettings().setJavaScriptEnabled(true);
        mContent.loadUrl("http://www.google.fr/");
    }
}

 

Based on this very simple example, it's impossible to get focus on the WebView (i.e. the google search terms input box)! However when adding "mContent.requestFocus();" during initialization, things get better. I can switch from my EditText to my WebView if I click on WebView first only... But behaviour gets soon very "erratic", with WebView sometimes not getting focus when touching it, sometimes getting it but staying with a focus rectangle around WebView fields (orange or green depending on your phone) after another touch to go back on EditText component (in which I can write text)!

Anyway, a solution I found is to add a touchListener and request focus when clicking on a WebView:

 

mContent.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; 
            }
    });

 

This solves almost all problems (switching from classic components to WebView and writing text) except one: WebView keeps the focusRectangle (green or orange) around fields whether it has focus or not. In the below screenshot, my EditText has the focus and receive text but WebView still looks like it has focus. I tried clearFocus but that doesn't do anything:

 

 

 

=================================

=================================

=================================

 

 

 

출처: http://www.androidpub.com/721579

 

안녕하세요.

 

현재 EditText와 WebView가 하나의 레이아웃안에 있는 상태입니다.

초기 포커스가 아무곳도 가지 않은 상태에서 WebView안의 페이지폼에 있는 입력컨트롤(ex - input type text등)

에 터치하면 입력모드로 전환되면서 소프트 키보드가 올라오고 정상적으로 입력이 됩니다.

 

그런데 EditText에서 포커스를 가지고 있는 상태에서 WebView안의 입력 컨트롤을 터치시

실제 포커스가 이동하여 해당 입력컨트롤에 포커스가 가지않고 커서만 깜박입니다.

 

그상태에서 타이핑을 하면 EditText에 입력이 됩니다.

소프트 키보드에서 다음을 누르면 넘어가기는 하는데 WebView안에 해당 입력컨트롤을

터치시 해당 입력컨트롤로 포커스를 완전히 넘기고 싶지만 실력 부족으로 1주일째 해메고

있습니다.

 

조언 부탁드립니다.

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

목록

엮인글 주소 : http://www.androidpub.com/index.php?document_srl=721579&act=trackback&key=c6c

 

2010.08.28 01:45:56

고포릿

(추천: 1 / 0)

 

저같은 경우 다른 곳에서 
WebView에 OnFocusChanged() 리스너를 구현해서 WebView가 focus를 얻으면

  EditText.getBackground().setState(new int[]{android.R.attr.state_first});

로 변경 처리했었습니다.
단 해당 EditText의 Selector 로 default, focus, pressed 등의 상태 정보가 있어야 에러없이 사용합니다.

2010.08.31 16:35:22

시우애비

말씀감사합니다. 덕분에 해결되었습니다~~

 

 

 

=================================

=================================

=================================

 

 

반응형