Posts match “ Android ” tag:

介紹

以下大部分內容為 Android MVP Pattern 之筆記。

MVP 模式的核心思想: MVP 把 Activity 中的 UI 逻辑抽象成 View 接口,把业务逻辑抽象成 Presenter 接口, Model 类还是原来的 Model。

Continue Reading →

Menus - Android Developers Guide

Fundamental type

有一些 menu 行為的轉變

  1. Options menu -> app bar

    • Android 3.0 之後,建議轉用 app bar



  2. Floating context menu -> contextual action mode

    • Long-click: 長按元件後的 UI 變化
    • Android 3.0 之後,建議轉用: contextual action mode

  1. Popup menu
    • 不包含第二項所述, 因長按行為而產生的 floating context menu
    • the popup menu is for extended actions that relate to regions of content in your activity.

Implementation

Continue Reading →

想要在螢幕旋轉的時候,做一些操作,請參考

@Override public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

同時,如果 targetSdkVersion >= 13, 需要在 AndroidManifest.xml 針對此 Activity 加入:

android:configChanges="orientation|screenSize"

另外,如果你有使用 layout/layout-land/ 來切換不同的 layout view, 那請記得在 onConfigurationChanged() 中還要 setContentView(layoutResId);:

@Override public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);                
            setContentView(R.layout.main);
    ...
    ...
    ...

    }

其它補充

今年的 Google I/O 2017 有很多件有趣的事,其中一件就是 Android Studio 將在 3.0 Canary channel 支援 Kotlin,意味著 Kotlin 將被更廣泛地使用在 Android 開發上,令人興奮!

以下就稍微整理一些基礎文章:

詳見 【已解决】Android中菜单的字体太小了:设置actionbar中menu的text的size

AndroidManifest.xml 的 application attribute 新增

android:theme="@style/Theme.AppTheme"

然後在 res/values/themes.xml 新增以下

<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionMenuTextAppearance">@style/MenuTextStyle</item>
</style>
 
<style name="MenuTextStyle">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textSize">18sp</item>
</style>

Android-ViewPagerIndicator框架使用——Circle
我個人覺得直接在 layout 裡面設置是最方便的~

<com.viewpagerindicator.CirclePageIndicator
            xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/indicator"
        android:padding="10dip"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:background="#FFCCCCCC"
        app:radius="10dp"
        app:fillColor="#FF888888"
        app:pageColor="#88FF0000"
        app:strokeColor="#FF000000"
        app:strokeWidth="2dp"
        />

之前在 Github 上常常找 library ,但是有時候一些東西都已經被包起來了,要改裡面的 file 都無法。
於是這次終於去理解了一件事情:將整個 source code clone 下來,再重新製作 aar
只要你有將 project 的 build.gradle 設定一行 apply plugin: 'android-library',在 build 的時候就會在 build/outputs/aar/ 資料夾中找到 aar 檔。所以操作方法如下:

  1. Import library project
  2. Build project
  3. build/outputs/aar/ 底下找到 aar 檔
  4. 回到自己的 project, 在 Project Structure 中,選擇 Import .JAR or .AAR Package

以後就可以自己修改 library 裡的內容,再自己重新製作 aar 囉。
詳情請參考 Create aar file in Android Studio

繼上次 [Android] ActionBar Menu/MenuItem in Different Fragments,這次要來在不同的 fragment 設定 AcitonBar title 啦~
因為我使用了 ViewPager,其實他會預讀左右兩邊的 fragment, 導致你的 onResume() 其實會被提前呼叫,也就是如果在 onResume() 裡更改 ActionBar title 的話會有重複蓋過的情形發生,那要怎麼確保 現在這個 fragment 正在眼前 呢?
請看:How to determine when Fragment becomes visible in ViewPagerSetting Custom ActionBar Title from Fragment

In your Activity:

public void setActionBarTitle(String title){
    YOUR_CUSTOM_ACTION_BAR_TITLE.setText(title);
}

In your Fragment:

((MainFragmentActivity) getActivity()).setActionBarTitle(YOUR_TITLE);
public class MyFragment extends Fragment
    @Override
    public void setMenuVisibility(final boolean visible) {
        super.setMenuVisibility(visible);
        if (visible) {
            ...
        }
    }

環境設定

請參考 Android學習_如何開始使用Google Maps Android API v2 ,非常地完整。

註:請記得,當您有使用這個 API 時,就要用 keystore 簽出來的 apk 執行,地圖才會正確顯示。也就是說,用原本的 run 設定是不行的喲,原本預設用的是一般的 debug.keystore。 我是用 Android Studio, 在 panel 的左下角有一個 Build Variants 頁籤,記得先去 Project Structure 設定好 Signing 跟 Build Type, 再來這邊選則正確的那個,就可以囉

Continue Reading →

情境:準備將 App 從開發階段改為上架,其中整合 Facebook SDK。
建議一定要先看完 Signing in Release Mode 這一段說明,對於如何簽出一個可以上架的 App 會非常有幫助。簡單來說,您本來就必須要用 keystore 簽署一支 app ,只是多了 Facebook App 的話,需要在 Facebook 上多做設定。請特別注意 debug key hash 跟 release key hash 是不能共用的。

0. Avoid Trouble: Start from Scratch

這裡先講述清楚 Facebook 官方的教學文件 - Getting Started with the Facebook SDK for Android ,以免有人跟我一開始一樣只會傻傻地用 code 卻沒有用心看仔細,到最後才跑出一堆包QQ。裡面有一段話是這麼說的:

Put simply, every Android app you'll create will be signed, and you will need to register each app's key hash with Facebook as a security check for authenticity - as we'll see later. But to bypass this check for the SDK samples and to get them up and running quickly, you can add your key hash to your global Facebook Developer profile.

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] 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 了!

Copyright © 2013 Andro Chen
Powered by Logdown and Greyshade
Favicon from The Noun Project