額外參考: [Android] AppBar, Toolbar 設定大全

Translucent Status Bar

<style name="Theme.MyTheme" parent="Theme.MyTheme.Base">
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
</style>

Fullscreen

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

Reference - Testing Android Product Flavors with Robolectric

昨天在試 Robolectric 的時候一直卡住,因為我有設定 productFlavor, Robolectric 3.0 似乎沒有正確拿到我要的 AndroidManifest (又為什麼需要的原因是: Robolectric 在 parse AndroidManifest.xml 的時候無法正常 parse meta-data 中的 android:resource)。

解法藏在中間一段,講到 applicationId 跟 packageName 那邊。所以我就在自己 extend 的 RobolectricTestRunner 的 Config 中手動設定 packageName (而不採用原本的 config.packageName()),就 ok 了!

Android button background selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
Continue Reading →

Toolbar 細節不少,如果要自定義 style 的話,有好幾個 attribute 需要熟悉。

Ref

AppCompat

先從最簡單的應用開始:

這張圖很實用


<!-- Define: res/layout/my_toolbar.xml -->

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/my_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/MyToolbarTheme"
    app:popupTheme="@style/MyToolbarPopupTheme"
    />

android:theme

請注意 theme 是會套用到整個元件的。講一個差別,如果你在 theme 裡面定義 android:background 的話,則 bar 本身還有 popup 都會改到,而如果直接在 toolbar 元件這邊指定 android:background 的話,就只會改到 bar 本身。

Material适配2 - 高级篇 文中提到 android:themeapp:theme 的不同。簡單來說,

  • 兼容 API 11 以上,推荐使用 android:theme
  • 如果兼容更老的版本,推荐继续使用 app:theme

app:popupTheme

如果想要對 toolbar 彈出的 menu 做更多調整,就另外再指定 app:popupTheme,不然 menu 就是 follow android:theme 的樣式。

Continue Reading →

一般來說不需要設定, Android Studio 會自己找到 jniLibs 在哪裡。不過當然還是有辦法設定的。

Ref: JNI and Gradle in Android Studio

sourceSets.main {
        jni.srcDirs = [] // This prevents the auto generation of Android.mk
        jniLibs.srcDir 'src/main/libs' // This is not necessary unless you have precompiled libraries in your project.
    }

原文: What is the purpose of @SmallTest, @MediumTest, and @LargeTest annotations in Android?

原原文: Test Sizes

  • Small: this test doesn't interact with any file system or network.
  • Medium: Accesses file systems on box which is running tests.
  • Large: Accesses external file systems, networks, etc.
Feature Small Medium Large
Network access No localhost only Yes
Database No Yes Yes
File system access No Yes Yes
Use external systems No Discouraged Yes
Multiple threads No Yes Yes
Sleep statements No Yes Yes
System properties No Yes Yes
Time limit (seconds) 60 300 900+
Copyright © 2013 Andro Chen
Powered by Logdown and Greyshade
Favicon from The Noun Project