Posts match “ Android ” tag:

情境:準備將 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 →

Setup & Tutorial

JSONObjectRequest

Android Volley Library Example

String url = "https://www.googleapis.com/customsearch/v1?key=AIzaSyBmSXUzVZBKQv9FJkTpZXn0dObKgEQOIFU&cx=014099860786446192319:t5mr0xnusiy&q=AndroidDev&alt=json&searchType=image";
 
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
 
    @Override
    public void onResponse(JSONObject response) {
        // TODO Auto-generated method stub
        txtDisplay.setText("Response => "+response.toString());
        findViewById(R.id.progressBar1).setVisibility(View.GONE);
    }
}, new Response.ErrorListener() {
 
    @Override
    public void onErrorResponse(VolleyError error) {
    // TODO Auto-generated method stub
 
    }
});

JSONArrayRequest

http://stackoverflow.com/questions/20997924/com-android-volley-parseerror-org-json-jsonexception
type org.json.JSONArray cannot be converted to JSONObject
所以改成

JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {

        @Override
        public void onResponse(JSONArray response) {
            Log.d("androchentw", response.toString());
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            // TODO Auto-generated method stub
            Log.d("androchentw", "error: "+ parseNetworkError(error));

        }
    });
    queue.add(request);

Handle

http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/

parseError: http://stackoverflow.com/questions/21867929/android-how-handle-message-error-from-the-server-using-volley

環境設定

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

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

Continue Reading →

[Android] ImageView.ScaleType设置图解 非常詳細!

CENTER: 原 size, 截取图片的居中部分显示
CENTER_CROP: 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
CENTER_INSIDE: 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
FIT_CENTER: 把图片按比例扩大/缩小到View的宽度,居中显示
FIT_START, FIT_END: 缩放效果上与FIT_CENTER一样,只是显示的位置不同。FIT_START是置于顶部,FIT_CENTER居中,FIT_END置于底部。
FIT_XY: 不按比例缩放图片,目标是把图片塞满整个View

How to transfer some data to another Fragment?
How to pass values between Fragments
Communicating with the Activity - Android Developer

需要特別注意的是,概念上是透過 Associated Activity 去完成這件事,而不是兩個 Fragments 互傳。

Often you will want one Fragment to communicate with another, for example to change the content based on a user event. All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly.

Android 手機螢幕解析度與尺寸爆炸多,是時候補一點相關知識了~

習慣上有這幾種

  1. 設定為 wrap_content,圖片有多大就放多大。這種情況下,你需要準備好 mdpi, hdpi, xhdpi, xxhdpi 大小的圖。
  2. 設定為 match_parent,跟螢幕一樣寬 / 高。但是這樣圖是有可能被擠壓 / 拉大的。必要時可以使用 ScaleType 來做 cropCenter 等等行為。
  3. 設定 dp 。這算是最常見的作法,不過要注意的是(也是我之前一直誤會的),設定 dp 的話就是每個大小的手機上看起來都會 一樣大。因為很重要,所以再講一遍,會 一樣大 。什麼一樣大?舉個按鈕的例子,如果你把寬度設 30dp ,再把兩隻不同尺寸的手機拿起來比(或是直接開 IDE 的 preview 就好了。。),兩個 button 用尺量會是一樣寬的。所以說,在有些情況下,直接設定 dp 是會發生元件重疊 / 超出範圍的唷,請小心。所謂的 dp 會自動去依照手機的解析度去換算正確的大小,事實上是這個意思。
  4. 設定 weight。在 LinearLayout 裡面使用 weight 就可以達到 以畫面大小為比例 來設定權重。假設現在要設定寬度,水平的權重總共是 100% (或是數值 1),他是 扣除掉已經被佔有的dp後,剩下的空間為 100% 去計算。務必小心!

Android Bootstrap
Android Bootstrap style buttons with Font Awesome

安裝套件

我常用的幾個 library。 app/build.gradle

dependencies {
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.google.android.gms:play-services:6.1.+'
    compile 'com.mcxiaoke.volley:library:1.0.7'
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
    compile 'com.google.code.gson:gson:2.3'
        ...
}    
Continue Reading →

Index

  • 安裝 GooglePlayService 並且在 AndroidManifest.xml 開啟權限
  • res/xml/global_tracker.xml
  • extends Application
  • onStart(), onStop() 開啟記錄
  • initTracker()

安裝 GooglePlayService 並且在 AndroidManifest.xml 開啟權限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    ... >
  <!-- Google Analytics Version v4 needs this value for easy tracking -->
  <meta-data android:name="com.google.android.gms.analytics.globalConfigResource"
  android:resource="@xml/global_tracker" />
Continue Reading →

詳見 【已解决】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] 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-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"
        />

Change actionbar button background color when pressed

<style name="CustomStyle" parent="@style/Theme.Holo.Light" >
    <item name="android:actionBarItemBackground">@drawable/ab_item_background</item>
    <item name="actionBarItemBackground">@drawable/ab_item_background</item>
</style>  
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:exitFadeDuration="@android:integer/config_mediumAnimTime">
    <!-- focused/pressed: color=red -->
    <item 
        android:state_focused="true"
        android:state_pressed="true"
        android:drawable="@color/red" />
    <!-- pressed: color=red -->
    <item 
        android:state_pressed="true"
        android:drawable="@color/red" />
    <!-- normal: color=transparent -->
    <item 
        android:drawable="@android:color/transparent" />
</selector>

設定 opacity 的部份我還在研究

android solid opacity
Hex transparency in colors
How to set shape's opacity?

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