『Material Design入門學習筆記』主題與AppCompatActivity(附demo)

Material Design入門學習筆記寫了有兩篇了,有開發(fā)者問我,我說的這些網(wǎng)上都能搜到,為什么還要再寫一遍余指。
網(wǎng)上的確是有許多關(guān)于Material Design的資料,但是方法并不詳細让蕾,有的偏于高級自定義的組件庫浪规。我重新整理,首先是為了能介紹的更詳細探孝,方便新手學習笋婿,其次我要自己寫出demo,看一看效果到底是什么樣顿颅,有沒有什么其他坑缸濒,再有對于自己也是一次加深印象的過程。
之前的文章:
『Material Design入門學習筆記』前言
『Material Design入門學習筆記』動畫(含demo)
demo下載


AppCompatActivity

AppCompatActivity與Activity最大的差別就是界面頂上的ActionBar了粱腻,AppCompatActivity新增了許多方法用了實現(xiàn)ActionBar的功能庇配。通過getSupportActionBar()可以獲得ActionBar的實例,然后進行操作:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("aaaaa");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    }

效果如圖:


如何設置點擊事件呢:

  @Override
    public boolean onSupportNavigateUp() {
        finish();
        return super.onSupportNavigateUp();
    }

這樣點擊返回鍵绍些,就可以回到上一界面了捞慌。
如果是Activity怎么使用呢?使用方式差不多:

public class TestActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_testactivity);
        setTitle("TestActivity");
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);

    }

    @Override
    public boolean onNavigateUp() {
        finish();
        return super.onNavigateUp();
    }
}

主題

對于主題的設置分為Activity和AppCompatActivity兩種柬批,對于系統(tǒng)原生提供的主題啸澡,不能混用,否則會報錯氮帐。

AppCompatActivity

對于AppCompatActivity配置的theme必須要繼承自Theme.AppCompat

   <style name="TestAppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->

        <item name="colorPrimary">#6a1b9a</item>
        <item name="colorPrimaryDark">#ec407a</item>
        <item name="colorAccent">#f44336</item>

    </style>

對于屬性可以參考這張圖片(圖片來源自網(wǎng)絡):


配置給AppCompatActivity:

 <activity android:name=".theme.TestAppComActivity"
                  android:theme="@style/TestAppTheme">
        </activity>

Activity

對于Activity嗅虏,配置的主題,不能使用Theme.AppCompat上沐,可以選擇Theme.Material下的主題:

   <activity android:name=".theme.TestActivity"
                  android:theme="@android:style/Theme.Material.Light.DarkActionBar">
        </activity>

ToolBar

前面我們說到了可以使用自帶的ActionBar實現(xiàn)返回按鈕的標題欄皮服,但是如果需求很多,拓展還是比較麻煩的参咙,不如自己定制一個ToolBar龄广。
Android 5.0的時候就用Toolbar替代了ActionBar,而ActionBarActivity又被AppCompatActivity替代。
首先我們需要改變一下AppCompatActivity的主題蕴侧,把ActionBar去掉蜀细,否則會出現(xiàn)兩個,那就很奇怪了戈盈。
修改一下主題:

  <style name="TestAppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="colorPrimary">#6a1b9a</item>
        <item name="colorPrimaryDark">#ec407a</item>
        <item name="colorAccent">#f44336</item>

    </style>

去掉ActionBar,并把相關(guān)的代碼去掉,否則也會報錯塘娶。
然后新建一個layout归斤,titlebar的layout:

<android.support.v7.widget.Toolbar   xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:background="#4e342e"
              android:layout_height="wrap_content"
              android:minHeight="?attr/actionBarSize">
   
</android.support.v7.widget.Toolbar  >

然后在你的布局中inclue一下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <include layout="@layout/toolbar_test"/>
</LinearLayout>

修改對應代碼:

public class TestAppComActivity extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_testappcompat);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

    }

}

這樣運行就有toolbar了:

原生拓展

Toolbar給我們提供了一些原生的功能可以使用,我們修改一下代碼:

public class TestAppComActivity extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_testappcompat);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        setTitle("aaaa");//設置標題
        toolbar.setNavigationIcon(R.mipmap.ic_launcher_round);//設置返回鍵刁岸,我這里沒有脏里,就有icon代替吧
        toolbar.setNavigationOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });//返回監(jiān)聽
        toolbar.setLogo(R.mipmap.ic_launcher);//設置logo
        toolbar.setSubtitle("bbbb");//設置副標題
    }

}

代碼中都有注釋,不清楚什么意思的可以看一下虹曙。
效果如下:

自定義拓展

你可能會覺得標題位置沒有居中迫横,不好看,Toolbar實際是ViewGroup的子類酝碳,我們可以在其中添加一些自己想要的元素和對應位置矾踱,修改toolbar的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar   xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:background="#4e342e"
              android:id="@+id/toolbar"
              android:layout_height="wrap_content"
              android:minHeight="?attr/actionBarSize">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="這是標題"/>
</android.support.v7.widget.Toolbar  >

然后再看一下效果:


有了居中標題了對吧,也可以設置id疏哗,通過findViewById動態(tài)設置呛讲,這都是可以的,你可以認為這就是一個布局文件而已返奉。

設置菜單

重寫onCreateOptionsMenu這個方法:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main,menu);
        return  true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.btn_first:
                Toast.makeText(this,"first",Toast.LENGTH_LONG).show();
                break;
            case R.id.btn_senond:
                Toast.makeText(this,"second",Toast.LENGTH_LONG).show();
                break;
        }

        return super.onOptionsItemSelected(item);
    }

寫一個res/menu/新增一個文件menu_main:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/btn_first"
        android:title="第一項"
        />
    <item android:id="@+id/btn_senond"
        android:title="第一項"
        />
</menu>

看一下效果:


點擊箭頭所示就會有菜單效果:


菜單效果可能有點不盡如人意贝搁,他擋住了你辛苦寫的toolbar了。
新建一個style:

  <style name="testToolBar" parent="@style/Widget.AppCompat.Light.PopupMenu.Overflow">
        <item name="overlapAnchor">false</item>
    </style>

然后讓你toolbar使用這個主題:

<android.support.v7.widget.Toolbar   xmlns:android="http://schemas.android.com/apk/res/android"
                                     xmlns:toolbar="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:background="#4e342e"
              android:id="@+id/toolbar"
              android:layout_height="wrap_content"
                                     toolbar:popupTheme="@style/testToolBar"
              android:minHeight="?attr/actionBarSize">

</android.support.v7.widget.Toolbar  >

這樣就可以了芽偏。

總結(jié)

基本上關(guān)于主題和ToolBar的東西就這些雷逆,這篇文章,圖片和代碼都較多污尉,需要的用戶請仔細查看膀哲,有問題可以給我留言,或者關(guān)注我的公眾號留言十厢。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末等太,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蛮放,更是在濱河造成了極大的恐慌缩抡,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件包颁,死亡現(xiàn)場離奇詭異瞻想,居然都是意外死亡,警方通過查閱死者的電腦和手機娩嚼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門蘑险,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岳悟,你說我怎么就攤上這事佃迄∑貌睿” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵呵俏,是天一觀的道長堆缘。 經(jīng)常有香客問我,道長普碎,這世上最難降的妖魔是什么吼肥? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮麻车,結(jié)果婚禮上缀皱,老公的妹妹穿的比我還像新娘。我一直安慰自己动猬,他們只是感情好啤斗,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枣察,像睡著了一般争占。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上序目,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天臂痕,我揣著相機與錄音,去河邊找鬼猿涨。 笑死握童,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的叛赚。 我是一名探鬼主播澡绩,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俺附!你這毒婦竟也來了肥卡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤事镣,失蹤者是張志新(化名)和其女友劉穎步鉴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體璃哟,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡氛琢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了随闪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阳似。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铐伴,靈堂內(nèi)的尸體忽然破棺而出撮奏,到底是詐尸還是另有隱情俏讹,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布挽荡,位于F島的核電站藐石,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏定拟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一逗嫡、第九天 我趴在偏房一處隱蔽的房頂上張望青自。 院中可真熱鬧,春花似錦驱证、人聲如沸延窜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逆瑞。三九已至,卻和暖如春伙单,著一層夾襖步出監(jiān)牢的瞬間获高,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工吻育, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留念秧,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓布疼,卻偏偏與公主長得像摊趾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子游两,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容