Android 에서 어떻게 부유 Activity 를 실현 하 는 지 상세 하 게 설명 합 니 다.

통상 적 으로 이미 최 적 화 된 모 바 일 앱 을 위 한 태 블 릿 버 전도 어렵 지 않다.Fragment,decompse Entities 등 구성 요 소 를 사용 하면 빠 르 고 쉽게 완성 할 수 있 습 니 다.하지만 최근 한 프로젝트 를 만 나 는 것 은 쉽 지 않다.우 리 는 태 블 릿 앱(Action BarSherlock 라 이브 러 리 기반,ABS 라 고도 함)을 개발 하기 만 하면 다음 과 같은 기능 을 실현 해 야 한다.
4.567917.떠 있 고 투명 하 게 표 시 된 Activity 를 실현 하면 사용자 가 입력 작업 을 할 때 다른 Activity 나 자신의 창 배경 을 볼 수 있 습 니 다.
4.567917.떠 있 는 Activity 의 원시 사 이 즈 를 보존 하고 수평 방향 과 수직 방향 을 포함한다.가장 좋 은 것 은 Activity 가 중간 에 표시 되 고 작은 사이즈 의 장치 에 전체 화면 으로 표시 되 며 큰 사이즈 의 장치 에 최소 2/3 의 크기 를 표시 하 는 것 이다.
우리 가 전에 이미 개 발 된 모 바 일 앱 이 있다 고 말 했 기 때문에 이것 을 말 하기 위해 재 설계 하고 인 코딩 을 한다 면 시간 을 낭비 할 것 이다.아래 의 설명 과 설명 은 모두 기 존의 코드 를 바탕 으로 Activity 의 실현 을 수정 하여 태 블 릿 장치 에 적합 하고 코드 의 최대 이 용 률 에 이 르 렀 다.
如何在Android中实现悬浮Activity
如何在Android中实现悬浮Activity
임무 개술
여기 에는 주로 세 가지 임무 가 있다.
4.567917.기 존의 Activity 의 사 이 즈 를 계산 하고 새로운 좌표 위 치 를 확인한다.
4.567917.Activity 를 투명 하 게 하고 그 배경 을 볼 수 있다.
4.567917.처리 배경 으로 인해 사용자 와 더 이상 상호작용 을 할 수 없습니다창 크기 계산
앞에서 언급 한 바 와 같이 우 리 는 기 존의 핸드폰 앱 을 바탕 으로(Action BarSherlock 라 이브 러 리 를 사 용 했 습 니 다)이 라 이브 러 리 는 외부 라 이브 러 리 형식 으로 프로젝트 에 통합 되 었 고 소스 코드 를 가지 고 있 습 니 다.
ABS 의 소스 코드 에 익숙 하거나 원생 Action Bar 의 구조 에 대해 알 고 있 었 다 면 Activity 의 크기 를 바 꾸 면 set ContentView 방법 을 호출 할 때 기능 이 실현 되 지 않 았 다.Action Bar 의 크기 와 위 치 는 변 하지 않 았 다.이때 해 야 할 일 은 더 높 은 단계 에서 조작 하 는 것 이다.시스템 에서 Action Bar 를 그 릴 때―ABS 나 원생 의 Action Bar 를 그 릴 때,이 때 는 창의 데이터 가 전혀 없 기 때문에 우 리 는 필요 에 따라 조정 할 수 있다.
가장 눈 에 띄 는 방법 은 Window 의 사 이 즈 를 바 꾸 는 것 입 니 다.따라서 다음 코드 가 필요 합 니 다.

@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
if (getResources().getBoolean(R.bool.is_tablet) && mOpenAsSmallWindow) {
final View view = getWindow().getDecorView();
final WindowManager.LayoutParams lp = (WindowManager.LayoutParams) view.getLayoutParams();
lp.gravity = Gravity.CENTER;
lp.width = mActivityWindowWidth;
lp.height = mActivityWindowHeight;
getWindowManager().updateViewLayout(view, lp);
}
}
코드 가 실 행 된 후에 창의 크기 가 mActivity Window Width 와 mActivity Window Height 의 값 에 따라 바 뀌 었 음 을 볼 수 있 습 니 다.
is_tablet 은 태 블 릿 에 만 유효 합 니 다.mOpenAsSmallWindow 표 지 는 창 전체 화면 을 표시 하거나 새로운 창 으로 렌 더 링 할 지 여 부 를 표시 합 니 다.
실행 중 오류 가 발생 하면 오류 로 그 는:Action BarView can only be used with Android:layoutwidth="match_parent" (or fill_parent).걱정 하지 마 세 요.저 희 는 ABS 소스 코드 가 있 으 니 소스 코드 를 직접 수정 하면 됩 니 다.
Action BarView 라 는 파일 을 열 고 onMeasure 방법 에서 던 진 이상 주석 을 없 애 면 문 제 를 해결 할 수 있 을 것 입 니 다.안 드 로 이 드 는 비교적 특수 한 권한 통제 체 제 를 사용 하기 때문에 여기 서 우 리 는 계속 깊이 들 어 갈 수 있 는 것 이 많 지 않 고 메뉴 항목 등 을 대충 계산 할 수 있 지만 많은 것 을 우 리 는 통제 할 수 없다.
메모:이 방법 은 원생 Action Bar 에서 테스트 되 지 않 았 습 니 다.여 기 는 작가 의 Android 버 전에 서 만 테스트 되 었 기 때 문 입 니 다.Action Bar 를 사용 하지 않 으 려 면 Action BarSherlock 클래스 를 찾 은 다음 코드 를 주석 해 야 합 니 다.

 // registerImplementation(ActionBarSherlockNative.class);
코드 실행 에 문제 가 없 을 것 같 습 니 다.그리고 불투명 한 배경 을 가 진 Activity 를 볼 수 있 습 니 다.
如何在Android中实现悬浮Activity
투명 기능 추가
액 티 비 티 의 사이즈 와 크기 가 모두 바 뀌 었 으 니 이 제 는 투명 하 게 해 야 한다.이 태 블 릿 의 Activity 테마 에 이 속성 을 추가 할 수 있 습 니 다:

<item name="android:windowIsTranslucent">
  true
</item>
이 속성 값 은 Activity 배경 을 투명 하 게 합 니 다.
如何在Android中实现悬浮Activity
보기 에는 괜 찮 은 것 같 지만,효 과 는 이미 기본적으로 실현 되 었 다.
또 하나의 작은 문제 가 있 습 니 다.상기 테스트 는 모두 Nexus 7 android 4.3 에서 실 행 된 것 입 니 다.이 앱 은 Nexus 7 의 android 4.2 버 전에 서 Activity 가 표시 되 지 않 았 습 니 다.
여러 번 의 디 버 깅 과 로그 검 사 를 거 친 후에 우리 의 Activity(MainActivity 라 고 합 니 다)가 소각 되 지 않 았 기 때문에 안 드 로 이 드 시스템 은 이 를 무시 하고 그리 지 않 았 습 니 다.왜 일 까요?안 드 로 이 드 4.4 KitKat 가 최적화 알고리즘 을 새로 추 가 했 기 때문이다.이 최적화 알고리즘 때문에 안 드 로 이 드 시스템 은 Activity 가 전체 화면 디 스 플레이 모드(Window Manager 의 변화 에 관 계 없 이)를 보면 이 MainActivity 를 그립 니 다.그러나 그 위 에 있 는 것 은 무시 되 기 때문에 우 리 는 아무것도 볼 수 없습니다.
우 리 는 이 문 제 를 연구 한 후에 대화 상자 와 다른 전체 화면 에 표시 되 지 않 은 위 젯 이 정상적으로 그 려 질 수 있다 는 것 을 발견 했다.그래서 우 리 는 테마 theme 에 이 몇 줄 을 더 해 야 한다.

<item name="android:windowIsFloating">true</item>
<item name="android:windowCloseOnTouchOutside">false</item>
<item name="android:colorBackgroundCacheHint"><a href="http://www.jobbole.com/members/NULL/" rel="nofollow">@null</a></item>
<item name="android:backgroundDimEnabled">true</item>
이렇게 하면 문제 가 해결 된다.다시 말하자면 우 리 는 떠 있 고 투명 한 Activity 를 실현 했다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기