当前位置:  编程技术>移动开发
本页文章导读:
    ▪时间设立对话框DatePickerDialog的使用        时间设置对话框DatePickerDialog的使用 时间设置对话框DatePickerDialog的使用package www.com;import java.util.Calendar;import java.util.Date;import java.util.Locale;import android.app.Activity;import android.app.DatePickerDialog;im.........
    ▪ 用NSTimer兑现倒计时        用NSTimer实现倒计时 今天在CocoaChina上面看到有人在问倒计时怎么做,记得以前在看Iphone31天的时候做过一个,今天翻出来运行不了了,原因是我的Iphone SDK升级到3.1了,以前使用的是2.2.1,.........
    ▪ Kuix的事件处理机制(沙洲版) 1       Kuix的事件处理机制(沙地版) 1 先引用第一个讲述Kuix事件机制的原文(虽然我引用的地址不一定是最初的原文) http://niuwa.org/2008/09/03/kuix的事件处理机制/     上面引用了原文的事件处理机制.........

[1]时间设立对话框DatePickerDialog的使用
    来源: 互联网  发布时间: 2014-02-18
时间设置对话框DatePickerDialog的使用
时间设置对话框DatePickerDialog的使用
package www.com;

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;

public class TestClock extends Activity implements OnDateSetListener, OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.date);
btn.setOnClickListener(this);
}


public void onClick(View v) {//普通按钮事件
Calendar d = Calendar.getInstance(Locale.CHINA);
//创建一个日历引用d,通过静态方法getInstance() 从指定时区 Locale.CHINA 获得一个日期实例
Date myDate=new Date();
//创建一个Date实例
d.setTime(myDate);
//设置日历的时间,把一个新建Date实例myDate传入
int year=d.get(Calendar.YEAR);
int month=d.get(Calendar.MONTH);
int day=d.get(Calendar.DAY_OF_MONTH);
//获得日历中的 year month day
DatePickerDialog dlg=new DatePickerDialog(this,this,year,month,day);
//新建一个DatePickerDialog 构造方法中        
//     (设备上下文,OnDateSetListener时间设置监听器,默认年,默认月,默认日)
dlg.show();
//让DatePickerDialog显示出来
}


public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth){
//DatePickerDialog 中按钮Set按下时自动调用
TextView txt = (TextView) findViewById(R.id.text);
//通过id获得TextView对象
txt.setText(Integer.toString(year) + "-" +
Integer.toString(monthOfYear) + "-" +
Integer.toString(dayOfMonth));
//设置text
}
}


main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/text"
/>

<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/date"
android:text="設置時間"
>
</Button>
</LinearLayout>

    
[2] 用NSTimer兑现倒计时
    来源: 互联网  发布时间: 2014-02-18
用NSTimer实现倒计时
今天在CocoaChina上面看到有人在问倒计时怎么做,记得以前在看Iphone31天的时候做过一个,今天翻出来运行不了了,原因是我的Iphone SDK升级到3.1了,以前使用的是2.2.1,在2.2.1里面是可以使用NSCalendarDate的,但是在3.1里面不能够使用,怎么办,只好用NSTimer了,最后还是给实现了。代码也比较简单,开始运行viewDidLoad的时候加载 [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];//使用timer定时,每秒触发一次
,然后就是写selector了。

- (void)timerFireMethod:(NSTimer*)theTimer
{
//NSDateFormatter *dateformatter = [[[NSDateFormatter alloc]init] autorelease];//定义NSDateFormatter用来显示格式
//[dateformatter setDateFormat:@"yyyy MM dd hh mm ss"];//设定格式
NSCalendar *cal = [NSCalendar currentCalendar];//定义一个NSCalendar对象
NSDateComponents *shibo = [[NSDateComponents alloc] init];//初始化目标时间(好像是世博会的日期)
[shibo setYear:2010];
[shibo setMonth:5];
[shibo setDay:1];
[shibo setHour:8];
[shibo setMinute:0];
[shibo setSecond:0];

NSDate *todate = [cal dateFromComponents:shibo];//把目标时间装载入date
[shibo release];
// NSString *ssss = [dateformatter stringFromDate:dd];
// NSLog([NSString stringWithFormat:@"shibo shi:%@",ssss]);

NSDate *today = [NSDate date];//得到当前时间
// NSString *sss = [dateformatter stringFromDate:today];
// NSLog([NSString stringWithFormat:@"xianzai shi:%@",sss]);
//用来得到具体的时差
unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *d = [cal components:unitFlags fromDate:today toDate:todate options:0];
lab.text = [NSString stringWithFormat:@"%d年%d月%d日%d时%d分%d秒",[d year],[d month], [d day], [d hour], [d minute], [d second]];
}
这样就实现了倒计时的功能。

原文:http://blog.sina.com.cn/s/blog_60b45f230100f3v2.html

    
[3] Kuix的事件处理机制(沙洲版) 1
    来源: 互联网  发布时间: 2014-02-18
Kuix的事件处理机制(沙地版) 1

先引用第一个讲述Kuix事件机制的原文(虽然我引用的地址不一定是最初的原文)

http://niuwa.org/2008/09/03/kuix的事件处理机制/

    上面引用了原文的事件处理机制的原理图,要理解Kuix的事件处理机制,建议查看KuixCanvas原文,并参照此图。

    上面的文章是为数不多的Kuix中文讲解之一,我很早就浏览过了,当时只是粗略看了一下,由于没有太多兴趣研究其源代码,并没有作细致了解,之后在项目中碰到不少问题,都和Kuix的事件处理机制关联,这里结合发现的问题做一点讲解。

问题一 ScrollPane.bestScrollToChild 为何不生效

    在我的程序中有这样一个UI,从服务器接收到用户资料后,通过代码添加到列表(scrollPanel)中,以便用户可以选择列表中的项目,因为列表过长,所以添加完毕后滚动条会自动滚动到最后,我需要让滚动条自动滚动到页首。ScrollPane提供了bestScrollToChild,我的代码如下:

 

ScrollPane main=(ScrollPane)screen.getWidget("main");
main.bestScrollToChild(screen.getWidget("selUserName"), false);

 

     其中main是ScrollPane,selUserName是页首的一个控件,bestScrollToChild函数有两个参数,第一个是需要显示的widget,第二个是滚动间隔,为true是向要显示的widget滚动越滚动条1/4的高度,函数返回widget滚动后是否可见,为false时直接滚动到widget。单独执行上面的代码,确实可以让滚动条回到页首,但是在动态添加了列表后执行上面的代码,滚动条还是到页尾,debug发现,调用上述代码后确实调用ScrollPanel.setYOffset(私有函数)滚动到页首,但是随后又被doLayout函数调用setYOffset再次滚动到页尾,那么肯定是某种机制导致页面需要重新“布局”,无疑应该是上面添加列表导致的了,而且这个效果有一定的延迟,很可能是多线程导致的。实际上就是上图的worker线程,实际上worker是KuixCanvas的一个私有成员,KuixCanvas一开始看名字很像一个Kuix的Canvas基类,实际上是FrameWork的一个后台消息处理线程,在Kuix类中实例化,可以用Kuix.getCanvas()获得。在调用Widget.add添加控件时,发送了一个消息给处理线程,因为添加后容器的大小发生变化,需要重新布局,而doLayout后导致滚动条又一次移动到页尾。那么显然需要一个函数“提醒”消息处理线程处理完所有消息,再继续上面的代码,查看KuixCanvas的代码,发现它提供了revalidateAsSoonAsPossible函数:

 

	/**
	 * Revalidate (and repaint) the desktop as soon as possible. If the current
	 * thread is the worker thread the task is done immedialty else it is
	 * deferred to the next frame.
	 */
	public void revalidateAsSoonAsPossible() {
		if (!Worker.instance.isCurrentThread()) {
			revalidateNextFrame();
		} else {
			forceRevalidate();
			forceRepaint();
		}
	}

 

 revalidateNextFrame是弹出新的额窗口时才会调用的,所以应该是forceRevalidate

 

	/**
	 * Force desktop to be revalidated
	 */
	private void forceRevalidate() {
		needToRevalidate = false; // Tag as needToRevalidate = false first, because the revalidate process could cause invalidation
		desktop.revalidate();
		if (needToRevalidate) {
			forceRevalidate();
		}
	}

  /**

	 * Revalidate the Desktop
	 */
	public void revalidate() {
		doLayout();
	}

 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3