시스템 설정 이벤트에 응답(구성 클래스)
이 섹션 소개:
이 섹션에서 소개하는 Configuration 클래스는 화면 방향과 같은 휴대폰 장치의 구성 정보를 설명하는 데 사용됩니다. 터치 스크린의 터치 방법 등. 사용자 정의 ROM을 갖고 있는 친구들은 다음을 수행할 수 있다는 것을 알아야 한다고 생각합니다. 프레임워크/베이스/코어/java/android/content/res/Configuration.java 이 클래스를 찾아 기본 글꼴 크기 조정 등 관련 설정을 변경해보세요! 관심이 있으시면 직접 찾아보실 수 있습니다! Android 개발에서 이 섹션에 설명된 Configuration 클래스의 사용 방법~ API 문서: Configuration
1. Configuration
- densityDpi에서 제공하는 메서드 목록: 화면 밀도
- fontScale: 현재 사용자가 설정한 글꼴의 배율 인수
- hardKeyboardHidden: 결정 하드 키보드 표시 여부에 관계없이 두 가지 선택 값이 있습니다: HARDKEYBOARDHIDDEN_NO, HARDKEYBOARDHIDDEN_YES, 각각 16진수 0과 1
- keyboard: 현재 연결된 키보드 유형 가져오기: 이 속성의 반환 값: KEYBOARD_12KEY(만 12키 작은 키보드), KEYBOARD_NOKEYS, KEYBOARD_QWERTY(일반 키보드)
- keyboardHidden: 이 속성은 현재 키보드를 사용할 수 있는지 여부를 식별하는 부울 값을 반환합니다. 이 속성은 시스템의 하드웨어 키보드뿐만 아니라 시스템의 소프트 키보드(화면에 위치)도 결정합니다.
- locale: 사용자의 현재 로케일 가져오기
- mcc: 모바일 신호의 국가 코드 가져오기
- mnc: 모바일 신호의 네트워크 코드 가져오기
ps: 국가 코드와 네트워크 코드가 공동으로 결정 현재 휴대폰 네트워크 운영 비즈니스- navigation: 시스템의 방향 탐색 장치 유형을 결정합니다. 이 속성의 반환 값: NAVIGATION_NONAV(탐색 없음), NAVIGATION_DPAD (DPAD 네비게이션) NAVIGATION_TRACKBALL (트랙볼 네비게이션), NAVIGATION_WHEEL (휠 네비게이션)
- orientation: 시스템 화면의 방향을 가져옵니다. 이 속성의 반환 값: ORIENTATION_LANDSCAPE(가로 화면), ORIENTATION_PORTRAIT(세로 화면)
- screenHeightDp, screenWidthDp: dp로 표시되는 화면의 사용 가능한 높이와 너비
- touchscreen: 터치 모드 가져오기 시스템 터치스크린의 모습입니다. 이 속성의 반환 값: TOUCHSCREEN_NOTOUCH(터치 스크린 없음), TOUCHSCREEN_STYLUS(스타일러스 터치 스크린), TOUCHSCREEN_FINGER(손가락을 받는 터치 스크린)
2. 테스트할 간단한 예를 작성하세요.
스크린샷 실행:
코드 구현:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main) ;
TextView txtResult = (TextView) findViewById(R. id.txtResult);
StringBuffer 상태 = new StringBuffer();
/1获取系统的Configuration对象
구성 cfg = getResources().getConfiguration();
//②想查什么查什么
status.append(" DensityDpi:" + cfg.densityDpi + "n");
status.append("fontScale:" + cfg.fontScale + "n");
status.append("hardKeyboardHidden:" + cfg.hardKeyboardHidden + "n") ;
status.append("keyboard:" + cfg.keyboard + "n");
status.append("keyboardHidden:" + cfg.keyboardHidden + "n");
status.append("로케일:" + cfg .locale + "n");
status.append("mcc:" + cfg.mcc + "n");
status.append("mnc:" + cfg.mnc + "n");
status.append ("navigation:" + cfg.navigation + "n");
status.append("navigationHidden:" + cfg.navigationHidden + "n");
status.append("orientation:" + cfg.orientation + "n ");
status.append("screenHeightDp:" + cfg.screenHeightDp + "n");
status.append("screenWidthDp:" + cfg.screenWidthDp + "n");
status.append("screenLayout:" + cfg.screenLayout + "n");
status.append("smallestScreenWidthDp:" + cfg.densityDpi + "n");
status.append("터치스크린:" + cfg.densityDpi + "n");
status.append("uiMode:" + cfg.densityDpi + "n");
txtResult.setText(status.toString());
}
}
3. 시스템 설정 변경에 응답하도록 onConfigurationChanged를 다시 작성하세요.
이 방법은 시스템 설정 변경을 모니터링하는 데 사용됩니다. 콜백을 기반으로 하는 시간 처리 방법입니다. 시스템 설정이 변경되면 자동으로 실행됩니다. 그러나 다음 방법을 사용하여 모니터링하는 경우 targetSdkVersion 속성은 최대 12까지만 설정할 수 있습니다. 12보다 높으면 메서드가 트리거되지 않습니다! 다음은 참고용으로 가로 화면과 세로 화면 전환 예시입니다. 기타 정보는 직접 구글링해 보세요~
코드 예시: 간단한 버튼을 클릭하면 가로 화면과 세로 화면 사이를 전환한 다음 토스트가 가능합니다. 프롬프트
렌더링 실행:
구현 코드:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
버튼 btn = (버튼) findViewById(R.id.btncahange); ㅋㅋㅋ 구성 config = getResources().getConfiguration();
//如果是横屏的话切换成竖屏
if( config.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
//如果竖屏的话切换成横屏
if(config.orientation == Configuration.ORIENTATION_PORTRAIT)
{
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} ; = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE?"horizontal screen":"vertical screen";
Toast.makeText(MainActivity.this, "시스템 화면 방향이 변경되었습니다. n 수정된 방향은" + 화면, Toast.LENGTH_SHORT) .show();
}
}
또한 AndroidManifest.xml에 다음을 추가해야 합니다. 설명:
Permission:
android:configChanges="orientation"
targetSdkVersion을 12, 12 이상으로 변경하는 것도 허용됩니다이 섹션 요약:이 섹션에서는 다음을 설명합니다. onConfigurationChanged는 시스템 설정 변경에 응답하므로 일반적인 이해만 있으면 됩니다. 나중에 활용해서 더 깊게 들어가보겠습니다~