반응형
웹뷰를 사용해서 간단하게 웹페이지를 띄우는 예제를 만들어보겠습니다.
1. AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
인터넷 기능을 사용하기 위해서 인터넷 권한을 줘야 합니다.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
android:usesCleartextTraffic="true" 를 추가해줍니다.
추가하셔야 err_name_not_resolved 에러가 뜨지 않습니다.
더 자세한 사항은 링크를 참고해주세요
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/et"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:hint="http://"
android:imeOptions="actionSearch"
android:maxLines="1"
android:inputType="textUri"/>
<Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:visibility="gone"
android:text="이동"/>
</LinearLayout>
<WebView
android:id="@+id/wv"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</LinearLayout>
3. menu_main.xml
res폴더 안에 menu폴더를 만들고 menu_main.xml 파일을 추가해줍니다.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_back"
android:icon="@drawable/ic_arrow_back"
android:title="뒤로가기"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_forward"
android:icon="@drawable/ic_arrow_forward"
android:title="앞으로가기"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_refresh"
android:icon="@drawable/ic_refresh"
android:title="새로고침"
app:showAsAction="ifRoom" />
</menu>
4. MainActivity.java
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText et;
private WebView wv;
private Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = findViewById(R.id.et);
wv = findViewById(R.id.wv);
bt = findViewById(R.id.bt);
WebSettings webSettings = wv.getSettings();
//자바 스크립트 사용을 할 수 있도록 합니다.
webSettings.setJavaScriptEnabled(true);
wv.setWebViewClient(new WebViewClient(){
//페이지 로딩이 끝나면 호출됩니다.
@Override
public void onPageFinished(WebView view,String url){
Toast.makeText(MainActivity.this,"로딩 끝", Toast.LENGTH_SHORT).show();
}
});
//
et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_SEARCH){
//bt의 onClick을 실행
bt.callOnClick();
//키보드 숨기기
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(),0);
return true;
}
return false;
}
});
}
public void onClick(View view) {
String address = et.getText().toString();
//http://를 넣지 않고 웹주소를 입력했을 경우 http://를 추가해줍니다.
//예를 들어 naver.com을 검색했을때 http://naver.com이 입력되도록 해줍니다.
if(!address.startsWith("http://")){
address = "http://" + address;
}
//웹뷰 로드
wv.loadUrl(address);
}
@Override
public void onBackPressed() {
//뒤로가기 버튼을 눌렀을때 웹뷰가 뒤로가기가 가능하다면 뒤로가기를 해줍니다.
if(wv.canGoBack()){
wv.goBack();
}else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
//뒤로가기가 가능할때 뒤로가기
case R.id.action_back:
if(wv.canGoBack()){
wv.goBack();
}
return true;
//앞으로가기가 가능할때 앞으로가기
case R.id.action_forward:
if(wv.canGoForward()){
wv.goForward();
}
return true;
//새로고침
case R.id.action_refresh:
wv.reload();
return true;
}
return super.onOptionsItemSelected(item);
}
}
반응형
'안드로이드 > 코드' 카테고리의 다른 글
[안드로이드] QR코드 인식해서 로또 당첨 조회 하기 (0) | 2020.01.07 |
---|---|
[온라인마케팅] 애드센스 크롤러 액세스 등록 (0) | 2020.01.07 |
[안드로이드] 커스텀 토스트(Toast), 스낵바(Snackbar) 사용하기 (0) | 2020.01.05 |
[안드로이드] 앱 내부에서 언어 설정 변경하기 (feat.Spinner) (1) | 2020.01.04 |
[안드로이드] 위험 권한 요청후 갤러리 사진 가져오기 (0) | 2020.01.03 |