안드로이드 앱에서 사용하는 메뉴 중 옵션 메뉴에 대해서 알아 봅니다메뉴 목록을 xml 파일로 구성하는 경우 Root 요소는 menu이고 자식 요소는 item 입니다그룹으로 묶는 경우에는 group 요소가 사용되는 경우도 있습니다.

 

메뉴 리소스 XML

요소

설명

<menu>

메뉴 항목의 컨테이너로 root node로 생성한다. <item> <group> 요소를 이용하여 메뉴를 구성 한다.

<item>

하나의 메뉴 항목을 나타낸다. 하위 메뉴를 생성하기 위해 <menu> 요소를 포함할 수 있다.

<group>

<item> 요소를 묶어 관리할 수 있는 투명 컨테이너.

 

<item> 속성

메뉴의 구현은 텍스트나 이미지로 하는데 모두 item 요소를 이용해서 표현 합니다. 여기에 설명한 속성 이외에도 많은 설정 값들이 있습니다.

속성

설명

android:id

item의 고유한 리소스 ID로 애플리케이션에서 이 ID를 통해 해당 항목을 인식 하고 사용 한다.

android:icon

메뉴에 이미지를 사용하는 경우 @drawable의 참조

android:title

메뉴에 사용할 문자열

android:showAsAction

앱 바에서 작업 항목으로 나타나는 시기와 방법을 지정

 

android:showAsAction

item의 속성 값에서 보다 다양한 설정을 하기 위해서는 showAsAction 속성을 이용 합니다.

속성

설명

ifRoom

앱 바에 표시할 공간이 있으면 표시하고 아니면 더보기 메뉴에 포함 된다.

withText

아이콘과 android:title에서 정의한 텍스트를 표시

never

앱 바에 공간이 있어도 배치하지 않고 더보기 메뉴에 포함

always

항상 앱 바에 배치. 다른 UI와 겹쳐질 수 있다.

collapseActionView

접기 기능을 사용할 수 있다.(API level 14)

 

 

Activity Method

xml로 구현된 메뉴 layoutActivity에서 다음 함수들을 이용하여 사용 합니다.

함수

설명

 onCreateOptionsMenu()

메뉴 객체를 생성하고 초기화 한다.

onPrepareOptionsMenu()

메뉴가 화면에 보여질 때 마다 호출되는 함수.

onOptionsItemSelected()

Menu Item을 선택 하였을 때 호출되어 Item 객체가 넘어온다.

onOptionsMenuClosed()

메뉴가 활성화 되어 있을 때 이전 버튼이나 다른 영역을 터치하여 메뉴를 닫을 때 호출되는 함수.

 

간단한 메뉴를 예제로 하나 만들어 보고 참고로 다음과 같은 메뉴도 만들어 봅니다.


android option menu



1. 프로젝트 생성


옵션 메뉴를 테스트 하기 위한 프로젝트를 생성 합니다.


android option menu


Empty Activity를 선택 하고


android option menu


대충 프로젝트 명을 입력하고 Finish 합니다.

 


2. 메뉴 xml 작성


프로젝트가 생성되면 메뉴를 위한 xml 파일을 생성해야 하는데 처음에는 res 폴더에 menu 폴더가 없기 때문에 xml 파일과 폴더를 동시에 생성 합니다.


android option menu


프로젝트에 마우스를 놓고 우측버튼을 클릭한 후 New > Android Resource File 을 선택 합니다.


android option menu


파일명은 자유롭게 생성하고 여기서는 menu_option로 하였습니다.  Resource TypeMenu를 선택해 줍니다이제 [OK] 버튼을 클릭하면 menu 폴더와 xml 파일이 생성 됩니다.


android option menu


menu_option.xml 파일이 생성 되었습니다.  


android option menu


처음에는 메뉴가 Design 보기로 나와 있는데 여기서 좌측에 있는 palette를 이용하여 메뉴를 구성 할 수도 있고 Code를 선택해서 텍스트로 입력을 해도 됩니다.


android option menu


간단하게 다음과 같이 메뉴 구성을 하였습니다.

 

<?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/menu1"
       
android:title="menu1"
       
app:showAsAction="never">
    </item>
    <item
       
android:id="@+id/menu2"
       
android:title="menu2"
       
app:showAsAction="never">
    </item>
</menu>

android:showAsAction에서 빨간색으로 오류가 발생 한다면 마우스를 올려놓고


android option menu


Update to app:showAsAction을 선택해 주면 됩니다.

그리고 showAsAction 값을 always never로 설정 하는 경우의 모습은 아래와 같습니다.


showAsActionalways로 한 경우

android option menu


showAsAction never로 한 경우

android option menu


둘 중 하나를 선택해서 작성해 줍니다.

 


3. MainActivity.java 코딩


이제 메뉴 xml을 사용하여 Activity에 실제 코딩을 진행 하는데 두 개의 함수를 사용하기 위해 추가해 줍니다.


onCreateOptionsMenu()

android option menu


onOptionsItemSelected()

android option menu



실제 코딩 내용은 별거 없습니다.

 

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater()
;
   
inflater.inflate(R.menu.menu_option, menu);
    return true;
}

 

MenuInflaterxml 리소스를 메뉴 객체로 변환하는 작업을 합니다생성한 menu_option.xml을 읽어와 menu에 맵핑해 줍니다.

 

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
   
switch(item.getItemId()) {
       
case R.id.menu1:
            Toast.makeText(
this, "menu1 select", Toast.LENGTH_SHORT).show();
            break;
        case
R.id.menu2:
            Toast.makeText(
this, "menu2 select", Toast.LENGTH_SHORT).show();
            break;
   
}
   
return super.onOptionsItemSelected(item);
}

 

사용자가 선택한 메뉴 itemid를 반환해 주어 선택된 메뉴에 맞는 기능을 하도록 코딩해주는 부분 입니다

 


4. 실행


지금까지 만든 프로젝트를 실행해 봅니다.


android option menu


더보기 메뉴를 선택하면 작성한 메뉴가 나타나고 하나씩 클릭해 봅니다.


android option menu


menu1을 선택한 경우 토스트 문구가 나옵니다.


android option menu


menu2를 선택한 경우의 토스트 문구 입니다.



5. 전체 소스

전체 소스라고 해봐야 2개 밖에 없습니다.


 - menu_option.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/menu1"
       
android:title="menu1"
       
app:showAsAction="never">
    </item>
    <item
       
android:id="@+id/menu2"
       
android:title="menu2"
       
app:showAsAction="never">
    </item>
</menu>

  

- MainActivity.java

package copycoding.tistory.optionmenu;

import
androidx.annotation.NonNull;
import
androidx.appcompat.app.AppCompatActivity;

import
android.os.Bundle;
import
android.view.Menu;
import
android.view.MenuInflater;
import
android.view.MenuItem;
import
android.widget.Toast;

public class
MainActivity extends AppCompatActivity {

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);
   
}

   
@Override
   
public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater()
;
       
inflater.inflate(R.menu.menu_option, menu);
        return true;
   
}

   
@Override
   
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
       
switch(item.getItemId()) {
           
case R.id.menu1:
                Toast.makeText(
this, "menu1 select", Toast.LENGTH_SHORT).show();
                break;
            case
R.id.menu2:
                Toast.makeText(
this, "menu2 select", Toast.LENGTH_SHORT).show();
                break;
        
}
       
return super.onOptionsItemSelected(item);
   
}
}

 

 

6. 참고


앞에서 말한데로 groupsubmenu를 추가한 경우도 알아 봅니다단순히 메뉴용 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/menu1"
       
android:checkable="true"
       
android:title="menu1"
       
app:showAsAction="never">
    </item>
    <item
       
android:id="@+id/menu2"
       
android:enabled="false"
       
android:title="menu2"
       
app:showAsAction="never">
    </item>
   
<!-- menu group -->
   
<group android:id="@+id/group_delete">
        <item
android:id="@+id/menu_archive"
           
android:title="group menu1" />
        <item
android:id="@+id/menu_delete"
           
android:title="group menu2" />
    </group>
    <item
       
android:id="@+id/menu3"
       
android:title="menu3"
       
app:showAsAction="never">
       
<!-- "file" submenu -->
       
<menu>
            <item
               
android:id="@+id/submenu1"
               
android:checkable="true"
               
android:title="sub menu1"
               
app:showAsAction="never">
            </item>
            <item
               
android:id="@+id/submenu2"
               
android:enabled="false"
               
android:title="sub menu2"
               
app:showAsAction="never">
            </item>
        </menu>
    </item>
</menu>

 

실행 결과 입니다.


android option menu


- copy coding -


Tistory에서 구글 서치 콘솔에 사이트 맵을 올리기 위해 대부분 sitemap.xml을 만들어 주는 사이트에 들어가서 본인의 티스토리 주소를 입력 하고 몇 십분 또는 몇 시간씩 기다렸다가 사이트 맵 파일잉 만들어 지면 파일을 다시 등록하고 google search console에 들어가서 위치를 입력하여야 하는 작업들을 하는 경우가 많은데 티스토리에는 자체적으로 구글 서치 콘솔로 사이트 맵을 등록할 수 있는 플러그인이 있습니다


tistory sitemap google search console


이미 아시는 분들은 잘 사용을 하고 있겠지만 모르는 분들이 있다면 얼마나 쉬운지 한번 보세요.

먼저 Tistory에 로그인을 하고 관리 페이지에서 좌측 메뉴에서 [플러그인]을 클릭 하면 


tistory sitemap google search console


우측에서 [Google Search Console] 을 찾을 수 있습니다클릭 해야겠죠.


tistory sitemap google search console


팝업창이 나타나면 Google에 로그인 하기 위한 [계정 연결하기] 버튼을 클릭 합니다


tistory sitemap google search console


본인의 계정을 선택 하고 로그인을 진행 합니다.


tistory sitemap google search console


Tistory에서 Google에 접속을 요청하게 되고 [허용] 버튼 클릭하면 사이트가 연결이 됩니다.


tistory sitemap google search console


 연결이 성공 했다는 팝업을 볼 수 있습니다.


tistory sitemap google search console


티스토리와 구글 서치 곤솔을 연결 하였으니 [적용] 버튼 클릭해서 계속 사용할 수 있도록 해 줍니다이것으로 연결 작업이 완료 되었습니다.


그럼 Tistory 에서 제출한 SitemapSitemap을 생성하는 사이트에서 만들어준 Sitemap을 제출한 경우는 어떤 차이가 있을 까요?


tistory sitemap google search console


상단이 Tistory에서 제출한 Sitemap URL 수 이고 하단이 사이트를 이용해서 생성한 Sitemap을 제출한 경우의 URL 수 입니다. 티스토리에서는 필요한 링크만 제출을 하고 사이트에서 만든 sitemap에는 자동으로 추출하다 보니 불필요한 폴더 정보등이 다수 들어 있어서 차이가 납니다물론 어느 것을 사용 할지는 본인들의 선택 사항이겠지만 참고 삼아 비교해 보았습니다.


- copy coding -


오랜만에 투명 배경 이미지가 필요해서 편집하려고 사이트에 들어가 보니 개편이 되어 있네요다행히 무료로 사용할 수 있는 기능들은 남아 있습니다먼저 사이트에 들어가서

 

https://pixlr.com/kr/editor/


온라인 무료 투명 배경 이미지


오른쪽에 있는 [PIXLR E]를 클릭 합니다.


온라인 무료 투명 배경 이미지


좌측에서 이미지를 불러 올 수 있는데 로컬에 있는 이미지나 원격 또는 클립보드에 있는 이미지 파일을 가져올 수 있습니다일단 로컬에 저장된 이미지를 사용하기 위하여 [이미지 열기] 버튼을 클릭 합니다.


온라인 무료 투명 배경 이미지


파일 탐색기 창이 나타나면 편집할 이미지 하나를 선택하고 열기 버튼을 클릭 합니다.


온라인 무료 투명 배경 이미지


이미지 파일을 웹 브라우저로 가져 오는데 사이즈가 너무 크면 용량을 선택하고 [적용]버튼을 클릭하여 가져오면 됩니다.


온라인 무료 투명 배경 이미지


이미지 불러오기가 완료된 모습 입니다좌측에 편집 도구들이 보이는데 대충 알 수 있는 아이콘들 이군요그래도 잘 모르겠다면 편집 도구 아이콘에 마우스를 올려보면


온라인 무료 투명 배경 이미지


간단한 기능 설명 팝업이 나타 납니다

이제 본론으로 들어가서 배경을 삭제하도록 하겠습니다.


온라인 무료 투명 배경 이미지


좌측 메뉴에서 [마술봉]을 선택 하고


온라인 무료 투명 배경 이미지


하트를 클릭 하면 하트 주변에 점선이 나타 나는데 이게 하트가 선택 되었다는 표시 입니다만약 배경이 단순한 색상이라면 배경을 클릭 하면 됩니다여기서는 하트가 단색이라 선택을 했지만 삭제하려는 부분이 하트가 아니기 때문에 하트의 배경이 선택 되도록 해야 하는데


온라인 무료 투명 배경 이미지


상단 메뉴에서 선택 > 반전 선택 을 클릭 합니다.


온라인 무료 투명 배경 이미지


이제는 하트가 아닌 외부가 선택된 점선 표시가 나타납니다여기서 키보드의 delete를 클릭 합니다. 물론 상단 메뉴에서


온라인 무료 투명 배경 이미지


편집 > 삭제를 선택 해도 동일 합니다.


온라인 무료 투명 배경 이미지


이제 배경이 사라진 하트가 만들어 졌습니다저장을 하도록 하겠습니다.


온라인 무료 투명 배경 이미지


상단 메뉴에서 파일 > 저장을 클릭 하고 


온라인 무료 투명 배경 이미지


파일명과 유형, 그리고 사이즈를 선택 한 후 [다운로드] 버튼을 클릭 하여 저장을 합니다저장된 파일을 열어보면


온라인 무료 투명 배경 이미지


배경이 없어진 것 같은데 파워포인트에서 좀더 확인 해봅니다.


온라인 무료 투명 배경 이미지


잘 되었습니다간단한 배경 삭제는 인터넷만 된다면 어디서나 손쉽게 작업을 할 수 있습니다.


- copy coding -


가격대비 성능이 괜찮은 공유기를 찾아 사용하다 보니 iptime을 주로 사용하게 되는데 어쩌다 한번씩 사용하다 보니 자주 일어버리게 되는 관리자 비밀 번호화 무선 인터넷 비밀번호 설정 방법을 기록해 둡니다

 

1. 관리자 비밀번호 설정

 

관리자 주소 http://192.168.0.1로 들어가


iptime 관리자 무선 비밀번호


관리도구를 클릭하여 로그인 창이 나오면


iptime 관리자 무선 비밀번호


초기 사용자이름과 비밀번호는 admin / admin 입니다그런데 보안을 강화한다고 비밀번호를 변경하여 시간이 지나면 잊어버리게 되는데 이런 경우에는 초기화를 해주면 됩니다.


iptime 관리자 무선 비밀번호


공유기에 있는 안쪽으로 조금 들어간 버튼모양을 눌러주면 모든 설정 값이 초기화 됩니다그러면 초기 값인 admin / admin 으로 로그인을 해 줍니다나중에 또 잊어버릴 수 있겠지만 관리자 비밀번호를 다시 설정 해 봅니다.


iptime 관리자 무선 비밀번호


좌측 메뉴탐색기에서 고급설정 > 시스템관리 > 관리자 설정 메뉴에서 계정과 비밀번호를 설정 하고 적용 버튼을 클릭 하면 됩니다.



2. 무선 비밀번호 설정

 

이번엔 무선 인터넷 비밀번호 설정 방법입니다요즘에 공유기 없는 집이 없으니 그냥 놔둬도 누가 쓰겠어? 인터넷을 사용 못하는 이웃이 있다면 서로 도우며 살아가야지하면 좋겠지만 무선 인터넷을 풀어두면 요즘엔 해킹을 통해서 노트북 카메라나 웹캠 등으로 사생활 침해와 개인정보들을 빼가는 일들이 벌어지니 꼭 비밀 번호를 설정해야 합니다.


iptime 관리자 무선 비밀번호


좌측 메뉴탐색기에서 기본설정 > 무선 설정/보안 메뉴를 선택 하고 인증 및 암호화와 네트워크 암호를 입력하고 적용 버튼을 클릭 합니다무선인터넷 이름을 변경 하려면 네트워크 이름이 초기값으로 iptime 으로 되어 있는데 다른 이름으로 변경해 줍니다.

이렇게 하면 공유기의 관리자와 무선인터넷 비밀번호를 변경해서 사용할 수 있습니다.


- copy coding -


1···45678910···62

+ Recent posts