[coding] 코딩 공부하자/[안드로이드]

[Android][Java] 자바 키보드 제어 - 내리기, 올리기

찰스_ 2020. 10. 27. 20:38
728x90
반응형

안녕하세요. 찰스입니다!

키보드 제어는 빌드가 필요해서 안드로이드 개발언어인 코틀린(kotlin)과 자바(java) 버전 2개로 준비 해봤습니다!

Kotlin을 주 언어로 개발하여, java는 참고만 하실 수 있게 업로드 해놓을께요!

여기는 Java 편 입니다!!!


 

[이전글] [Android][Kotlin] 모바일 소프트 키보드 제어 - 내리기, 올리기 (키보드 형, 이제 사라져!)

 

[android][Kotlin] 모바일 소프트 키보드 제어 - 내리기, 올리기 (키보드 형, 이제 사라져!)

안녕하세요. 찰스입니다! 안드로이드 키보드+화면 설정모바일 키보드와 View 상호 설정으로 키보드 나타나게 설정은 했는데, 이젠 또 안 없어져서 은근 거슬리더군요. 키보드 제어는 빌드가 필요

charlesstory.tistory.com


[Java] 모바일 소프트 키보드 제어 - 내리기, 올리기

소프트 키보드 제어 처리화면

 

[Java] 코드 샘플

1. AndroidManifast.xml

 <activity
      android:name=".MainActivity">
      
      ...
    
</activity>

activity 옵션 수정 없음. (Kotlin 버전과 비교하면서 보시면 키보드와 화면 공간 확보하는 부분이 다릅니다!)

 

2. activity_main.xml 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    
    android:onClick="hideKeyboard"
    >
    
    <TextView>
    	...
    </TextView>
    
    <EditText>
    	...
    </EditText>
    
    <Button>
    	...
    </Button
    
 </LinearLayout>

LinearLayout 옵션에 android:onClick="hideKeyboard" 추가 (Kotlin 버전과 동일)

 

3. MainActivity.java

public final class MainActivity extends AppCompatActivity {

    // 1. 변수 선언
    private InputMethodManager imm;
    private EditText editText;
    private Button button;

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

        // 2. 변수 세팅
        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

        editText = findViewById(R.id.edtText);
        button = findViewById(R.id.btnShow);

    }

    // 3. 이벤트 메서드 생성
    // Activity 최상위 Layout의 onClick setting -> 해당 레이아웃 내 view 클릭 시 hideKeyboard 실행!
    public final void hideKeyboard(View v) {
        InputMethodManager var10000 = this.imm;
        if (var10000 != null) {
            var10000.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }
    }
}

onCreate가 빌드되면서 InputMethodManager에서 참조하여 얻은 getSystemService를 사용할 수 있습니다. 키보드를 추적하기 위한 객체입니다. 이 객체를 통해 키보드 뿐만 아니라 다른 하드웨어를 관리 할 수 있습니다. 

getSystemService hideSoftInputFromWindow 메서드를 호출해서 키보드를 hide(내리기) 할 수 있습니다.

 

반대로, 키보드 show(올리기)는 아래와 같습니다.

1. activity_main.xml

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button"
        android:layout_margin="30dp"
        android:layout_weight="0.5"
        android:background="@color/colorAccent"
        
        android:onClick="showKeyboard"
        />

 activity_main.xml에 생성했던 Button의 옵션에 android:onClick="showKeyboard" 추가

 

2. MainActivity.java

// Button onClick setting -> Button 클릭 시 showKeyboard 실행!
    public final void showKeyboard(View v) {
        InputMethodManager var10000 = this.imm;
        if (var10000 != null) {
            // 주의사항 : keyboard는 EditText에서 사용하므로, 반드시 사용하려는 EditText가 포커싱 될 수 있게 파라미터 세팅 해줘야 함.
            // EditText ID = edtText
            var10000.showSoftInput(editText, 0);
        }
    }

 MainActivity.kt showKeyboard 메서드 추가 (★ 반드시 EditText를 바라보게 해야 키보드가 올라옵니다.)

키보드 show(올리기)는 getSystemService showSoftInput 메서드를 사용합니다.

 

간단한 예제라서 Kotlin과 Java 버전으로 2가지 구현했습니다. 

샘플 코드로 연습하시고 구현하려는 기능들에 응용하시면 좀 더 효율적일 것 같습니다! 

2가지 버전으로 준비하려니 코드 세팅하는데 시간이 엄청 소요되네요 ㅜ.ㅜ 

익숙해지겠지만, 복잡한 코드들은 Kotlin(일부러 Kotlin 공부 중)으로만 진행해야 할 듯 하네요 ㅋㅋㅋ 아무튼 지금까지 찰스였습니다.

728x90
반응형