Android Studio learn
http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/
2015年2月8日 星期日
2015年2月6日 星期五
[Android] timer was canceled 閃退錯誤
被網路上的一堆Timer的教程騙了!!
通常Timer幾乎都要配上TimerTask
如果不這麼做的話表示你不用停止Timer
那你就不需要用到TimerTask了
在網路上找資料的時候幾乎都會看到為什麼會閃退
原是就是因為你Timer.cancel後就不能再Timer.schedule了
這裡有很不錯的範例
http://blog.csdn.net/snowdream86/article/details/7072530
再貼上他比較簡潔的code
TimerTask timerTask;
Timer timer;
private void startTimer(){
if(timer == null){
timer = new Timer();
}
if(timerTask == null){
timerTask = new TimerTask() {
@Override
public void run() {
sendUpdateIntent(UpdateIntentService.UPDATE_POSITION_TRACKING);
}
};
}
if(timer != null && timerTask != null ) {
timer.schedule(timerTask, 1000, 8000);
}
}
private void stopTimer(){
if(timer != null){
timer.cancel();
timer = null;
}
if(timerTask != null){
timerTask.cancel();
timerTask = null;
}
}
通常Timer幾乎都要配上TimerTask
如果不這麼做的話表示你不用停止Timer
那你就不需要用到TimerTask了
在網路上找資料的時候幾乎都會看到為什麼會閃退
原是就是因為你Timer.cancel後就不能再Timer.schedule了
這裡有很不錯的範例
http://blog.csdn.net/snowdream86/article/details/7072530
再貼上他比較簡潔的code
TimerTask timerTask;
Timer timer;
private void startTimer(){
if(timer == null){
timer = new Timer();
}
if(timerTask == null){
timerTask = new TimerTask() {
@Override
public void run() {
sendUpdateIntent(UpdateIntentService.UPDATE_POSITION_TRACKING);
}
};
}
if(timer != null && timerTask != null ) {
timer.schedule(timerTask, 1000, 8000);
}
}
private void stopTimer(){
if(timer != null){
timer.cancel();
timer = null;
}
if(timerTask != null){
timerTask.cancel();
timerTask = null;
}
}
2015年1月28日 星期三
[Android] handle message
private Handler mhandler = new Handler( new Callback() {
@Override
public boolean handleMessage(Message msg) {
// TODO Auto-generated method stub
Bundle b = (Bundle)msg.obj;
// b.getString(key);
System.out.println("msgmsgmsg..." + msg.what);
switch(msg.what){
case 1:
break;
}
return false;
});
Message message2 = mhandler.obtainMessage();
Bundle mhandlerBundle = new Bundle();
message2.what = 0;
message2.obj = mhandlerBundle;
mhandler.sendMessage(message2);
傳值更新ui
@Override
public boolean handleMessage(Message msg) {
// TODO Auto-generated method stub
Bundle b = (Bundle)msg.obj;
// b.getString(key);
System.out.println("msgmsgmsg..." + msg.what);
switch(msg.what){
case 1:
break;
}
return false;
});
Message message2 = mhandler.obtainMessage();
Bundle mhandlerBundle = new Bundle();
message2.what = 0;
message2.obj = mhandlerBundle;
mhandler.sendMessage(message2);
傳值更新ui
2015年1月15日 星期四
[Android] Viewpager
寫得還不錯的教學

可能會遇到的問題
如果放在Fragment下的話就會出現奇怪的bug
比如果第一頁不見之類
因為本身在上面就是Fragment
然後ViewPager裡面的頁數換頁也是Fragment
所以就會造成這樣的問題
修改內容為
List<Fragment> fragments = new ArrayList<Fragment>();
fragments.add(Fragment.instantiate(getActivity(), MeasureChartFragmentBgPage1.class.getName()));
fragments.add(Fragment.instantiate(getActivity(), MeasureChartFragmentBgPage2.class.getName()));
fragments.add(Fragment.instantiate(getActivity(), MeasureChartFragmentBgPage3.class.getName()));
mPagerAdapter = new PagerAdapter(getChildFragmentManager(), fragments);
ViewPager pager = (ViewPager) view.findViewById(R.id.viewpager);
pager.setAdapter(mPagerAdapter);
參考網址:http://www.javaexperience.com/android-viewpager-example-tutorial/
bug參考網址:http://blog.csdn.net/wangjia55/article/details/9625747
可能會遇到的問題
如果放在Fragment下的話就會出現奇怪的bug
比如果第一頁不見之類
因為本身在上面就是Fragment
然後ViewPager裡面的頁數換頁也是Fragment
所以就會造成這樣的問題
修改內容為
List<Fragment> fragments = new ArrayList<Fragment>();
fragments.add(Fragment.instantiate(getActivity(), MeasureChartFragmentBgPage1.class.getName()));
fragments.add(Fragment.instantiate(getActivity(), MeasureChartFragmentBgPage2.class.getName()));
fragments.add(Fragment.instantiate(getActivity(), MeasureChartFragmentBgPage3.class.getName()));
mPagerAdapter = new PagerAdapter(getChildFragmentManager(), fragments);
ViewPager pager = (ViewPager) view.findViewById(R.id.viewpager);
pager.setAdapter(mPagerAdapter);
參考網址:http://www.javaexperience.com/android-viewpager-example-tutorial/
bug參考網址:http://blog.csdn.net/wangjia55/article/details/9625747
2015年1月13日 星期二
[Android] EditText只顯示到小數第一位
//thisis EditText
public void afterTextChanged(Editable edt)
{
String temp = edt.toString();
int posDot = temp.indexOf(".");
if (posDot <= 0) return;
if(temp.length() - posDot - 1 > 1)
{
edt.delete(posDot +2, posDot+3);
}
}
public void afterTextChanged(Editable edt)
{
String temp = edt.toString();
int posDot = temp.indexOf(".");
if (posDot <= 0) return;
if(temp.length() - posDot - 1 > 1)
{
edt.delete(posDot +2, posDot+3);
}
}
2015年1月7日 星期三
[Android] TTS google 語音報時
支援很多語言:很多包含中文
參考網址: http://www.tutorialspoint.com/android/android_text_to_speech.htm
下載地址: https://drive.google.com/open?id=0B2WSxYpFVHkad3Z4SHM2ZU9aV1E&authuser=0
參考網址: http://www.tutorialspoint.com/android/android_text_to_speech.htm
下載地址: https://drive.google.com/open?id=0B2WSxYpFVHkad3Z4SHM2ZU9aV1E&authuser=0
2014年12月24日 星期三
[Android] 在XML設計點擊效果
<ToggleButton
android:id="@+id/week1"
style="@style/geo_fence_week_btn_2"
android:text="@string/fence_week_1" />
style_custom.xml
<style name="geo_fence_week_btn_2">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginRight">2dp</item>
<item name="android:layout_weight">1</item>
<item name="android:textColor">@color/geo_fence_week_btn_2_textcolor_selector</item>
<item name="android:background">@drawable/geo_fence_week_btn_2_bgcolor_selector</item>
</style>
geo_fence_week_btn_2_bgcolor_selector.xml
<item android:state_checked="true" android:state_pressed="false">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#fffcce01"/>
</shape>
</item>
<item android:state_checked="false" android:state_pressed="false">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#ff939393"/>
</shape>
</item>
還不知道要幹嘛
<item android:state_checked="true" android:state_pressed="true">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#ffff"/>
</shape>
</item>
<item android:state_checked="false" android:state_pressed="true">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#ffff"/>
</shape>
</item>
android:id="@+id/week1"
style="@style/geo_fence_week_btn_2"
android:text="@string/fence_week_1" />
style_custom.xml
<style name="geo_fence_week_btn_2">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginRight">2dp</item>
<item name="android:layout_weight">1</item>
<item name="android:textColor">@color/geo_fence_week_btn_2_textcolor_selector</item>
<item name="android:background">@drawable/geo_fence_week_btn_2_bgcolor_selector</item>
</style>
geo_fence_week_btn_2_bgcolor_selector.xml
<item android:state_checked="true" android:state_pressed="false">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#fffcce01"/>
</shape>
</item>
<item android:state_checked="false" android:state_pressed="false">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#ff939393"/>
</shape>
</item>
還不知道要幹嘛
<item android:state_checked="true" android:state_pressed="true">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#ffff"/>
</shape>
</item>
<item android:state_checked="false" android:state_pressed="true">
<shape android:shape="rectangle">
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
<solid android:color="#ffff"/>
</shape>
</item>
訂閱:
文章 (Atom)