Android中Activity和AppcompatActivity的區別(詳細解析)

繼承AppCompatActivity的界面。 如下圖所示:
這裏寫圖片描述
copy界面代碼

public class MainActivity extends AppCompatActivity {  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
    }  
}  

大家可以看到在界面最上面會出現一個ActionBar,默認顯示項目的名稱Toolbar。下面我們將AS項目中的父類AppCompatActivity手動替換成Activity試試看。

public class MainActivity extends Activity {  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
    }  
}  

修改AppCompatActivity爲Activity,並導入相應的包。這樣我們的項目代碼在Eclipse與AS的就保持一致了,運行一下看看效果。
這裏寫圖片描述
程序運行後,大家可以發現頂部的ActionBar不見了,代碼中都是繼承Activity的,但是運行出來的界面確不一樣,所以在AS中創建項目的時候,自動繼承的是AppCompatActivity。

ActionBar向前兼容,出現在support v7裏,如果需要使用兼容版的actionbar,則繼承support v7提供的ActionBarActivity
從下圖看ActionBarActivity實際就是AppCompatActivity,就是帶有標題欄的Activity.
這裏寫圖片描述
但是在compile ‘com.android.support:appcompat-v7:26.1.0’包下沒有ActionBarActivity這個類了。
所以AppcompaActivity其實就是ActionBarActivity

去掉AppcompaActivity的標題欄方法:
if (getSupportActionBar()!=null){
getSupportActionBar().hide();
}
總結一下:AppcompaActivity相對於Activity的主要的兩點變化;
1:主界面帶有toolbar的標題欄;
2,theme主題只能用android:theme=”@style/AppTheme (appTheme主題或者其子類),而不能用android:style。 否則會提示錯誤: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章