Android(Java)

자주 까먹는 문법 정리

E.I.T.U 2022. 2. 23. 15:12

1. 기기 가로세로 픽셀값 가져오기

//가로 픽셀
getResources().getDisplayMetrics().widthPixels;

//세로 픽셀
getResources().getDisplayMetrics().heightPixels;

2. dimen.xml 에 정의한 사용자 정의 dp값 가져오기

getResources().getDimensionPixelOffset(R.dimen.yourDimen);

3. 상단바까지 전부 가린 FullScreen 모드로 설정하기

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

4. ActivityResultLauncher 초기화

ActivityResultLauncher<Intent> yourLauncher;

yourLauncher = registerForActivityResult(
	new ActivityResultContracts.StartActivityForResult(),
	new ActivityResultCallback<ActivityResult>() {
		@Override
		public void onActivityResult(ActivityResult result) {
			if (result.getResultCode() == RESULT_OK) {
				Intent intent = result.getData();
                
				if (intent != null) {
                
				}
			}
		}
	});

5. 프래그먼트 관리

FragmentManager fm = getSupportFragmentManager(); //getFragmentManager 쓰지 않기

FragmentTransaction transaction = fm.beginTransaction();

//프래그먼트 생성
YourFragment yourFragment = YourFragment.newInstance(); 
//생성 시 파라미터를 넘겨야할 때도 있으니 newInstance 호출에 익숙해 지자

transaction.add(R.id.yourFrameLayout, yourFragment, "yourTag");

transaction.commit(); //프래그먼트 트랜잭션 작업 후 잊지말고 commit 하기

//추가한 프래그먼트에 접근해야 할 때

//yourFragment.yourFunction(); <-- 이거 절대 안됨 바보같은 짓

YourFragment youAddedFragment = (YourFragment) fm.findFragmentByTag("yourTag");
youAddedFragment.yourFunction();

6. 내부 DB 이용하기

//데이터베이스 호출(없을 경우 생성)
SQLiteDatabase yourDB = openOrCreateDatabase("yourDB_Name", Context.MODE_PRIVATE, null);

//테이블 생성(있는 경우 자동으로 넘어감)
yourDB.execSQL("CREATE TABLE IF NOT EXISTS yourTableName ( " +
		"index INTEGER PRIMARY KEY AUTOINCREMENT, yourColumn TEXT)");

//데이터 추가
String yourData = "yourData";
yourDB.execSQL("INSERT INTO yourTableName (yourColumn) " +
		"VALUES ('" + yourData + "')");
                                           
//데이터 선택
Cursor cursor = yourDB.rawQuery("SELECT * FROM yourTableName " +
				"WHERE yourColumn = '" + yourData + "'" );
        
for (int i=0; i<cursor.getCount(); i++) {
	cursor.moveToNext();

	Log.d("YourResult", "index: " + cursor.getInt(0) + "\n" + 
			"yourColumn: " + cursor.getString(1));
}

cursor.close(); // 커서 꼭 닫기

//데이터 삭제
yourDB.execSQL("DELETE FROM yourTableName WHERE index = 1");

//데이터베이스 사용이 끝나면 반드시 close 호출
yourDB.close();

7. 화면 전환 시 애니메이션 적용

//startActivity() 혹은 onBackPressed() 뒤에 붙여주기

startActivity(intent);
overridePendingTransition(R.anim.ScreenEnterAnimation, R.anim.ScreenOutAnimation);

onBackPressed();
overridePendingTransition(R.anim.ScreenEnterAnimation, R.anim.ScreenOutAnimation);

8. EditText 이용 시 키보드 올리기, 내리기

InputMethodManager imm;

imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

EditText editText = findViewById(R.id.editText);

//키보드 올리기
editText.requestFocus();
imm.showSoftInput(editText, 0); //키보드 올릴때는 반드시 editText에 포커스를 준 후 호출

//키보드 내리기
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

9. EditText 이용 시 다른 화면 터치로 키보드 내리기

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
	View focusView = this.getCurrentFocus();
	if (focusView != null) {
		Rect rect = new Rect();
		focusView.getGlobalVisibleRect(rect);
		int x = (int) ev.getX();
		int y = (int) ev.getY();
		if (!rect.contains(x, y)) {
			InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
			imm.hideSoftInputFromWindow(focusView.getWindowToken(), 0);
			focusView.clearFocus();
			return true;
		}
	}
	return super.dispatchTouchEvent(ev);
}