창업을 위한 안드로이드앱 과제를 하던 중 교재를 바탕으로 코드를 작성했는데도
actionbar에 사진이 뜨지 않는 문제가 발생했다
- 수정전 AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.project6_2">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:icon="@drawable/emo_im_laughing"
android:label="쿡북 웹브라우저"
android:logo="@drawable/web"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
>
<activity
android:name=".MainActivity"
android:label="간단 웹브라우저"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- 수정전 MainActivity.java
package com.example.project6_2;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText edtUrl;
Button btnGo, btnBack;
WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtUrl = (EditText) findViewById(R.id.edtUrl1);
btnGo = (Button) findViewById(R.id.btnGo);
btnBack = (Button) findViewById(R.id.btnBack);
web = (WebView) findViewById(R.id.webView1);
web.setWebViewClient(new CookWebViewClient());
WebSettings webSet = web.getSettings();
webSet.setBuiltInZoomControls(true);
webSet.setJavaScriptEnabled(true);
btnGo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
web.loadUrl(edtUrl.getText().toString());
}
});
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
web.goBack();
}
});
}
class CookWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
}
}
주어진 소스코드에서 사진이 뜨지 않는 문제를 제외하고는 잘 작동되었고
아래 사진처럼 옆에 logo옆에 web 이미지가 잘나왔기 때문에 문제점을 파악하지 못했다
그래서 생각해낸 방법은 getSupportActionBar에서 SetIcon을 MainActivity.java에 작성해주는 것이었다..!
- 수정한 MainActivity.java
package com.example.project6_2;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText edtUrl;
Button btnGo, btnBack;
WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setIcon(R.drawable.web);
getSupportActionBar().setDisplayShowHomeEnabled(true);
edtUrl = (EditText) findViewById(R.id.edtUrl1);
btnGo = (Button) findViewById(R.id.btnGo);
btnBack = (Button) findViewById(R.id.btnBack);
web = (WebView) findViewById(R.id.webView1);
web.setWebViewClient(new CookWebViewClient());
WebSettings webSet = web.getSettings();
webSet.setBuiltInZoomControls(true);
webSet.setJavaScriptEnabled(true);
btnGo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
web.loadUrl(edtUrl.getText().toString());
}
});
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
web.goBack();
}
});
}
class CookWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
}
}
기존에 생각했던 코드 외에 setDisplayShowHomeEnabled가 추가된 것을 볼 수 있다.
setIcon만 해주었을 때 화면에 여전히 이미지가 보이지 않는 문제가 발생했었고,
구글링을 하던 중 나와 같은 문제를 겪고 계신 분이 시작화면에서만
해당 아이콘이 보이지 않는 상황에서 저 코드를 추가했더니 해결했다고 하셔서 추가해보았더니 해결되었다.
해당 블로그를 참조했을 때 AppCompat을 사용할 경우 단순히 setIcon() 또는
setLogo() 함수를 호출하는 것만으로는 아이콘이 표시되지 않는다고 한다.
하지만 나는 MaterialComponents.DayNight.DarkActonBar를 사용해서 그런지
게시글과 다르게 setDisplayUseLogoEnabled() 함수는 사용하지 않고,
setDisplayShowHomeEnabled()만 추가해도 기능이 잘 구현되었다.
참고한 글이 2017년도에 올라왔기 때문에 지금은 많이 바뀐 부분이 있을 것 같지만
공식 사이트에서도 android:logo에 대해 다루고 있는 문서가 따로 없어서
기회가 되면 해당 내용을 다루는 책을 찾아봐야겠다 ~.~
'Study > Android' 카테고리의 다른 글
[Android] Custom Binary Blocked by FRP Lock 해결하기 with Galaxy 9 (4) | 2022.12.23 |
---|---|
[Android] ADB와 연결된 Device가 unauthorized라고 표시될 때 해결 방법 (0) | 2022.12.19 |
[NOX] 안드로이드(Nox) 버프 스위트(burp suite) 보안 인증서 등록 방법 (2) | 2022.10.28 |
[Android] WebView 인터넷(http) 접근 거부 해결방법 (0) | 2022.05.26 |
[Android] 남은 액티비티 종료 후 앱 재실행하기 (0) | 2022.02.05 |