728x90

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();
    }
 
}





블로그 이미지

Link2Me

,