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) {
}
}
}
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 리사이클러뷰 접기, 펴기 (0) | 2021.11.18 |
---|---|
[Java][Android] 터치 좌표 출력하기 (0) | 2021.11.17 |
[JAVA][Android] 비트맵 string으로 변환하기 (0) | 2021.11.14 |
[JAVA][Android] 랜덤숫자 생성하고 공유하는 앱 만들기 (0) | 2021.11.12 |
[JAVA][Android] Splash 화면 만들기 (0) | 2021.11.10 |