1. eclipse導入v7包沒有AppCompatActivity這個類
v7包版本問題,請下載23.0之後的v7包導入.
可以看到你的android.support.v7.app.AppCompatActivity裡面都是空的,刪掉重新導入,或者自己解壓包看看這個包裡面有沒有文件.
2. 在Android Studio中找不到AppCompatActivity解決方案
在創建新的.java文件時,要導入父類中的 AppCompatActivity,報錯,無法找到這個父類。
解決方案:
先找到「project structure」快捷鍵也可以,然後找到app--Dependencies,再點擊右上角的「+」,出現如下圖所示
點擊「Library dependency」
再搜索框中,輸入com.android.support:appcompat-v7 添加上就可以了。
3. AppCompatActivity
title: AppCompatActivity
date: 2017-04-09 01:08:17
tags: 學習
categories: android
[TOC]
官方介紹:
從Android 21之後引入Material Design的設計方式,為了支持Material Color 、調色板、toolbar等各種新特性,AppCompatActivity就應用而生。
代替了原有的ActionBarActivity。在AppCompatActivity中,更是引入了AppCompatDelegate類的設計,
可以在普通的Acitivity中使用AppCompate的相關特性。
使用AppCompatActivity必須繼承Theme.AppCompat樣式。然後就可以使用colorPrimary,colorPrimaryDark和colorAccent進行相應的設置。
在以前Android系統推薦的是ActionBar,但是ActionBar的自定義效果不好。現在新的ToolBar可以完美的擴展。
詳細的ToolBar使用還需要單獨研究一下
可以結合Snackbar使用,Snackbar可以代替Toast等使用,並且它可以在一定程度上代替對話框功能。
這個對話框相比較以前默認的,確實不是一個檔次的啊。
AppCompatActivity除過自己可以設置一些Material風格的顏色,更多的是和Material風格的控制項搭配使用,比如toolBar、Snackbar和AlertDialog等等。
如果這些控制項要直接在Activity中使用,那麼必須通過APPCompateDelegate去進行控制。
注意:使用AppCompatActivity或直接使用APPCompateDelegate,都必須使用Theme.AppCompat樣式。
如何給非AppCompatActivity添加Toolbar
用好AppCompatActivity
4. Android Studio 3.3+ 每次打開項目出現AppCompatActivity等組件找不到的解決辦法
打開之前正常的項目出現各種明明已經引用的組件,包含不限於系統的 AppCompatActivity 爆紅找不到,查看項目設置中庫的確已經引用。
等待 Clean 完成後進行第二步:
搞定。
目前尚不清楚此 bug 的原因,不過 Google 這更穩定版本還各種出問題的毛病真讓人無奈啊...
5. 如何給非AppCompatActivity添加Toolbar
現在App中基本都會用Toolbar來代替ActionBar,下面是可能的代碼片段。
布局文件
<LinearLayout xmlns:android=""
xmlns:app=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppComp
6. 如何給非AppCompatActivity添加Toolbar
你可以使用支持包提供了新的AppCompatDelegate構件,很容易地將Toolbar添加到Activity上。
1,將Toolbar控制項添加到布局文件上面
ActionBar現在已經被不再被告維護了,它應該被Toolbar取代,因為後者允許了更多的UI靈活性,並且允許Activity更容易地兼容於材料設計的UI模式。
因為我們要在這使用支持包,那麼我們將使用Toolbar的支持版本,不然的話,將只能在API 21+上可用。
在xml中添加如下內容:
1 <android.support.v7.widget.Toolbar
2 android:id="@+id/my_awesome_toolbar"
3 android:layout_height="@dimen/abc_action_bar_
4 default_height_material"
5 android:layout_width="match_parent"
6 android:minHeight="@dimen/abc_action_bar_
7 default_height_material"
8 android:background="?attr/colorPrimary"
9 />
2,修改主題:
因為我們要將Toolbar嵌入到布局文件中,所以我們需要不支持ActionBar的主題。
所以,在確定在styles.xml文件中使用主題Theme.AppCompat.NoActionBar。
特別推薦,要在你的主題上添加如下所示的材料設計色彩項,這將很容易地實現對Toolbar和狀態欄的著色(只有API 21+的設備上才會對狀態欄進行著色):
1 <!-- Base application theme. -->
2 <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
3 <!-- colorPrimary is used for coloring the Toolbar -->
4 <item name="colorPrimary">#3F51B5</item>
5 <!-- colorPrimaryDark is used for coloring the status bar -->
6 <item name="colorPrimaryDark">#303F9F</item>
7 <!-- colorAccent is used as the default value for colorControlActivated
8 which is used to tint widgets -->
9 <item name="colorAccent">#FFAB40</item>
10 </style>
3,將AppCompatDelegate添加到Activity裡面
AppCompatDelegate是一個委託代表,它將AppCompatActivity的特性提供給Activity,而且只能通過create()方法創建,此時它需要兩個參數,Activity和AppCompatCallback。
所以,首先,我們將Activity實現AppCompatCallback介面,在本例中,可以不必具體實現要覆蓋的方法。
1 public class MainActivity extends Activity implements AppCompatCallback {
2 @Override
3 public void onSupportActionModeStarted(ActionMode mode) {
4 //let's leave this empty, for now
5 }
6 @Override
7 public void onSupportActionModeFinished(ActionMode mode) {
8 // let's leave this empty, for now
9 }
10 }
然後,在Activity的onCreate()方法中,
通過AppCompatDelegate.create()方法創建AppCompatDelegate;
調用AppCompatDelegate.create();(有些Activity的生命周期方法應用由該AppCompatDelegate代理)
通過AppCompatDelegate.setContentView()方法填充布局文件;
通過AppCompatDelegate.setSupportActionbar()將Toolbar添加給AppCompatDelegate。
1 private AppCompatDelegate delegate;
2 @Override
3 protected void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5 //let's create the delegate, passing the activity at both arguments (Activity, AppCompatCallback)
6 delegate = AppCompatDelegate.create(this, this);
7 //we need to call the onCreate() of the AppCompatDelegate
8 delegate.onCreate(savedInstanceState);
9 //we use the delegate to inflate the layout
10 delegate.setContentView(R.layout.activity_main);
11 //Finally, let's add the Toolbar
12 Toolbar toolbar= (Toolbar) findViewById(R.id.my_awesome_toolbar);
13 delegate.setSupportActionBar(toolbar);
14 }
特別推薦,一個Activity只能鏈接到一個AppCompatDelegate實例,因此通過create()方法返回的實例應該保存在Activity裡面直到該Activity被銷毀。
現在,你已經完成了,運行你的應用,然後你的Activity將會魔法一般擁有一個Toolbar,而且看起來完全你是材料設計的AppCompatActivity!
7. Android使用compat26找不到R文件,使用20無法使用AppCompatActivity,急求解決方法
換個v7包吧
去到東軟網站下載一個
android_m2repository_r47.zip
網站:
http://mirrors.neusoft.e.cn/android/repository/
嗯,正版原裝的AppCompatActivity不用出來了,
或者你這樣辦,把你項目里的v4,v7都刪了
你如果用eclipse,把全部v4,v7jar都刪了,如果是as,把依賴都刪了,然後關鍵就來了,把我上面跟你推薦的官方正版源碼都放在你項目裡面,注意也要新建下android的包名,就是android.support.v4 android.support.v7
把源碼都放進去,應該就沒問題了
8. activity,actionbaractivity appcompatactivity 有什麼區別
之前一直用Eclipse寫Android,最近換到了Android Studio,因為畢竟是Google推薦的,也是未來的大勢所趨,在使用過程中,遇到一些關於Activity的問題,下面來討論下。
先說Eclipse。先新建項目,其中Minimum Required SDK 選擇API14 :Android 4.0,(Icecream Sandwich),Target SDK和Compile With選擇API19:Android 4.4(KitKat),新建完成後,MainActivity 自動繼承自Activity。以下是程序運行後的截圖:。
可以發現,在主界面頂端會出現ActionBar,顯示當前Activity的名稱AndroidTest。這是Eclipse的情況,下面看一下Android Studio中的情況。
在Android Studio中先新建一個Project,Application name為AndroidTest,然後在platform和SDK中選擇Phone And Tablet.Minimum SDK選擇API 14:Android 4.0(IceCreamSandwich),新建完成後,自動會在Project中新建一個Mole,名稱為app.此時可以發現MainActivity是默認繼承自ActionBarActivity.並且在ActionBarActivity上有一條刪除線,表現該ActionBarActivity已經過時了,查看提示會發現:「android.support.v7.app.ActionBarActivity is deprecated」.表示已經是過時的了,或者說是不推薦使用了。以下是程序運行後的截圖:。可以發現在頂端還是會出現ActionBar,默認顯示項目名稱AndroidTest.與Eclipse中的項目沒有任何區別,只是MainActivity繼承的父類分別是Activity和ActionBarActivity而已。
由於Android開發中一個Class的過時總會讓人不爽,下面將AS中繼承的ActionBarActivity手動改成Activity.並導入對應的包,程序運行後的截圖如下所示:。可以發現頂端的ActionBar不見了。這就和Eclipse中完全不同了。同樣是繼承自Activity,界面UI卻不同。這也是Eclipse和AS開發Android項目的區別之一。
如果要在AS中也使用ActionBar,並且不使用已經的過時的ActionBarActivity,有什麼辦法呢?就是使用AppCompatActivity.在AS中把MainActivity繼承自AppCompatActivity,並導入對應的包,程序運行後截圖:。可以發現我們可愛的ActionBar又出現了。並且AppCompatActivity並沒有過時。
以後在我們的項目中,可以通過手動修改Activity的繼承父類,來決定是否顯示ActionBar。並且對程序沒有其他影響。同樣的代碼在Eclipseh和Android Studio中會出現較大差異,需要區別對待。