728x90

✔ 웹브라우저 기능
- URL 주소를 입력하여 검색버튼을 누르면 웹페이지가 화면에 표시된다.
- 옵션메뉴는 하위메뉴로 검색사이트와 개발자 정보로 구성된다.
- 홈아이콘을 클릭하면 미리 설정한 홈페이지가 표시된다.
✔ 소스코드
◾ activity_main.xml
- WebView와 메뉴, 옵션 메뉴, 컨텍스트 메뉴를 사용
- 웹페이지 주소 공유 방법은 암시적 인텐트 이용
+imeOptions에서 actionSearch를 선택해서 키보드 아이콘을 체크->돋보기로 변경.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<EditText
android:id="@+id/urlEditText"
android:layout_width="203dp"
android:layout_height="44dp"
android:layout_marginTop="8dp"
android:ems="10"
android:hint="http://"
android:imeOptions="actionSearch"
android:inputType="textUri"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<WebView
android:id="@+id/webView"
android:layout_width="408dp"
android:layout_height="544dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/urlEditText"
app:layout_constraintVertical_bias="1.0" />
<Button
android:id="@+id/backButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Back"
app:layout_constraintEnd_toStartOf="@+id/forwardButton"
app:layout_constraintStart_toEndOf="@+id/urlEditText"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/forwardButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="Forward"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/backButton"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
◾ MainActivity.kt
- MainActivity 코틀린 파일을 작성하기전에 안드로이드에서 특정권한이 필요한 동작을 할 때, 권한을 추가 해줘야한다.
- AndroidManifest.xml 파일에 인터넷 권한을 추가해준다.
<uses-permission android:name="anroid.permission.INTERNET">
- webView.apply를 통해 웹뷰 기본 설정해주기
- actionId == EditorInfo.IME_ACTION_SEARCH //검색버튼에 해당하는 상수와 비교
package com.example.mywebbrowser
import android.content.Intent
import android.net.Uri
import android.net.UrlQuerySanitizer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.ContextMenu
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.inputmethod.EditorInfo
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Button
import android.widget.EditText
class MainActivity : AppCompatActivity() {
lateinit var webView :WebView
lateinit var urlEditText : EditText
lateinit var backButton : Button
lateinit var forwardButton : Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
webView = findViewById<WebView>(R.id.webView)
urlEditText = findViewById(R.id.urlEditText)
backButton =findViewById(R.id.backButton)
forwardButton = findViewById(R.id.forwardButton)
webView.apply{
settings.javaScriptEnabled = true
webViewClient = WebViewClient()
}
webView.loadUrl("http://www.google.com")
registerForContextMenu(webView) //웹뷰위젯에 컨텍스트 위젯 사용
backButton.setOnClickListener {
webView.goBack()
}
forwardButton.setOnClickListener {
webView.goForward()
}
urlEditText.setOnEditorActionListener { v, actionId, event ->
if(actionId==EditorInfo.IME_ACTION_SEARCH){
webView.loadUrl(urlEditText.text.toString())
true
}
else{
false
}
}
}
override fun onBackPressed(){
if(webView.canGoBack()){
webView.goBack()
}else{
super.onBackPressed()
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main,menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item?.itemId){
R.id.action_reset->{
webView.reload()
}
R.id. action_google,R.id.action_home->{
webView.loadUrl("http://www.google.com")
return true
}
R.id.action_naver->{
webView.loadUrl("http://www.naver.com")
return true
}
R.id.action_daum->{
webView.loadUrl("http://www.daum.net")
return true
}
R.id.action_call->{
//전화하기
val intent = Intent(Intent.ACTION_DIAL)
intent.data=Uri.parse("tel:012-3456-7890")
if(intent.resolveActivity(packageManager)!=null){
startActivity(intent)
}
return true
}
R.id.action_send_text->{
//문자하기
val intent = Intent(Intent.ACTION_SENDTO)
intent.data=Uri.parse("smsto:"+Uri.encode("012-3456-7890"))
if(intent.resolveActivity(packageManager)!=null){
startActivity(intent)
}
return true
}
R.id.action_email->{
//이메일하기
val intent = Intent(Intent.ACTION_DIAL)
intent.data=Uri.parse("mailto:example@example.com")
if(intent.resolveActivity(packageManager)!=null){
startActivity(intent)
}
return true
}
}
return super.onOptionsItemSelected(item)
}
override fun onCreateContextMenu(
menu: ContextMenu?,
v: View?,
menuInfo: ContextMenu.ContextMenuInfo?
) {
super.onCreateContextMenu(menu, v, menuInfo)
menuInflater.inflate(R.menu.context,menu)
}
override fun onContextItemSelected(item: MenuItem): Boolean {
when(item?.itemId) {
R.id.action_share -> {
val intent=Intent(Intent.ACTION_SEND)
intent.putExtra(Intent.EXTRA_TEXT, webView.url.toString())
intent.setType("text/plain")
val shareIntent=Intent.createChooser(intent, "공유 페이지")
startActivity(shareIntent)
return true
}
R.id.action_browser->{
val intent=Intent(Intent.ACTION_VIEW, Uri.parse(webView.url))
startActivity(Intent.createChooser(intent,"Browser"))
return true
}
}
return super.onContextItemSelected(item)
}
}
◾ 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:title="검색 사이트" >
<menu >
<item
android:id="@+id/action_naver"
android:title="네이버" />
<item
android:id="@+id/action_google"
android:title="구글" />
<item
android:id="@+id/action_daum"
android:title="다음" />
</menu>
</item>
<item android:title="개발자 정보" >
<menu >
<item
android:id="@+id/action_call"
android:title="전화하기" />
<item
android:id="@+id/action_send_text"
android:title="문자보내기" />
<item
android:id="@+id/action_email"
android:title="이메일보내기" />
</menu>
</item>
<item
android:id="@+id/action_home"
android:icon="@drawable/ic_baseline_home_24"
android:title="Home"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_reset"
android:icon="@drawable/ic_baseline_refresh_24"
android:title="reset"
app:showAsAction="ifRoom" />
</menu>
728x90
'Android > Kotlin' 카테고리의 다른 글
Kotlin 실로폰 만들기 (0) | 2021.01.25 |
---|---|
Kotlin 수평측정기 만들기 (0) | 2021.01.22 |
Kotlin 타이머 만들기 (0) | 2021.01.18 |
Kotlin BMI(비만도) 계산기 앱 만들기 (0) | 2021.01.18 |
Kotlin 간단 계산기 앱 만들기 (0) | 2021.01.13 |