[计算机软件及应用]android开发笔记.doc

上传人:音乐台 文档编号:1991444 上传时间:2019-01-28 格式:DOC 页数:33 大小:310.50KB
返回 下载 相关 举报
[计算机软件及应用]android开发笔记.doc_第1页
第1页 / 共33页
[计算机软件及应用]android开发笔记.doc_第2页
第2页 / 共33页
[计算机软件及应用]android开发笔记.doc_第3页
第3页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[计算机软件及应用]android开发笔记.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]android开发笔记.doc(33页珍藏版)》请在三一文库上搜索。

1、1 目 录 ANDROID 开发:自定义记事本样式 EDITTEXT1 ANDROID中 EDITTEXT如何定位光标位置 .14 ANDROID 中软盘是使用 .14 应用程序最小化.18 全屏.18 SPLASH SCREEN 开场屏在 ANDROID 中的实现 .18 ANDROID 进程和线程.18 ANDROID 的 TOAST 简单实用示例(用户提醒框)23 ANDROID 自定义弹出层 .25 ANDROID VIEW 透明度设置 28 POPUPWINDOW DIALOG ALERTDIALOG PROGRESSDIALOG28 Android 开发:自定义记事本样式开发:自定

2、义记事本样式 EditText public class Main extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); MyNote mn = new

3、 MyNote(this); mn.setHeight(380); layout.addView(mn); 2 LinearLayout layout1=new LinearLayout(this); layout1.setOrientation(LinearLayout.HORIZONTAL); Button button = new Button(this); 动态控制控件间距动态控制控件间距 RelativeLayout.LayoutParams layoutParams1 = (RelativeLayout.LayoutParams) searchinfoButton .getLayo

4、utParams(); layoutParams1.setMargins(distance, 0, distance, 0); searchinfoButton.setLayoutParams(layoutParams1); 3 button.setText(“确定“); button.setWidth(60); layout1.addView(button); TextView textview=new TextView(this); Date date=new Date(); SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM- dd“);

5、 String dateString=sdf.format(date); textview.setText(dateString); textview.setWidth(200); textview.setPadding(60, 0, 0, 0); layout1.addView(textview); Button button1=new Button(this); button1.setText(“取消“); button1.setWidth(60); layout1.addView(button1); layout.addView(layout1); this.setContentView

6、(layout); 主方法中主要实现了整个画布的布局的简单设置。以下是自定义 EditText 的具体实现方法。 MyNote.java public class MyNote extends EditText public MyNote(Context context) super(context); protected void onDraw(Canvas canvas) int lineHeight=this.getLineHeight(); Paint mPaint=getPaint(); mPaint.setColor(Color.GRAY);/文本编辑线 int topPaddin

7、g=this.getPaddingTop(); int leftPadding=this.getPaddingLeft(); float textSize=getTextSize(); 4 setGravity(Gravity.LEFT|Gravity.TOP); int y =(int)(topPadding+textSize); for(int i=0;i 5 这里添加了一个 id 为“edit_text“的 EditText,设置默认显示 为本为“这是一个 EditText”。运行效果如下: 二:EditText 简介 EditText 是一个非常重要的组件,可以说它是用户和 Andro

8、id 应 用进行数据传输窗户,有了它就等于有了一扇和 Android 应用传输 的门,通过它用户可以把数据传给 Android 应用,然后得到我们想 要的数据。 EditText 是 TextView 的子类,所以 TextView 的方法和特性同样 存在于 EditText 中,具体的 TextView 的介绍可以参考上一节 Android 系列教程之六:TextView 小组件的使用-附带超链接和 跑马灯效果 三:长度和空白提示文字,提示文字颜色,是否可编辑等 EditText 有一些属性可以设置 EditText 的特性,比如最大长度, 空白提示文字等。 有时候我们有一些特属的需要,要求

9、只能在 EditText 中输入特定 个数的字符,比如身份证号、手机号吗等。这时候就可以通过 android:maxLength 属性来设置最大输入字符个数,比如 android:maxLength=“4”就表示最多能输入 4 个字符,再多了就输 入不进去了。 空白提示文字。有时候我们需要说明你定义的这个 EditText 是做 什么用的,比如让输入“用户名”,或者输入“电话号码”等,但是你 又不想在 EditText 前面加一个 TextView 来说明这是输入“用户名” 的,因为这会使用一个 TextView,那么怎么办呢?EditText 为我 们提供了 android:hint 来设置

10、当 EditText 内容为空时显示的文 6 本,这个文本只在 EditText 为空时显示,你输入字符的时候就消 失了,不影响你的 EditText 的文本。修改 main.xml 如下: Xml 代码 运行应用就会看到如下的效果: 看看吧,简洁明了还不用新增一个 TextView 说明,也不影响用户 操作。 上面列出了空白时的提示文字,有的人说了,我不想要这个灰色的 提示文字,和我的应用整体风格不协调,那也行啊,我们可以换颜 色,怎么换呢,就是通过 android:textColorHint 属性设置你想 要的颜色。修改 main.xml 如下: Xml 代码 7 运行程序效果如下: 看到

11、了吧,颜色已经变了。 还有一个比较实用的功能,就是设置 EditText 的不可编辑。设置 android:enabled=“false“可以实现不可编辑,可以获得焦点。这 时候我们看到 EditText 和一个 TextView 差不多: 实现类似 html 中 Textarea 的文本域。在 Android 中没有专门的 文本域组件,但是可以通过设置 EditText 的高来实现同样的文本 域功能。修改 main.xml 如下: Xml 代码 运行程序效果如下: 四:输入特殊格式的字符 在我们开发程序的时候不免会输入一些特属个数的字符,比如密码 (输入框的字符要加密显示),电话号码(比如数

12、字和-),数字等, 这些都算是一些特属格式的字符,强大的 EditText 同样为我们提 供了输入这些特属格式字符的设置。 密码文本框。密码输入也是 Android 应用常用的功能,通过配置 EditText 的 android:password=“true“就可以实现这一密码输入 功能,修改 main.xml 如下: Xml 代码 运行效果如下: 可以看到我们输入的字符已经被“.”这样的掩码所代替。 手机中发短信打电话是必不可少的,所以用于专门输入电话号码的 文本框也是大有用途,有了他我们对是否是电话号码的校验就容易 的多了(因为字符是正确的,只要校验格式 ).通过设置 android:ph

13、oneNumber=“true“就可以把 EditText 变成只接受电 话号码输入的文本框,连软键盘都已经变成拨号专用软键盘了,所 以不用再担心输入其他字符了。修改 main.xml 如下: Xml 代码 运行程序效果如下: 注意看软键盘,已经变成拨号专用的啦. 有时候我们只想输入数字,不想输入字母,EditText 为我们提供了 android:numeric 来控制输入的数字类型,一共有三种分别为 integer(正整数)、signed(带符号整数)和 decimal(浮点数)。 这里以 signed 类型的为例,修改 main.xml 如下: 9 Xml 代码 运行效果如下: 注意这里

14、的软键盘变成“数字键盘”的变化. 五:为文本指定特定的软键盘类型 前面我们通过指定为电话号码特定格式,然后键盘类型变成了拨号 专用的键盘,这个是自动变的,其实我们也可以通 过 android:inputType 来设置文本的类型,让输入法选择合适的软键 盘的。android:inputType 有很多类型,这里使用 date 类型来 演示,修改 main.xml 如下: Xml 代码 运行效果如下: 六:Enter 键图标的设置 10 软键盘的 Enter 键默认显示的是“完成”文本,我们知道按 Enter 建 表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜 索中,我们输入要搜索的

15、文本,然后按 Enter 表示要去搜索了,但 是默认的 Enter 键显示的是“完成”文本,看着不太合适,不符合搜 索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标 多好。事实证明我们的想法是合理的,Android 也为我们提供的这 样的功能。通过设置 android:imeOptions 来改变默认的“完成”文 本。这里举几个常用的常量值: actionUnspecified 未指定,对应常量 EditorInfo.IME_ACTION_UNSPECIFIED.效果: actionNone 没有动作,对应常量 EditorInfo.IME_ACTION_NONE 效果: acti

16、onGo 去往,对应常量 EditorInfo.IME_ACTION_GO 效果: actionSearch 搜索,对应常量 EditorInfo.IME_ACTION_SEARCH 效果: actionSend 发送,对应常量 EditorInfo.IME_ACTION_SEND 效 果: actionNext 下一个,对应常量 EditorInfo.IME_ACTION_NEXT 效果: actionDone 完成,对应常量 EditorInfo.IME_ACTION_DONE 效 果: 下面已搜索为例,演示一个实例,修改 main.xml 如下: Xml 代码 11 修改 HelloEd

17、itText 如下: Java 代码 package com.flysnow; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import android.widget.TextView.OnEditorActionListener; public class HelloEditText

18、extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); EditText editText=(EditText)findViewById(R.id.e dit_text); editText.setOnEditorActionListener(new OnEdit orAct

19、ionListener() Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) Toast.makeText(HelloEditText.this, St ring.valueOf(actionId), Toast.LENGTH_SHORT).show(); return false; ); 运行程序,点击回车(也就是搜索图标软键盘按钮)会显示该 actionId.我们上面的每一个设置都会对应一个常量,这里的 actionId 就是那个常量值。 七:EditText 的取值、全选、部分

20、选择、获取选中文本 12 下面通过一个例子来演示 EditText 的取值、全选、部分 选择和获取选中文本.main.xml 修改如下: Xml 代码 HelloEditText 修改如下: Java 代码 package com.flysnow; 13 import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.Selection; import android.view.KeyEvent; import android.view.View;

21、import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import android.widget.TextView.OnEditorActionListener; /* * EditText 演示 * author 飞雪无情 * since 2010-11-29 */ public class HelloEditText

22、extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); final EditText editText=(EditText)findViewByI d(R.id.edit_text); /监听回车键 editText.setOnEditorActionListener(new

23、 OnEdit orActionListener() Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) Toast.makeText(HelloEditText.this, St ring.valueOf(actionId), Toast.LENGTH_SHORT).show(); return false; ); /获取 EditText 文本 Button getValue=(Button)findViewById(R.id.btn _get_value); 14 getValu

24、e.setOnClickListener(new OnClickListen er() Override public void onClick(View v) Toast.makeText(HelloEditText.this, ed itText.getText().toString(), Toast.LENGTH_SHORT).show (); ); /让 EditText 全选 Button all=(Button)findViewById(R.id.btn_all); all.setOnClickListener(new OnClickListener() Override publ

25、ic void onClick(View v) editText.selectAll(); ); /从第 2 个字符开始选择 EditText 文本 Button select=(Button)findViewById(R.id.btn_s elect); select.setOnClickListener(new OnClickListener () Override public void onClick(View v) Editable editable=editText.getText(); Selection.setSelection(editable, 1,ed itable.le

26、ngth(); ); /获取选中的文本 Button getSelect=(Button)findViewById(R.id.bt n_get_select); getSelect.setOnClickListener(new OnClickListe ner() Override public void onClick(View v) int start=editText.getSelectionStart(); int end=editText.getSelectionEnd(); 15 CharSequence selectText=editText.getT ext().subSequ

27、ence(start, end); Toast.makeText(HelloEditText.this, se lectText, Toast.LENGTH_SHORT).show(); ); /* * 交换两个索引 * param start 开始索引 * param end 结束索引 */ protected void switchIndex(int start, int end) int temp=start; start=end; end=temp; Android 中 EditText 如何定位光标位置 et.setText(content);/设置EditText控件的内容 et.

28、setSelection(content.length();/将光标移至文字末尾 Android 中软盘是使用 Android 是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软 键盘,以便用户进行输入。 那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的 减少?我们能否在应用程序中进行自定义的控制?这些是本文要讨论的重点 二、活动主窗口调整二、活动主窗口调整 android 定义了一个属性,名字为 windowSoftInputMode, 用它可以让程序可以控制活 动主窗口调整的方式。我们可以在 AndroidManifet.xml 中对 Act

29、ivity 进行设置。如: android:windowSoftInputMode=“stateUnchanged|adjustPan“ 模式一,压缩模式模式一,压缩模式 windowSoftInputMode 的值如果设置为 adjustResize,那么该 Activity 主窗口总是被调 整大小以便留出软键盘的空间。 16 模式二,平移模式模式二,平移模式 windowSoftInputMode 的值如果设置为 adjustPan,那么该 Activity 主窗口并不调整屏 幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被 键盘覆盖和用户能总是看到输入内容的

30、部分。这个通常是不期望比调整大小,因为用户可 能关闭软键盘以便获得与被覆盖内容的交互操作。 上面的例子中,我们将 AndroidManifest.xml 的属性进行更改: android: windowSoftInputMode = “adjustPan“ 17 模式三模式三 自动模式自动模式 当属性 windowSoftInputMode 被设置为 adjustUspecified 时,它不被指定是否该 Activity 主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦 点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图 能够滚动他们的内容

31、。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使 滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。 也就是说,系统自动决定是采用平移模式还是压缩模式,决定因素在于内容是否可以滚 动。 4.EditText 默认不弹出软件键盘 方法一: 在 AndroidMainfest.xml 中选择哪个 activity,设置 windowSoftInputMode 属性为 adjustUnspecified|stateHidden 例如: 方法二: 让 EditText 失去焦点,使用 EditText 的 clearFocus 方法 例如:EditText edit=(E

32、ditText)findViewById(R.id.edit); edit.clearFocus(); 方法三: 强制隐藏 Android 输入法窗口 例如:EditText edit=(EditText)findViewById(R.id.edit); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edit.getWindowToken(),0); 5.EditText 始终不弹出软件键盘 例:Ed

33、itText edit=(EditText)findViewById(R.id.edit); edit.setInputType(InputType.TYPE_NULL); 18 另外:在 onCreate 中加控制软盘属性 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 参数:WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN 含义:软键盘直接覆盖 Activity,通常这是默认值 参数:WindowManager.LayoutPara

34、ms.SOFT_INPUT_ADJUST_RESIZE Activity 含义:高度会变化,让出软键盘的空间。和 WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN 为 2 选 1 的值 参数:WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE Activity 含义:一打开就直接显示软键盘窗口,如果该窗口需要的话(即有 EditText,或有 Editable 的控件) 参数:WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN Activity

35、含义:打开后并不直接显示软键盘窗口,直到用户自己 touch 文本框。 / 隐藏软键盘 private void showKeyboard() InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); /两种方法 /一个输入框时 imm.hideSoftInputFromWindow(Soft_metodActivity.this.getCurrentFoc us() /.getWindowToken(), InputMethodManager.HIDE_NOT_A

36、LWAYS); /有多个输入框是用下面这种 imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);InputMethodManager.HIDE_NOT_ALWAYS); /显示软盘 private void showKeyboard() InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, 0); / 按回车软盘消失 public OnEdit

37、orActionListener editorActionListener = new OnEditorActionListener() Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) showKeyboard(); return true; 19 ; 应用程序最小化应用程序最小化 Intent home = new Intent(Intent.ACTION_MAIN); home.addCategory(Intent.CATEGORY_HOME); startActivity(h

38、ome); 全全屏屏 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParam s.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); Splash Screen 开场屏在开场屏在 Android 中的实现中的实现 new Handler().postDelayed(new Runnable() / 为了减少代码使用匿名Handler创建一个延时的调用 public void run() Int

39、ent i = new Intent(SplashScreen.this, Main.class); /通过Intent打开最终真正的主界面Main这个 Activity SplashScreen.this.startActivity(i); /启动Main界面 SplashScreen.this.finish(); /关闭自 己这个开场屏 , 5000); /5秒,够用了吧 Android 进程和线程进程和线程 20 Andoid 的 UI 组件包并不是线程安全的。因此不允许从工作线程中操作 UI 只能从 UI 线程中操作用户界面。于是,Andoid 的单线程模式必须遵守两个 规则: 1.

40、不要阻塞 UI 线程。 2. 不要在 UI 线程之外访问 Andoid 的 UI 组件包。 工作线程工作线程 根据对以上单线程模式的描述,要想保证程序界面的响应能力,关键是不能阻 塞 UI 线程。如果操作不能很快完成,应该让它们在单独的线程中运行(“后台” 或“工作”线程)。 例如:以下响应鼠标点击的代码实现了在单独线程中下载图片并在 ImageView 显示: public void onClick(View v) new Thread(new Runnable() public void run() Bitmap b = loadImageFromNetwork(“http:/ mImag

41、eView.setImageBitmap(b); ).start(); 乍看起来,这段代码似乎能运行得很好,因为创建了一个新的线程来处理访问 网络的操作。可是它违反了单线程模式的第二条规则:不要在 UI 线程之外访 问 Andoid 的 UI 组件包以上例子在工作线程里而不是 UI 线程里修改了 21 ImageView。这可能导致不明确、不可预见的后果,要跟踪这种情况也是很困 难很耗时间的。 为了解决以上问题,Android 提供了几种途径来从其它线程中访问 UI 线程。 下面列出了有助于解决问题的几种方法: Activity.runOnUiThread(Runnable) View.pos

42、t(Runnable) View.postDelayed(Runnable, long) 比如说,可以使用 View.post(Runnable)方法来修正上面的代码: public void onClick(View v) new Thread(new Runnable() public void run() final Bitmap bitmap = loadImageFromNetwork(“http:/ mImageView.post(new Runnable() public void run() mImageView.setImageBitmap(bitmap); ); ).sta

43、rt(); 过,随着操作变得越来越复杂,这类代码也会变得很复杂很难维护。为了用工 作线程完成更加复杂的交互处理,可以考虑在工作线程中用 Handler 来处理 UI 线程分发过来的消息。 final Handler hd=new Handler() 22 Override public void handleMessage(Message msg) imageView.setImageDrawable(getResources().getDrawable(R.drawable.baidu); ; button.setOnClickListener(new Button.OnClickListe

44、ner() Override public void onClick(View v) new Thread(new Runnable() Override public void run() Message m=new Message(); m.what=0; hd.sendMessage(m); ).start(); ); 当然,最好的解决方案也许就是继承使用异步任务类 AsyncTask,此类简化了 一些工作线程和 UI 交互的操作。 1.public void onClick(View v) 2. new DownloadImageTask().execute(“http:/ 3. 4.

45、 5.private class DownloadImageTask extends AsyncTask 6. protected Bitmap doInBackground(String. urls) 7. return loadImageFromNetwork(urls0); 8. 9. 10. protected void onPostExecute(Bitmap result) 11. mImageView.setImageBitmap(result); 12. 13. 23 AndroidAndroid 开发开发: :系统自动实现开机启动系统自动实现开机启动 您在开发一个需要实时更新

46、数据的应用程序,当有新的数据的时候提醒用户查看新的数据,那么您需要在 后台开起一个 Service,然后实时的去网络上获取数据,但是如果用户关机重启,您的 Service 可能就消 失了!那么怎么样保证开机后你的 Service 还活跃的在用户的手机里偷偷的从网络上获取数据呢? 很简单,我们只要实现开机自启动即可,Android 实现开机自启动可能是移动操作系统中最简单的了,我 们只需要监听一个开机启动的 Broadcast(广播)即可。首先写一个 Receiver(即广播监听器),继承 BroadcastReceiver,如下所示: 1.public class BootReceiver e

47、xtends BroadcastReceiver 2. private PendingIntent mAlarmSender; 3.Override 4. public void onReceive(Context context, Intent intent) 5./ 在这里干你想干的事(启动一个 Service,Activity 等),本例是 启动一个定时调度程序,每 30 分钟启动一个 Service 去更新数据 6. mAlarmSender = PendingIntent.getService(context, 0, new Inte nt(context, 7.RefreshDat

48、aService.class), 0); 8.long firstTime = SystemClock.elapsedRealtime(); 9.AlarmManager am = (AlarmManager) context 10. .getSystemService(Activity.ALARM_SERVICE); 11. am.cancel(mAlarmSender); 12. am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstT ime, 13. 30 * 60 * 1000, mAlarmSender); 14. 15. 接下来,我们只需要在应用程序配置文件 AndroidManifest.xml 中注册这个 Receiver 来监听系统启动事 件即可,如下所示: 1. 2. 3. 4. 5. 6. 7. 24 Android 的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1