03. boostcourse_ android app_ java_eventlistener / edittext / toast

2022. 6. 17. 12:32APP/개발

 

1. TableLayout

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TableRow
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button1" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button2" />
</TableRow>

<TableRow
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button3" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button4" />
</TableRow>
</TableLayout>

 

2. ScrollLayout

- 화면 영역 벗어날때

- 이미지뷰가 화면 영역을 넘어갈 때 스크롤을 만들고 싶다면 XML 레이아웃에서 다음과 같이 스크롤뷰로 감싸면 됨

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
>
<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
</ScrollView>

-> ⭐️생각해보기⭐️

ScrollView 밑에 HorizontalScrollView를 두고 ImageView를 LinearLayout으로 감싸서 가능하게 할 수 있습니다.

ScrollView > HorizontalScrollView > LinearLayout > ImageView

 

3. 이벤트 리스너

- 터치 이벤트

 : 화면을 손가락으로 누를 때 발생하는 잉벤트

- 키 이벤트

:키패드나 하드웨엉 버튼을 누를 때 발생하는 이벤트

- 포커스

:뷰마다 순서대로 주어지는 포커스

- 화면방향변경

:화면의 방향이 가로/세로로 바뀜에 따라 발생하는 이벤트

 

 

-  java 구현 : 변수선언 -> textview id값 불러옴 -> 함수선언(textview불러와서 한줄띄우고 입력)

- 좌표찍기 구현 : view 선언(앞에 id 찾아주기) -> setontouchlistener 함수 구현 ( action, cur_X, cur_Y 변수 선언 ) -> 행동마다 조건 설정

완성 ^^

+

package com.example.my15_touchevent;

import androidx.appcompat.app.AppCompatActivity;

import android.gesture.GestureOverlayView;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    //객체 선언
    View view1, view2;
    ScrollView scrollView1;
    TextView textView1;
    GestureDetector detector; //무슨 제스쳐를 했는지 감지

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //객체 초기화
        view1 = findViewById(R.id.view1);
        view2 = findViewById(R.id.view2);
        scrollView1 = findViewById(R.id.scrollView1);
        textView1 = findViewById(R.id.textView1);

        //터치를 했을때 작동하는 메서드
        view1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                float curX = event.getX();  //눌린 곳의 X좌표
                float curY = event.getY();  //눌린 곳의 Y좌표

                if(action == event.ACTION_DOWN) {   //처음 눌렸을 때
                    printString("손가락 눌림 : " + curX + ", " + curY);
                } else if(action == event.ACTION_MOVE) {    //누르고 움직였을 때
                    printString("손가락 움직임 : " + curX + ", " + curY);
                } else if(action == event.ACTION_UP) {    //누른걸 뗐을 때
                    printString("손가락 뗌 : " + curX + ", " + curY);
                }
                return true;
            }
        });

        view2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                detector.onTouchEvent(event);
                return true;
            }
        });
        detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
            //화면이 눌렸을 때
            @Override
            public boolean onDown(MotionEvent e) {
                printString("onDown() 호출됨");
                return true;
            }

            //화면이 눌렸다 떼어지는 경우
            @Override
            public void onShowPress(MotionEvent e) {
                printString("onShowPress() 호출됨");
            }

            //화면이 한 손가락으로 눌렸다 떼어지는 경우
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                printString("onSingleTapUp() 호출됨");
                return true;
            }

            //화면이 눌린채 일정한 속도와 방향으로 움직였다 떼어지는 경우
            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                printString("onScroll() 호출됨 => " + distanceX + ", " + distanceY);
                return false;
            }

            //화면을 손가락으로 오랫동안 눌렀을 경우
            @Override
            public void onLongPress(MotionEvent e) {
                printString("onLongPress() 호출됨");
            }

            //화면이 눌린채 손가락이 가속해서 움직였다 떼어지는 경우
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                printString("onFling() 호출됨 => " + velocityX + ", " + velocityY);
                return true;
            }
        });
    }

    private void printString(String s) {
        //좌표 출력
        textView1.append(s + "\n"); //한 줄씩 추가

        //자동으로 마지막 줄로 스크롤 내림
        scrollView1.fullScroll(View.FOCUS_DOWN);
    }

    //키가 눌렸을때 작동
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK) {
            printString("시스템에서 [Back] 버튼이 눌림");
            return true;
        } else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            printString("시스템에서 [VOLUME UP] 버튼이 눌림");
            return true;
        } else if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
            printString("시스템에서 [VOLUME DOWN] 버튼이 눌림");
            return true;
        } else if(keyCode == KeyEvent.KEYCODE_ENTER) {
            printString("시스템에서 [Enter] 키가 눌림");
            return true;
        }
        return false;
    }
}

 

 

4. Edit Text

- 상태에따라서 색깔 바뀌게 설정 : 백그라운드를 .xml파일로 

drawable-> xml파일

 

 

5.  Toast

1. toast 나타내줄 버튼 구현

- 버튼 객체 선언 -> setOnClickListener -> makeText(텍스트만 만들기)-> 리턴값이 있어서 toast로 받아주기(Toast toast) 

     -> gravity(어디에 보여줄것인지) -> show(보여주기)

 

- 버튼 눌렀을때 toast 로 다른 레이아웃 띄우기 : 토스트 띄울 레이아웃 인플레이션 -> 객체화함

1. 토스트 띄울 레이아웃 .xml파일

- infation 하는데 최상위 레이아웃 지정하기 위하여 해당 레이아웃 id 넣어줌(toast_border : toast해당 레이아웃 .xml 파일 이름 / toast_root: 해당 .xml 파일에서 토스트해당부분 레이어 id)

=> 이렇게 메모리 객체화한다음 해당 레이아웃 안의 뷰 (텍스트 뷰, 이미지 뷰등)을 찾을 수 있음

- 배경 다른 모양으로 토스트 띄워주고 싶을때  : 1. drawable 에 .xml파일 만들어서 toast 띄워줄 레이아웃 배경으로 설정

배경 drawable 파일 예시

 

6.  Snackbar

- design dependencies 추가 -> 

- module build.gradle에 추가된것 확일 할수 있음

- java파일

 

 

6.  알림대화상자

- view 인식이안되서 새롭게 view(여기서는 textview 만듦) 만들고 앞에서 객체인식시킴\

최상위 레이아웃 id 설정