2012-11-30 68 views
8

我剛開始做Android開發, 更多或更少繼http://developer.android.com/training/basics/firstapp/starting-activity.html教程, 一兩件事一直纏着我: 我有兩個班,既創造使用「Android的活動」創建嚮導:如何解決「通話需要API級別11」與Android Activity?

public class PlacesActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_places); 
     // I manually commented out the following line to get it to compile. 
     // getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    // ... other methods 
} 

public class ShowOnePlace extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_show_one_place); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    // ... other methods 
} 

Eclipse中不停地給我下面的錯誤:

呼叫需要API級11(電流min爲8): android.app.Activity#getActionBar

呼叫需要API級11(電流 min的8):android.app.ActionBar#setDisplayHomeAsUpEnabled

直到我註釋掉一行(如上所示)。 現在應用程序似乎編譯和運行我的Android設備 沒有錯誤。 (好吧,至少沒有錯誤)。

所以:

  • 爲什麼getActionBar().setDisplayHomeAsUpEnabled(true);給出的錯誤在一個班,但相同​​的一行是不是一個錯誤 - 甚至不是一個警告 - 在其他類?
  • 在「Android活動」創建嚮導中是否存在錯誤,並且不知何故getActionBar().setDisplayHomeAsUpEnabled(true);聲明在一個活動中是錯誤的,但在另一個活動中完全正常?
  • 在Eclipse Lint中可能存在一個錯誤,並且該語句在兩個活動中確實都可以(或者在兩個活動中可能都是錯誤的)?
  • 我該怎麼做才能解決這個問題,而無需將minSdkVersion =「8」更改爲minSdkVersion =「11」?我的印象是,「android-support-v4.jar」文件是一個兼容性庫,它運行在版本8設備上,用於處理在版本11設備中本機處理的內容。
  • 當我看到這個錯誤時,什麼是正確的事情?

回答

1
Why is "getActionBar().setDisplayHomeAsUpEnabled(true);" give that error in one class, but that exact same line is not an error -- not even a warning -- in the other class? 

只需編輯第二個文件,並保存。它會給錯誤!

Is there a bug in the "Android Activity" creation wizard, and somehow that "getActionBar().setDisplayHomeAsUpEnabled(true);" statement is wrong in one activity, but perfectly fine in the other? 

可能

Is maybe there a bug in Eclipse Lint, and that statement is actually OK in both activities (or perhaps wrong in both activities)? 

都錯在給定的情況下

What do I have to do so that I can fix this without changing minSdkVersion="8" to minSdkVersion="11"? I was under the impression that the "android-support-v4.jar" file was a compatibility library that ran on version 8 devices to handle stuff that's handled natively in version 11 devices. 

您需要更改minSDK我想沒有其他選擇。如果您想使用Functions API 11

14

簡而言之,Action Bar在舊版Android中不可用,而且Google的支持庫也不提供該功能。這就是lint抱怨的原因 - 您正在使用API​​ verison 8中不存在的代碼,該代碼被設置爲您的應用支持的最低API級別。如果你想在舊版android版本上使用操作欄,可以使用名爲「Action Bar Sherlock」的開源庫。

現在,爲了回答您的問題

  1. 這應該是這兩類錯誤。它在其中一個類中不是錯誤的原因實際上並不重要。
  2. 沒有
  3. 這是錯誤的兩種活動
  4. 你必須使用開放源碼庫在較舊的Android版本提供了操作欄,即動作條福爾摩斯用於此目的
  5. 做真正正確的做法是偉大工程打開Android Developers網站並閱讀有關支持庫的侷限性。
+0

也可以:http://developer.android.com允許你設置你想要的API級別,這樣你就不會意外地包含那些在你的應用中不起作用的東西。 – DigCamara

16

使用getSupportActionBar()而不是getActionBar()。這將在API級別低於11時提供ActionBar功能。

4

如果使用appcompat-v7及更高版本,則不能使用actionbarsherlock,因爲它們都具有相同的屬性。所以這個庫在資源上有衝突。

與支持庫做到這一點,你需要: (我希望你們媒體鏈接下載並集成到項目中的支持​​庫)

  1. 您必須使用動作條從支持庫,所以你必須使用正確的ActionBarActivity實現擴展您的活動 。

進口:

import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBar; 

活動:

public class PlacesActivity extends ActionBarActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_places); 
     // I manually commented out the following line to get it to compile. 
     // getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    // ... other methods 
} 

,讓你可以從活動中的動作條實行由舊版本的支持:

ActionBar actionBar = activity.getSupportActionBar(); 

編寫代碼&玩得開心!

-2

問題是當你在eclipsy中創建一個android應用程序時,要求選擇最小和最大api支持,並且默認eclips選擇8作爲min和19作爲max,如果遇到上述錯誤意味着你正在使用的函數是版本大於8
解決這個問題,我只是去AndroidManifest。以下

<uses-sdk 
     android:minSdkVersion="19" 
     android:targetSdkVersion="19" /> 

的minSdkVersion默認XML文件,並改變是8

+4

並失去75%的android用戶... – lenooh

0

只是做一個改變androidmanifest

<uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="18" /> 
3

我通常以「@TargetApi修復(12) 「註釋

@TargetApi(11) 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_show_one_place); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
相關問題