2011-07-11 30 views
13

Tôi đang viết một ứng dụng cho android (2.1> 3.1) và tôi muốn sử dụng thực hành quen thuộc của việc sử dụng ứng dụng Biểu tượng trong ứng dụng Honeycomb để đi đến hoạt động tại nhà, tuy nhiên, khi tôi chạy hoạt động trên các thiết bị không tổ ong trước đó, nơi Activity.getActionBar(); phương pháp chưa tồn tại, các ứng dụng lực lượng đóng cửa, làm thế nào tôi có thể chỉ chạy mã này quy định nếu thiết bị đang chạy tổ ong?ActionBar pre Honeycomb

@Override 
protected void onStart() { 
    super.onStart(); 
    ActionBar actionBar = this.getActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
} 

Cảm ơn bạn đã giúp đỡ và có một ngày tuyệt vời.

Trả lời

13

Android pre-Honeycomb không có ActionBar, vì vậy mọi phương thức liên quan đến actionBar sẽ không thành công. Bạn nên xem code from the Google IO app, sử dụng ActionBar cho cả Honeycomb và pre-Honeycomb.

Nói một cách đơn giản, nó sẽ không tự hoạt động, bạn sẽ phải bao gồm mã ActionBar của riêng bạn.

3

Tôi nghĩ rằng mã là tự giải thích

private static int sdkVersion; 
static 
{ 
    try { 
     sdkVersion = Integer.parseInt(android.os.Build.VERSION.SDK); 
    } catch (Exception ex) { 
    } 
    } 

    /** Device support the froyo (Android 2.2) APIs */ 
    public static boolean isAndroid22() { 
    return sdkVersion >= 8; 
    } 

    /** Device support the Gingerbread (Android 2.3) APIs */ 
    public static boolean isAndroid23() { 
    return sdkVersion >= 9; 
    } 

    /** Device supports the Honeycomb (Android 3.0) APIs */ 
    public static boolean isAndroid30() { 
    return sdkVersion >= 11; 
    } 
4

Kể từ khi actionbar không tồn tại trên tổ ong trước bạn sẽ phải làm gì với cái gì khác. Một gợi ý sẽ là sử dụng thư viện thanh tác vụ johannilssons có thể tìm thấy trên github. liên kết trực tiếp: https://github.com/johannilsson/android-actionbar

+0

không hoạt động như mong muốn .... Ví dụ được cung cấp tải xuống có lỗi ... – aProgrammer

68

Tôi đã viết một thư viện dành cho Android sẽ tự động quấn pre-3.0 hoạt động của bạn với một tuỳ chỉnh thực hiện mẫu thiết kế thanh hành động. Sau đó, bạn có thể gọi getSupportActionBar() sẽ cung cấp giao diện chung cho cả triển khai gốc và tùy chỉnh, tùy thuộc vào phiên bản ứng dụng Android của bạn đang chạy.

Thư viện cũng cho phép bạn áp dụng kiểu tùy chỉnh cho cả hai thanh tác vụ này thông qua một chủ đề duy nhất.

Bạn có thể tìm hiểu thêm thông tin cũng như ảnh chụp màn hình của ứng dụng mẫu tại actionbarsherlock.com.

Thư viện là nguồn mở 100% và có sẵn tại github.com/JakeWharton/ActionBarSherlock.

+0

Để làm nặng cho dự án của tôi ( – Greensy

+0

Nếu tôi không sử dụng SherlockActivity hoặc Hoạt động đơn giản nhưng MapsActivity không hỗ trợ sherlock và 'getSupportActionBar()'? – Csabi

+0

Google hiện đã cung cấp [một giải pháp tốt hơn] (http://android-developers.blogspot.in/2013/08/actionbarcompat-and-io-2013-app-source.html) –

4

Từ Hướng dẫn API cho Action Bar nó nói:

ứng dụng mẫu Action Bar Compatibility cung cấp một bố trí lớp API và thanh tác vụ cho phép ứng dụng của bạn sử dụng một số các API ActionBar và cũng hỗ trợ các phiên bản cũ của Android bằng cách thay thế thanh tiêu đề truyền thống bằng bố cục thanh tác vụ tùy chỉnh.

Bạn có thể nhận điều này bằng installing mẫu Android 4.1 (API 16).

Sau đó, trong Eclipse:

  1. Tới File> New> Project
  2. Android> Dự án mẫu Android
  3. Kiểm tra Android 4.1
  4. Chọn ActionBarCompat
+0

Bạn tiết kiệm một ngày của tôi! – diewland

+1

Dự án ActionBarCompat không có setDisplayHomeAsUpEnabled –

+1

@IgorGanapolsky Có, nó có, tôi có nó làm việc trong dự án của tôi: getSupportActionBar(). setDisplayHomeAsUpEnabled (true); –

3

Tính đến Revision 18 Android Support library chứa hỗ trợ ActionBar trở về API Level 7. Điều này bây giờ là cách đề nghị để hỗ trợ các ActionBar cho tất cả các phiên bản của Android từ 2.1 lên và dễ dàng hơn đáng kể vào sử dụng thư viện của bên thứ ba hoặc các thư mục khác.