본문으로 바로가기

[안드로이드]퀵액션(QuickAction)(말풍선버튼)

category Android 2017. 9. 6. 10:08

안녕하세요.


오늘은 안드로이드에서 사용되는 퀵액션(Quick Action) 에 대해 알아보겠습니다.



https://github.com/lorensiuswlt/NewQuickAction3D

(퀵액션 깃허브)


퀵액션은 버튼을 클릭하면 상,하,좌,우 등 누른 객체를 기준으로 설정된 방향에 퀵매뉴를 띄워주는 기능입니다.


퀵액션은 응용하면 많은곳에서 효율적으로 사용 할 수 있는데요.


단순히 경고,안내 맨트를 띄워줄수도있고, 버튼으로 활용 할 수도 있습니다.


자세한 내용은 위 퀵액션 깃허브를 보시면됩니다.


이번에는 퀵액션을 가지고 간단한 끄고 켜는 말풍선? 맨트를 만들어보겠습니다.


아주 간단한 기능같지만 퀵액션 하나를 띄우기위한 과정에는 많은 코드가 필요합니다.


퀵액션을 띄우기위한 클래스4개, 퀵액션을 표현할 xml5개, style설정, 애니매이션효과가 들어가기때문에 애니매이션xml 4개 그리고 퀵액션의 이미지파일이 필요합니다.


전체코드를 올리면서 설명하기엔 코드가 너무길기때문에 핵심적인 부분만 골라 설명을 하겠습니다.



먼저 main 입니다

public class MainActivity extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        QuickActionItem  comment   = new QuickActionItem(0, "누르면 꺼집니다.", getResources().getDrawable(R.drawable.ic_close_white_24dp));

        final QuickActionPopup quickActionPopup1 = new QuickActionPopup(this, QuickActionPopup.VERTICAL);

        quickActionPopup1.addActionItem(comment);

        //Set listener for action item clicked
        quickActionPopup1.setOnActionItemClickListener(new QuickActionPopup.OnActionItemClickListener() {
            @Override
            public void onItemClick(QuickActionPopup source, int pos, int actionId) {
                if (actionId == 0) {
                }
            }
        });
        //set dismiss listener
        quickActionPopup1.setOnDismissListener(new QuickActionPopup.OnDismissListener() {
            @Override
            public void onDismiss() {

            }
        });
        
        Button btn = (Button)findViewById(R.id.btn);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                quickActionPopup1.show(v);
            }
        });

    }
}


main클래스에서는 QuickActionItem 을 만드는 부분에서 두번째 매개변수로 맨트가들어가고 세번째 매개변수로 아이콘이 들어갑니다. 



QuickActionItem 클래스는 퀵액션에 띄워줄 텍스트,아이콘 등을 설정하는 데이터클래스입니다.


QuickActionPopup 클래스는 중요한클래스로, 누른 객체를 기준으로 퀵액션을 어떤방향에 띄워줄지 결정하는 클래스입니다.


    public void show (View anchor) {
        preShow();

        int xPos, yPos, arrowPos;
        .
        .
        .


QuickActionPopup 클래스의 show함수에서 퀵액션의 x,y 좌표를 설정 할 수 있습니다.



레이아웃은 버튼이있는 activitymain 과 퀵액션 아이템의 정렬 방향을 설정 할 수 있는 action_item_horizontal,action_item_vertical xml 이 있습니다.



퀵액션은 보기와는 다르게 많은 코드를 필요로하는 기능입니다 ㅜㅜ


하지만 세부적인 코드를 조정하여 사용한다면 아주 괜찮은 기능을 구현할수 있을것같습니다.


예제로들어간 샘플프로잭트가 필요하시면 댓글남겨주세요.


그리고 잘못된 정보가 있다면 알려주세요.