11

SDK 11에 포함 된 작업 표시 줄 기능을 사용하고 싶습니다. 그러나 SDK 10 (2.3.3)의 이전 장치에서 실행되도록 할 수도 있습니다. 중요한 기능이 아니기 때문에 이전 장치의 작업 표시 줄 기능을 포기할 용의가 있습니다. 나는 반사, 래퍼 클래스 및 다른 기술에 대한 모든 독서를 마쳤습니다. 나는이 작업을하는 방법에 대해 지금 당황 스럽다. Eclipse를 사용하고 있습니다.Android SDK에서 이전 버전과 호환되는 새 기능을 코딩하는 방법은 무엇입니까?

Eclipse에서 대상을 sdk 11 이상으로 설정하지 않으면 actionBar에 대한 참조가있는 모든 곳에서 컴파일 오류가 발생합니다. 대상을 sdk 11 이상에 놓으면 컴파일되지만 이전 장치에서 실행할 수 있음을 보여주지는 않습니다. 나는 항상 android:minSdkVersion=10 세트입니다.

누군가 actionBar에 대한 참조를 만드는 방법에 대한 통찰력을 줄 수 있지만 이전 SDK 레벨을 목표로 삼을 수 있습니까? 미리 감사드립니다.

답변

18

예! 당신은 확실히 이것을 할 수 있습니다. 아래에 설명 된 패턴을 따르십시오. 당신의 AndroidManifest.xml 파일에서

선언 다음 (앱이 필요 무엇 이건 플랫폼 버전 대체) : API 11 이상의 플랫폼 버전을 대상으로

<!-- Build Target --> 
<uses-sdk android:targetSdkVersion="14" android:minSdkVersion="7" /> 

, 당신은 이클립스 링크 할 수 있습니다 (컴파일) 네이티브 ActionBar 클래스와 비교합니다. 이전 버전의 최소 플랫폼 버전을 제공하면 이전 버전의 Android에 앱을 설치할 수 있습니다.

public class CompatibilityManager { 
    public static final String KINDLE_FIRE_MODEL = "Kindle Fire"; 

    /** 
    * Get the current Android API level. 
    */ 
    public static int getSdkVersion() { 
     return android.os.Build.VERSION.SDK_INT; 
    } 

    /** 
    * Determine if the device is running API level 11 or higher. 
    */ 
    public static boolean isHoneycomb() { 
     return getSdkVersion() >= Build.VERSION_CODES.HONEYCOMB; 
    } 

    /** 
    * Determine if the device is running API level 14 or higher. 
    */ 
    public static boolean isIceCreamSandwich() { 
     return getSdkVersion() >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; 
    } 

    /** 
    * Determine if the current device is a first generation Kindle Fire. 
    * @return true if the device model is equal to "Kindle Fire", false if otherwise. 
    */ 
    public static boolean isKindleFire() { 
     return Build.MODEL.equals(KINDLE_FIRE_MODEL); 
    } 
} 

또한 고려해 볼 수 있습니다 :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (CompatibilityManager.isHoneycomb()) { 
     final ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayShowHomeEnabled(true); 
     // ... 
    } else { 
     // The ActionBar is unavailable! 
     // ... 
    } 
} 

CompatibilityManager.java 클래스는 단순히 SDK의 현재 버전을 결정하는 정적 도우미 메서드를 제공합니다

귀하의 활동 코드는 다음과 같이 표시한다 ActionBarSherlock 라이브러리를 활용하면 Android 2.x에 호환되는 ActionBar API를 제공합니다 :

라이브러리는 을 사용할 수 있거나 자동으로 사용자 정의 구현을 레이아웃으로 래핑 할 때 기본 동작 표시 줄을 사용합니다. 이를 통해 Android 2.x의 모든 버전에 대해 작업 표시 줄로 응용 프로그램을 쉽게 개발할 수 있습니다.

재미있게 보내십시오!

+1

일반적인 이전 버전과의 호환성에 대한 추가 문서는 http://developer.android.com/resources/articles/backward-compatibility.html에서 찾을 수 있습니다. 작업 표시 줄 설명서에는이 내용과 기본 형식으로 사용하는 방법이 나와 있습니다 여전히 이전 버전과 호환됩니다. http://developer.android.com/guide/topics/ui/actionbar.html#Adding – cistearns

+0

그래, 비슷한 코딩을 했어. 나는 너에게도 제안을 시도 할 것이다. 내가 발견 한 문제는 앱을 실행하려고 할 때 에뮬레이터 (Eclipse에서)가 나왔을 때 대상 레벨 장치 만 나타났습니다. 필자는 AVD 관리자를 사용하여 저레벨의 장치를 시작한 다음 실행 중일 때 특별히 사용했습니다. ActionBarSherlock을 사용하지 않기로 선택했습니다. 지금은 새로운 기기에서만이 기능을 원합니다. 나는 나중에 내 마음을 바꿀지도 모른다. 감사. –

+2

AndroidManifest.xml에서 빌드 대상 및 최소 버전을 변경 한 후 Eclipse에 빌드 대상이 변경되었음을 알릴 필요가 있습니다. 이렇게하려면 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 '속성'을 선택하십시오.그런 다음 왼쪽 메뉴에서 'Android'를 선택하고 점검 대상이 매니페스트에 지정된 대상과 동일한 지 확인하십시오. 이 모든 것은 프로젝트 루트 디렉토리에있는'project.properties' 빌드 파일을 갱신합니다. – twaddington

관련 문제