일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- python tkinter 인터페이스
- 자바스크립트 class
- 한글입력 오류
- 한글입력 잘림
- python GUI 사용하기
- jquery 사용하기
- 자바스크립트 배열 할당
- 자바스크립트
- 자바스크립트 객체 만들기
- max MySQL
- 자바스크립트 객체
- 비주얼스튜디오 코드
- SwiftUI 기반의 iOS 프로그래밍
- 객체
- 맥 mysql
- 배열 분해 할당
- 한글입력 안됨
- 한글입력 씹힘
- 한글잘림
- 황반석 옮김
- 객체지향
- 맥 아파치
- 닐 스미스 지음
- 제이쿼리연결
- 제이펍 출판
- 블록 스코프
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- 기획자랑 사이좋게 지내고 싶다
- max apache
- 생활코딩
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- python tkinter 인터페이스
- 자바스크립트 class
- 한글입력 오류
- 한글입력 잘림
- python GUI 사용하기
- jquery 사용하기
- 자바스크립트 배열 할당
- 자바스크립트
- 자바스크립트 객체 만들기
- max MySQL
- 자바스크립트 객체
- 비주얼스튜디오 코드
- SwiftUI 기반의 iOS 프로그래밍
- 객체
- 맥 mysql
- 배열 분해 할당
- 한글입력 안됨
- 한글입력 씹힘
- 한글잘림
- 황반석 옮김
- 객체지향
- 맥 아파치
- 닐 스미스 지음
- 제이쿼리연결
- 제이펍 출판
- 블록 스코프
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- 기획자랑 사이좋게 지내고 싶다
- max apache
- 생활코딩
- Today
- Total
java,javascript,android,php,sql,공부용,메모용
안드로이드 앱 액션바, 옵션 메뉴, 컨텍스트 메뉴 / Android Studio / 안드로이드 앱만들기 28 본문
옵션메뉴
- 시스템 [메뉴] 버튼을 눌렀을 떄 나타나는 메뉴(앱상단에 위치한) 각 화면마다 설정할 수 있는 주요 메뉴
컨텍스트 메뉴
- 화면을 길게 누르면 나타나는 메뉴 (복사하기,붙여넣기), 텍스트뷰의 편집 상태를 바꿀때 사용함
액션바1
- 옵션메뉴는 액션바(Action Bar)에 포함되어 보이도록 만들어져 있다. (액션바는 앱의 제목이 보이는 위쪽부분)
- 옵션메뉴와 컨텍스트 메뉴는 각각의 액티비티마다 설정이 가능한데 액티비티에 추가하고 싶은 경우 아래 메서드를 다시 정의해서 메뉴 아이템을 추가한다.
- 메서드재정의
public boolean onCreateOptionsMenu (Menu menu)
public void onCreateContextMenu (ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo)
- add() 메서드 (Menu 와 ContextMenu 객체가 전달되는데 add() 메서드를 사용해 메뉴 아이템을 추가한다 )
MenuItem add(int groupId, int itemId, int order, CharSequence title)
MenuItem add(int groupId, int itemId, int order, int titleRes)
SubMenu addSubMenu (int titleRes)
이렇게 코드를 추가할 수 있지만 코드보다 XML에서 메뉴 속성을 정의한 후 객체로 로딩하여 참조하는게 간단함
1. SampleOptionMenu
- 패키지명 수정 뒤에 menu
2. /app/res 폴다 안에 menu 폴더 생성 [ New- Directory ]
- menu 폴더에서 우클릭 [ New - Menu resource file ] 메뉴 선택
- name : menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_refresh"
android:title="새로고침"
android:icon="@drawable/menu_refresh"
app:showAsAction="always"/>
<item android:id="@+id/menu_search"
android:title="검색"
android:icon="@drawable/menu_search"
app:showAsAction="always"/>
<item android:id="@+id/menu_setting"
android:title="설정"
android:icon="@drawable/menu_setting"
app:showAsAction="always"/>
</menu>
- app: 로 시작되는 속성은 프로젝트에 들어있는 속성이다.
- 외부 라이브러리에서 제공되는 속성도 app:로 참조하면 추가할 수 있다.
showAsAction 속성에 설정할 수 있는것
showAsAction 속성값 | 설명 |
always | 항상 액션바에 아이템을 추가하여 표시 |
never | 액션바에 아이템을 추가하여 표시하지 않음 (디폴트값) |
itRoom | 액션바에 여유 공간이 있을 때만 아이템 표시 |
withText | title 송성으로 설정된 제목을 같이 표시 |
collapseActionView | 아이템에 설정한뷰(actionViewLayout 뷰)의 아이콘만 표시 |
MainActivity.java
package com.togapp.smapleoptionmenu;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
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);
}
// 메서드 재정의
// ctrl + o --> onCreateOptionsMenu / onOptionsItemSelected 추가
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//return super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int curId = item.getItemId();
switch (curId) {
case R.id.menu_refresh:
Toast.makeText(this, "새로고침 메뉴가 선택되었습니다.",Toast.LENGTH_SHORT).show();
break;
case R.id.menu_search:
Toast.makeText(this, "검색 메뉴가 선택되었습니다.",Toast.LENGTH_SHORT).show();
break;
case R.id.menu_setting:
Toast.makeText(this, "설정 메뉴가 선택되었습니다.",Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
onPrepareOptionsMenu()
- 화면이 띄워진 후에 메뉴를 바꾸고 싶을때 메서드를 재정의 해서 사용함
- 메뉴가 새로 보일때마다 호출되니 메뉴 항목을 추가하거나 뺄 수 있어서 메뉴 아이템들을 변경 할 수 있음
- 메뉴를 활성화 비활성화로 나눠 앱의 상태에 따라 사용자가 메뉴를 사용하거나 사용하지 못하게 할 수 있음
onOptionsItemSelected(MenuItem item)
- 메뉴를 선택했을 때 처리하는 방법으로 사용자가 하나의 메뉴를 선택했을 때 호출되는 메서드를 재정의
- 메뉴 아이템의 id값을 확인하고 그에 맞게 기능을 수정,추가 하면됨
컨텍스트 메뉴를 특정뷰에 등록하고 싶을 때
- registerForContextMenu() 메서드 사용
- viud Activity.registerForContextMenu (View view)
이 메서드로 컨텍스트 메뉴를 등록하면 메뉴 아이템을 선택할때 onContextItemSelected() 메서드가 호출된다
메서드의 파라미터로 전달되는 MenuItem 객체를 사용해서 아이템 정보 확인 후 처리 가능
![]() |
![]() |
![]() |
액션바2
액션바는 기본적으로 제목을 보여주는 타이틀의 기능을 한다.
앱의 제목을 보여줄 수 있고, 화면에 보이거나 보이지 않도록 할 수 있다.
ActionBar abar = getActionBar();
abar.show();
abar.hide();
java 파일에서 액션바를 감추거나 보이게하기
- show() 메서드를 호출하면 액션바를 보이게 할 수 있음
- hide() 메서드를 호출하면 액션바를 감출 수 있음
부제목 달아주기
- setSubtitle()
1. SampleActionBar1 프로젝트 생성
- 프로젝트 이름 수정 actionbar
2. activity_main.xml 파일에 버튼 추가 "액션바 아이콘 바꾸기"
3. 텍스트뷰 Hello World!
4. activity_main.xml / MainActivity.java / menu_main.xml 파일은 위에 사용된걸로 그대로 씀
5. MainActivity.java에 새내용 추가
package com.togapp.sampleactionbar1;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getSupportActionBar();
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
actionBar.setLogo(R.drawable.home);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME| ActionBar.DISPLAY_USE_LOGO);
}
});
}
// 메서드 재정의
// ctrl + o --> onCreateOptionsMenu / onOptionsItemSelected 추가
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//return super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int curId = item.getItemId();
switch (curId) {
case R.id.menu_refresh:
Toast.makeText(this, "새로고침 메뉴가 선택되었습니다.",Toast.LENGTH_SHORT).show();
break;
case R.id.menu_search:
Toast.makeText(this, "검색 메뉴가 선택되었습니다.",Toast.LENGTH_SHORT).show();
break;
case R.id.menu_setting:
Toast.makeText(this, "설정 메뉴가 선택되었습니다.",Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
import androidx.appcompat.app.ActionBar;
- ActionBar는 androidx.appcompat.app 패키지 안에 들어있는 클래스를 import한다
actionBar.setDisplayOptions(상수)
디스플레이 옵션 상수 | 설명 |
DISPLAY_USE_LOGO | 홈 아이콘 부분에 로고 아이콘을 사용함 |
DISPLAY_SHOW_HOME | 홈 아이콘을 표시한다 |
DISPLAY_HOME_AS_UP | 홈 아이콘에 뒤로가기 모양의 < 아이콘을 같이 표시 |
DISPLAY_SHOW_TITLE | 타이틀을 표시하도록 함 |
- 로고 아이콘은 매니페스트에 등록된 액티비티 속성으로 지정 가능하다
menu_main.xml 파일 수정
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_refresh"
android:title="새로고침"
android:icon="@drawable/menu_refresh"
app:showAsAction="always"
android:orderInCategory="101"/>
<item android:id="@+id/menu_search"
android:title="검색"
android:icon="@drawable/menu_search"
app:showAsAction="always|withText"
android:orderInCategory="102"/>
<item android:id="@+id/menu_setting"
android:title="설정"
android:icon="@drawable/menu_setting"
app:showAsAction="never"
android:orderInCategory="103"/>
</menu>
1. SampleActionBar2 프로젝트 생성
- 프로젝트 이름 수정 actionbar
2. activity_main.xml 복사~
3. 텍스트뷰 Hello World!
4. activity_main.xml / MainActivity.java / menu_main.xml 파일도 복사~
menu_main.xml에 새코드 추가
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_refresh"
android:title="새로고침"
android:icon="@drawable/menu_refresh"
app:showAsAction="always"
android:orderInCategory="101"/>
<item android:id="@+id/menu_setting"
android:title="설정"
android:icon="@drawable/menu_setting"
app:showAsAction="never"
android:orderInCategory="103"/>
<item android:id="@+id/menu_search"
android:title="검색"
android:icon="@drawable/menu_search"
app:showAsAction="always|withText"
app:actionLayout="@layout/search_layout"
android:orderInCategory="102"/>
</menu>
5. search_layout.xml 생성
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="검색"
android:textColor="#FFC107"
android:textSize="16sp" />
<EditText
android:id="@+id/editText"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:layout_margin="4dp"
android:imeActionId="1337"
android:imeOptions="actionDone"/>
</LinearLayout>
6. MainActivity.java에 새내용 추가
// 메서드 재정의
// ctrl + o --> onCreateOptionsMenu / onOptionsItemSelected 추가
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.menu_main, menu);
View view = menu.findItem(R.id.menu_search).getActionView();
if (view != null){
editText = view.findViewById(R.id.editText);
if(editText != null){
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
Toast.makeText(getApplicationContext(), "입력됨", Toast.LENGTH_LONG).show();
return true;
}
});
}
}
return true;
}
실행결과