본문 바로가기

안드로이드

액션바에 검색창 만들기

반응형
https://recipes4dev.tistory.com/92
imeActionId, imeOptions에 대한 설명

https://stackoverflow.com/questions/23211761/actionlayout-on-menuitem-does-nothing
안드로이드 스튜디오로 xml 파일을 작업할 때, actionLayout 타이핑 시 자동 완성이
android:actionLayout으로 된다. app:actionLayout으로 수정해야 한다

 

app/res/menu/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:icon="@drawable/menu_refresh"
        android:title="새로고침"
        app:showAsAction="always"></item>

    <item
        android:id="@+id/menu_search"
        android:orderInCategory="102"
        android:title="검색"
        app:actionLayout="@layout/search_layout"
        app:showAsAction="always|withText"></item>


    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/menu_settings"
        android:title="설정"
        app:showAsAction="always"></item>
    
</menu>

 

 

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="wrap_content">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="검색 : "
        android:textColor="#ffad8745"
        android:textSize="16sp" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4dp"
        android:imeActionId="1337"
        android:imeOptions="actionDone"
        android:inputType="text"></EditText>

</LinearLayout>

 

이 xml 레이아웃을 액션바에 넣어서 보여주려면 액션바에 추가된 메뉴 아이템 중 하나가 화면에 보일 때 이 레이아웃이 보이게 설정해야한다

 

MainActivity

package com.example.a32_sampleactionbar2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
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) {
//        xml로 정의된 메뉴 정보를 인플레이션하여 메모리에 로딩
        getMenuInflater().inflate(R.menu.menu_main, menu);

//        메뉴 아이템 중에서 검색을 위해 정의한 아이템을 뷰 객체로 참조
        View v = menu.findItem(R.id.menu_search).getActionView();

        if (v != null) {
            EditText editText = v.findViewById(R.id.editText);

            if (editText != null) {
                editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                    @Override
                    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                        Toast.makeText(getApplicationContext(), "입력됨", Toast.LENGTH_LONG).show();
                        return true;
                    }
                });
            }
        }

        return true;
    }
}

 

반응형

'안드로이드' 카테고리의 다른 글

상단 탭 만들기  (0) 2021.10.20
[에러] Installation failed due to: ''cmd package install-create ....  (0) 2021.10.20
액션바 아이콘 바꾸기  (0) 2021.10.19
액션바  (0) 2021.10.19
한 화면에 2개의 프래그먼트  (0) 2021.10.19