본문 바로가기
안드로이드 자바

[Java][Android] 안드로이드 웹브라우저 화면 구성

by teamnova 2021. 11. 15.
728x90

이번시간에는 주소를 입력받고 어플리케이션 안에서 웹브라우저처럼 화면을 띄우는 방법을 공부해 보겠습니다.

 

우선 AndroidManifest.xml 파일에

<uses-permission android:name="android.permission.INTERNET"/>,

<application> 태그 안에

android:usesCleartextTraffic="true"를 추가해 줍니다.

 

그 후 화면을 구성해주겠습니다.

이렇게 주소를 입력할수 있는 EditText와 버튼을 추가하고 화면 하단에는 WebView를 이용하여 화면을 구성해 줍니다.

 

그 후에 버튼 클릭 이벤트 코드를 작성해 줍니다.

버튼을 클릭하면 위에 입력한 텍스트를 가져와서 webView에 loadUrl메서드로 화면에 띄워줍니다.

        searchButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String urlStr = urlInput.getText().toString().trim();
                if (urlStr.length() < 1) {
                    Toast.makeText(getApplicationContext(), "사이트 주소를 먼저 입력하세요.", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (!urlStr.startsWith("http://")) {
                    urlStr = "http://" + urlStr;
                    urlInput.setText(urlStr);
                }

                loadRequested = true;
                webview.loadUrl(urlStr);

            }
        });

 

 

 

아래는 전체 코드입니다.

 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/searchLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="#ffffffff"
        >
        <ImageView
            android:id="@+id/handleButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:src="@drawable/handle"
            android:visibility="gone"
            />
        <RelativeLayout
            android:id="@+id/urlLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="4dp"
            android:background="#aaaaaaaa"
            >
            <EditText
                android:id="@+id/urlInput"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toLeftOf="@+id/searchButton"
                android:inputType="textUri"
                />
            <Button
                android:id="@+id/searchButton"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_alignBaseline="@+id/urlInput"
                android:text="이동"
                />
        </RelativeLayout>
    </FrameLayout>
    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/searchLayout"
        />

</RelativeLayout>

 

MainActivity.java

public class MainActivity extends AppCompatActivity {public static final String TAG = "MainActivity";

    WebView webview;
    EditText urlInput;

    ImageView handleButton;
    RelativeLayout urlLayout;

    Animation translateUpsideAnim;
    Animation translateDownsideAnim;

    boolean isUrlInputOpen = false;

    boolean loadRequested = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webview = findViewById(R.id.webview);

        WebSettings webSettings = webview.getSettings();
        webSettings.setSaveFormData(false);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setSupportZoom(true);

        webview.setWebViewClient(new WebViewClient() {
            public void onPageFinished(WebView view, String url) {
                Log.d(TAG, "onPageFinished() called.");

                // start animation
                if (loadRequested) {
                    urlLayout.startAnimation(translateUpsideAnim);
                    loadRequested = false;
                }
            }
        });


        urlInput = findViewById(R.id.urlInput);
        Button searchButton = findViewById(R.id.searchButton);
        searchButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String urlStr = urlInput.getText().toString().trim();
                if (urlStr.length() < 1) {
                    Toast.makeText(getApplicationContext(), "사이트 주소를 먼저 입력하세요.", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (!urlStr.startsWith("http://")) {
                    urlStr = "http://" + urlStr;
                    urlInput.setText(urlStr);
                }

                loadRequested = true;
                webview.loadUrl(urlStr);

            }
        });

        handleButton = findViewById(R.id.handleButton);
        handleButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                handleButton.startAnimation(translateUpsideAnim);
            }
        });

        urlLayout = findViewById(R.id.urlLayout);

        translateUpsideAnim = AnimationUtils.loadAnimation(this, R.anim.translate_upside);
        translateDownsideAnim = AnimationUtils.loadAnimation(this, R.anim.translate_downside);

        SlidingPageAnimationListener animListener = new SlidingPageAnimationListener();
        translateUpsideAnim.setAnimationListener(animListener);
        translateDownsideAnim.setAnimationListener(animListener);

        isUrlInputOpen = true;
    }

    private void showHandleButton() {
        handleButton.setVisibility(View.VISIBLE);
        urlLayout.setVisibility(View.GONE);

        isUrlInputOpen = false;
    }

    private void showUrlInput() {
        handleButton.setVisibility(View.GONE);
        urlLayout.setVisibility(View.VISIBLE);

        isUrlInputOpen = true;
    }

    private class SlidingPageAnimationListener implements Animation.AnimationListener {
        public void onAnimationEnd(Animation animation) {
            if (isUrlInputOpen) {
                showHandleButton();
            } else {
                showUrlInput();
            }
        }

        public void onAnimationRepeat(Animation animation) {
        }

        public void onAnimationStart(Animation animation) {
        }
    }

}