Fascination
article thumbnail

창업을 위한 안드로이드앱 과제를 하던 중 교재를 바탕으로 코드를 작성했는데도

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만 해주었을 때 화면에 여전히 이미지가 보이지 않는 문제가 발생했었고,

구글링을 하던 중 나와 같은 문제를 겪고 계신 분이 시작화면에서만

해당 아이콘이 보이지 않는 상황에서 저 코드를 추가했더니 해결했다고 하셔서 추가해보았더니 해결되었다.

 

 

 

안드로이드 액션바(ActionBar) 기본 사용법. (Android ActionBar)

1. 안드로이드 액션바(ActionBar)와 앱바(App Bar) 액션바(ActionBar)는 앱바(App Bar)를 만들 때 사용하는 위젯 중 하나입니다. 그리고 앱바(App Bar)는 액티비티의 제목과 앱 레벨의 탐색(navigation)을 위한 액.

recipes4dev.tistory.com

 

해당 블로그를 참조했을 때 AppCompat을 사용할 경우 단순히 setIcon() 또는

setLogo() 함수를 호출하는 것만으로는 아이콘이 표시되지 않는다고 한다.

하지만 나는 MaterialComponents.DayNight.DarkActonBar를 사용해서 그런지

게시글과 다르게 setDisplayUseLogoEnabled() 함수는 사용하지 않고,

setDisplayShowHomeEnabled()만 추가해도 기능이 잘 구현되었다.

 

 

참고한 글이 2017년도에 올라왔기 때문에 지금은 많이 바뀐 부분이 있을 것 같지만

공식 사이트에서도 android:logo에 대해 다루고 있는 문서가 따로 없어서

기회가 되면 해당 내용을 다루는 책을 찾아봐야겠다 ~.~

 

 

profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!