Android Studio 에서 메뉴 만드는 방법이다.
메뉴를 추가한다.
일일이 입력하지 않고 특정 단축어만 입력하면 자동으로 팝업되면서 선택할 수 있게 나온다.
그러면 엔터키만 치면 그 다음에 입력할 사항만 입력하면 된다.
여기서 에러메시지를 보여주면서 자동으로 넘어가지 않는다.
Android Studio 버전 2.3 에서는 자동으로 완성시키더라.
계속 버전업을 하면서 편리하게 자동완성 기능을 추가하고 있는거 같다.
==== menu_item.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/item01"
android:title="메뉴1"
android:orderInCategory="2"
android:icon="@android:drawable/ic_lock_idle_low_battery"
app:showAsAction="always"
/>.
<item
android:id="@+id/item02"
android:title="메뉴2"
android:orderInCategory="3"
android:icon="@android:drawable/btn_plus"
app:showAsAction="always"
app:actionLayout="@layout/custom_layout"
/>
<item
android:id="@+id/item03"
android:title="메뉴3"
android:orderInCategory="1"
android:icon="@android:drawable/sym_def_app_icon"
app:showAsAction="always"
/>
</menu>
==== custom_layout.xml ===
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/custom_et01"
android:inputType="text"
android:imeOptions="actionDone"
android:layout_width="100dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/custom_tv01"
android:text="찾기"
android:textSize="15dp"
android:textColor="#22a"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
==== activity_main.xml ===
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tistory.link2me.Menu.MainActivity">
<TextView
android:id="@+id/tv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="18dp"
android:textColor="#a84"
android:text="Hello World!" />
<Button
android:id="@+id/btn01"
android:layout_centerHorizontal="true"
android:layout_below="@id/tv01"
android:layout_marginTop="20dp"
android:text="ActionBar 아이콘 변화"
android:onClick="btnClicked"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
==== MainActivity.java ====
package com.tistory.link2me.Menu;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView textView;
EditText editText;
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getSupportActionBar();
actionBar.setSubtitle("서브타이틀");
textView = (TextView) findViewById(R.id.tv01);
}
public void btnClicked(View v){
actionBar.setLogo(android.R.drawable.sym_action_call);
actionBar.setDisplayOptions(android.app.ActionBar.DISPLAY_SHOW_HOME|android.app.ActionBar.DISPLAY_USE_LOGO);
}
// 시스템 상에서 자동으로 호출하는 메소드 및 custom_layout 객체화
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.menu_item,menu);
// custom_Layout 객체를 참조
View findView = menu.findItem(R.id.item02).getActionView();
if(findView != null){
editText = (EditText) findView.findViewById(R.id.custom_et01);
if(editText != null){
editText.setOnEditorActionListener(findListener);
}
} else {
Toast.makeText(getApplicationContext(), "액션뷰가 없네요", Toast.LENGTH_SHORT).show();
}
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.item01:
Toast.makeText(this, "메뉴1", Toast.LENGTH_SHORT).show();
break;
case R.id.item02:
Toast.makeText(this, "메뉴2", Toast.LENGTH_SHORT).show();
break;
case R.id.item03:
Toast.makeText(this, "메뉴3", Toast.LENGTH_SHORT).show();
break;
}
textView.setText(item.getTitle().toString());
return super.onOptionsItemSelected(item);
}
private TextView.OnEditorActionListener findListener = new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(event == null || event.getAction() == KeyEvent.ACTION_UP){
find();
// 키패드 처리 객체 --> InputMethodManager 객체
InputMethodManager inputMethodManger = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
// 키패드 닫기
inputMethodManger.hideSoftInputFromWindow(textView.getWindowToken(),0);
textView.setText("메뉴2");
}
return true;
}
};
private void find(){
String findString = editText.getEditableText().toString();
Toast.makeText(this, "검색어 : "+findString, Toast.LENGTH_SHORT).show();
}
}
'안드로이드 > Android Studio' 카테고리의 다른 글
BroadCast Receiver 문자수신 기능 테스트 (0) | 2017.03.28 |
---|---|
Android Studio Project name 변경 (0) | 2017.03.26 |
New Resource File 및 LayoutInflater (0) | 2017.03.17 |
Android Studio 단축키 (0) | 2017.03.13 |
Android Studio 간편 설치 방법 (0) | 2017.02.24 |