2015年4月28日 星期二

【Android 】設定 SurfaceView 的背景及透明度



        SurfaceView surfViewDraw = (SurfaceView) findViewById(R.id.surfVDraw);

        surfViewDraw.setZOrderOnTop(true);
        surfViewDraw.getHolder().setFormat(PixelFormat.TRANSLUCENT);

//        surfViewDraw.setBackgroundResource(R.drawable.step_bg);
        surfViewDraw.setBackgroundColor(0Xffffffff);

        surHolder = surfViewDraw.getHolder();


2015年4月27日 星期一

【Android UI】使用ScrollView屬性fillViewport解決全螢幕問題



ScrollView 留白的問題,可以在ScrollView中的android:fillViewport屬性設置為true。

當ScrollView裡的元素想填滿ScrollView時,使用"fill_parent"是沒用的,必需為ScrollView設置:android:fillViewport="true"

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="top"
    android:fillViewport="true"
    android:scrollbars="vertical">
</ScrollView>


【Android UI】EditText 文字垂直置中, 位置置右


LinearLayout 有兩個非常相似的屬性:

  1. android:gravity
  2. android:layout_gravity
他們的區別在於:

android:gravity屬性

是對該view中內容的限定.比如一個button上面的text,你可以設置該text相對於view的靠左或靠右等位置。

android:layout_gravity屬性

是用來設置該view相對與父view 的位置,比如一個button在linearlayout裡,你想把該button放在linearlayout裡靠左、靠右等位置就可以通過該屬性設置。


範例:

1. 利用android:gravity設定EditText內文字垂直置中
2. 利用android:layout_gravityy設定EditText置右
   
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"> 
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="文字置中, 位置置右"
        android:gravity="center"
        android:layout_gravity="right"/> 
</LinearLayout> 


【Android】Navigation drawer 顏色設定(Title, Menu)



styles.xml

<resources>


    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppTheme.Base">
    </style>

    <style name="AppTheme.Base" parent="Theme.AppCompat.Light">
        <item name="windowActionBar">true</item>
        <item name="android:windowNoTitle">true</item>

        <item name="colorPrimary">@color/accent_material_dark</item>
        <item name="colorPrimaryDark">@color/accent_material_light</item>
        <item name="android:windowBackground">@color/dim_foreground_material_dark</item>
        <item name="theme">@style/ThemeOverlay.MyApp.ActionBar</item>
        <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
    </style>

    <style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
        <item name="android:textColorPrimary">@color/actionbar_title_text</item>
    </style>


</resources>

【Android】取得手機螢幕的解析度




        // 取得螢幕解析度
        DisplayMetrics dm = new DisplayMetrics();
        this.getWindowManager().getDefaultDisplay().getMetrics(dm);

        int vWidth = dm.widthPixels;
        int vHeight = dm.heightPixels;

        // 顯示資訊
        TextView tv = ((TextView) findViewById(R.id.showText));

        tv.setText("寬:" + vWidth + ", 高:" + vHeight);

【Android】取得 Android 系統的 SDK 版本


在 Android 系統的設備資訊中,我們使用 android.os.Build 來取得系統的資訊。
若是想進一步的取得 SDK 版本的話,可以可透過 Build.VERSION 來取出詳細內容:

import android.os.Build;
 
// 目前開發代號;如果是 REL 表示是發佈版本
String codeName = Build.VERSION.CODENAME;

// 內部識別碼
String incremental = Build.VERSION.INCREMENTAL;

// 軟體版本
String release = Build.VERSION.RELEASE;

// SDK 版本
String sdk = Build.VERSION.SDK;
int sdk_int = Build.VERSION.SDK_INT;

【Android】取得 Android 系統的設備資訊


import android.os.Build;

// 主機版名稱
String board = Build.BOARD;

// 品牌名稱
String brand = Build.BRAND;

// CPU + ABI
String cpu = Build.CPU_ABI;

// 設備名稱
String device = Build.DEVICE;

// 版本號碼
String display = Build.DISPLAY;

// 設備識別碼
String fingerprint = Build.FINGERPRINT;

// HOST
String host = Build.HOST;

// 版本號碼
String id = Build.ID;

// 製造商
String manufacturer = Build.MANUFACTURER;

// 模組號碼
String model = Build.MODEL;

// 產品名稱
String product = Build.PRODUCT;

// 設備描述
String tags = Build.TAGS;

// 設備類別; user or eng
String type = Build.TYPE;

// USER
String user = Build.USER;

【Android】取得目前日期時間


Date d = new Date();

CharSequence s  = DateFormat.format("yyyy-MM-dd hh:mm:ss", d.getTime());

2015年4月24日 星期五

【Android】 取得路徑目錄,判斷目錄是否存在並建立目錄

轉載 http://www.dotblogs.com.tw/merlin/archive/2012/04/12/71432.aspx

 Environment 常用方法:

    * 方法:getDataDirectory()
      解釋:返回 File ,得到 Android 資料目錄。
    * 方法:getDownloadCacheDirectory()
      解釋:返回 File ,得到 Android 下載/緩存內容目錄。
    * 方法:getExternalStorageDirectory()
      解釋:返回 File ,得到外部儲存目錄即 SDCard
    * 方法:getExternalStoragePublicDirectory(String type)
      解釋:返回 File ,取一個高端的公用的外部儲存目錄來擺放某些類型的文件
    * 方法:getExternalStorageState()
      解釋:返回 File ,得到外部儲存設備的目前狀態
    * 方法:getRootDirectory()
      解釋:返回 File ,得到 Android 的根目錄


public void getSDPath(){
        File sdDir = null;
        File sdDir1 = null;
        File sdDir2 = null;
        boolean sdCardExist = Environment.getExternalStorageState()  
                            .equals(android.os.Environment.MEDIA_MOUNTED);   //判斷sd記憶卡是否存在
        if   (sdCardExist)  
        {                              
          sdDir = Environment.getExternalStorageDirectory();//得到根目錄
          sdDir1 = Environment.getDataDirectory();
          sdDir2 =Environment.getRootDirectory();
       }  
        System.out.println("getExternalStorageDirectory():   "+sdDir.toString());
        System.out.println("getDataDirectory():  "+sdDir1.toString());
        System.out.println("getRootDirectory():  "+sdDir2.toString());
 }



//判斷一個路徑下的文件(文件夾)是否存在

public class IsExist {
public static void main(String[] args) {
  isExist("e:\\12");
}
/**
  *
  * @param path 文件夾路徑
  */
public static void isExist(String path) {
  File file = new File(path);
  //判斷文件夾是否存在,如果不存在則建立文件夾
  if (!file.exists()) {
   file.mkdir();
  }
}
}

//在SD記憶卡上建立一個文件夾
public class make extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        File  sd=Environment.getExternalStorageDirectory();
        String path=sd.getPath()+"/notes";
        File file=new File(path);
        if(!file.exists())
         file.mkdir();

    }

【Android】 ListView setAdapter has already been called 異常


這個不小心就會遇到, 有一篇寫得很好, 引用
http://blog.csdn.net/androiddevelop/article/details/8474939




ListView HeaderView使用過程中遇到的問題

必須在setAdapter之前執行addHeaderView方法,否則會出現以下異常


java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.

【Android】如何加快 Android Studio 的編譯速度

1.    android studio上配置gradle

我筆記本是i7 4210  8,所以就開個8執行緒。記憶體16G,vm參數調的大一點。



-Xmx4096m -XX:MaxPermSize=1024m
--parallel-threads=8





2.     項目下面有一個gradle.properties
加上這兩句話.