2015年9月7日 星期一

【Android】AsyncTask

AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { 
  @Override
  protected void onPostExecute(Void result) {
   Log.d("522", "");
  }

  @Override
  protected void onPreExecute() {
   Log.d("522", "");
  }

  @Override
  protected Void doInBackground(Void... arg0) {
   try {
    Log.d("522", "");
    Thread.sleep(3000);
    Log.d("522", "3秒後ProgressDialog還在就關掉");
    if (mProgressDialog != null) {
     try {
      mProgressDialog.dismiss();
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
   return null;
  }
 
};

2015年9月6日 星期日

【Eclipse】The zipalign tool was not found in the sdk



就因為出現這個訊息,更新ADT到23.0.0後


【悲劇二】不能Sign APK

Export Signed Application Pac


搜尋網路解法
開啟Eclipse > Window > android SDK Manager,把Tools勾選全部→Install

更新完後Eclipse重啟

2015年9月5日 星期六

ADT 更新22.6後出現無法Build程式


這篇寫得相當好

重點就是
如果您想要好好的配合這個新方式,在建立好新的專案時必需要先:
  1. 先對你建的專案與appcompat_v7做Clean
  2. 先Build appcompat_v7再Build自已的專案
  3. 如果有Clean你的專案,Build發生問題時必需先重新Clean and Buildappcompat_v7
掌握以上原則,基本上你建立的新專案就可以順利的Build成功。

2015年9月4日 星期五

【Android】客製化有圓角的Button (不用圖片)



=======================CheckableButton.java=======================
package com.tsots.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.Button;
import android.widget.Checkable;

public class CheckableButton extends Button implements Checkable {

private boolean mChecked;

private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };

public CheckableButton(Context context) {
  super(context);
}

public CheckableButton(Context context, AttributeSet attrs) {
  super(context, attrs);
}

@Override
public int[] onCreateDrawableState(int extraSpace) {
  final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
  if (isChecked()) {
   mergeDrawableStates(drawableState, CHECKED_STATE_SET);
  }
  return drawableState;
}

@Override
public boolean isChecked() {
  return mChecked;
}

@Override
public void setChecked(boolean checked) {
  if (mChecked != checked) {
   mChecked = checked;
   refreshDrawableState();
  }
}

@Override
public void toggle() {
  setChecked(!mChecked);
}

}

=======================button_background.xml=======================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <corners android:radius="80dip" />

            <solid android:color="@color/background_selected" />
        </shape>
</item>
    <item android:state_checked="true">
        <shape android:shape="rectangle">
            <corners android:radius="80dip" />

            <solid android:color="@color/background_selected" />
        </shape>
    </item>
    <item android:state_focused="true">
        <shape android:shape="rectangle">
            <corners android:radius="80dip" />

            <solid android:color="@color/background_selected" />
        </shape>
</item>
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="80dip" />
            <solid android:color="@color/background_normal" />
        </shape>
</item>

</selector>

=======================colors.xml=======================
<color name="background_normal">#1ec20d</color>                          
<color name="background_selected">#0C635B</color>
<color name="white">#FFFFFF</color>
=======================main_layout.xml=======================
<com.tsots.widget.CheckableButton
            android:id="@+id/service_btn"
            android:layout_width="120dp"
            android:layout_height="30dp"
            android:layout_centerHorizontal="true"
            android:background="@drawable/button_background"
            android:text="登入"
            android:textColor="@color/white"
            android:textSize="24dp"
            />

2015年9月3日 星期四

【Android】建立Class定義共同參數 SharedPreferences


======================================================================================
public class Param
{
public void setSharedPreferences(String columns, String data, Context ctxs)
    {
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctxs);
        SharedPreferences.Editor editor = settings.edit();  
        editor.putString(columns, data);
        editor.commit();
    }

public String getSharedPreferences(String columns, Context ctxs)
    {
       String param="no";
       try{
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(ctxs);
            param=sp.getString(columns, param);
       }catch(Exception ex){}
        return param;
    }
}
==============================extends Fragment==============================
Activity mActivity;
@Override
public void onAttach(Activity activity) {
  super.onAttach(activity);
  mActivity = (Activity) activity;
}
@Override
public void onCreate(Bundle savedInstanceState) {
        Param pm = new Param();
        pm.setSharedPreferences("startDay", "20150402", mActivity);
        String startDay = pm.getSharedPreferences("startDay", mActivity);
}

==============================extends Activity==============================
@Override
public void onCreate(Bundle savedInstanceState) {
        Param pm = new Param();
        pm.setSharedPreferences("startDay", "20150402", this);
        String startDay = pm.getSharedPreferences("startDay", this);
}

2015年9月2日 星期三

【Android】TextView onClick

.xml
                 <TextView
                      android:id="@+id/card"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:clickable="true"
                      android:onClick="fireButton"
                      android:text="卡卡繳費"
                      android:textSize="24dp"
                      />

.java
public void fireButton(View v){
  switch(id){
     int id = v.getId();
   case R.id.card:   //卡卡繳款
     Log.d("522", "click 卡卡繳款");
     Intent cardIt = new Intent();  
     cardIt.putExtra("header_title", getString(R.string.pay_creditcard));
     cardIt.setClass(this,ooo.class);
     cardIt.putExtras(bundle);
     startActivity(cardIt);
     finish();
     break;
}
}

2015年9月1日 星期二

【Android】電話號碼加密 字串取代replace

String old_phone = "0912345678";
String new_phone = phone_old.replaceFirst(phone_no.substring(5, 8), "***");
System.out.plintln(new_phone);//09123***78