当前位置:  编程技术>移动开发
本页文章导读:
    ▪【通译】(19)Toast通知        【翻译】(19)Toast通知   【翻译】(19)Toast通知   see http://developer.android.com/guide/topics/ui/notifiers/toasts.html   原文见 http://developer.android.com/guide/topics/ui/notifiers/toasts.html   -------------------------------   .........
    ▪ 【转载】开发经验总结,很享用        【转载】开发经验总结,很受用。 1、有一个方法,有一段类似于下面这样: new Thread(){ public void run(){ // 做了一些数据库操作 db.close(); } }.start();     结 .........
    ▪ WP7根本技巧 新手必看       WP7基本技巧 新手必看 以HD7为例...不过WP7手机应该都差不多...所以应该是通用的...1:静音方法:点一下音量键 屏幕上方出现一个状态栏 点击右面的"铃铛"图标 就静音了...恢复为有声的方法一样2.........

[1]【通译】(19)Toast通知
    来源: 互联网  发布时间: 2014-02-18
【翻译】(19)Toast通知

 

【翻译】(19)Toast通知

 

see

http://developer.android.com/guide/topics/ui/notifiers/toasts.html

 

原文见

http://developer.android.com/guide/topics/ui/notifiers/toasts.html

 

-------------------------------

 

Toast Notifications

 

Toast通知

 

-------------------------------

 

Quickview

 

快速概览

 

A toast is a message that appears on the surface of the screen for a moment, but it does not take focus (or pause the current activity), so it cannot accept user input

 

一个Toast是一种出现在屏幕表面上一阵子的消息,但它不获取焦点(或暂停当前活动),所以它不能接受用户输入

 

You can customize the toast layout to include images

 

你可以定制Toast布局以包含图片

 

In this document

 

本文目录

 

* The Basics 基础

* Positioning your Toast 放置你的Toast

* Creating a Custom Toast View 创建一个自定义Toast视图

 

Key classes 

 

关键类

 

Toast

 

-------------------------------

 

A toast notification is a message that pops up on the surface of the window. It only fills the amount of space required for the message and the user's current activity remains visible and interactive. The notification automatically fades in and out, and does not accept interaction events.

 

一个Toast通知是一种消息,在窗口的表面上弹出。它只填充消息所需数量的空间,而用户的当前活动保持可见和可交互。通知自动地淡进和淡出,并且不接受交互事件。

 

The screenshot below shows an example toast notification from the Alarm application. Once an alarm is turned on, a toast is displayed to assure you that the alarm was set.

 

下面的截屏展示一个来自闹钟应用程序的示例Toast通知。一旦一个闹钟被打开,Toast被显示以向你确保闹钟被设置。

 

(图略:

这个闹钟被设置在从现在开始17小时又57分钟后。

 

A toast can be created and displayed from an Activity or Service. If you create a toast notification from a Service, it appears in front of the Activity currently in focus.

 

Toast可以从Activity或Service中被创建和显示。如果你从一个Service中创建一个Toast通知,那么它出现在当前焦点下的Activity的前方。

 

If user response to the notification is required, consider using a Status Bar Notification.

 

如果需要用户响应通知,请考虑使用状态栏通知。

 

-------------------------------

 

The Basics

 

基础

 

First, instantiate a Toast object with one of the makeText() methods. This method takes three parameters: the application Context, the text message, and the duration for the toast. It returns a properly initialized Toast object. You can display the toast notification with show(), as shown in the following example:

 

首先,用其中一种makeText()方法实例化一个Toast对象。这个方法传入三个参数:应用程序Context,文本消息,以及Toast的持续时间。它返回一个被正确地初始化的Toast对象。你可以用show()显示Toast通知,正如下面的示例中所示:

 

-------------------------------

 

Context context = getApplicationContext();

CharSequence text = "Hello toast!";

int duration = Toast.LENGTH_SHORT;

 

Toast toast = Toast.makeText(context, text, duration);

toast.show();

 

-------------------------------

 

This example demonstrates everything you need for most toast notifications. You should rarely need anything else. You may, however, want to position the toast differently or even use your own layout instead of a simple text message. The following sections describe how you can do these things.

 

这个示例演示你对大多数Toast通知所需的任何东西。你应该极少地需要其它任何东西。然而,你可能希望不一样地放置Toast甚至或者使用你自己的布局而非简单的文本消息。以下章节描述你如何做这些事情。

 

You can also chain your methods and avoid holding on to the Toast object, like this:

 

你还可以链接你的方法并避免一直持有Toast对象,像这样:

 

-------------------------------

 

Toast.makeText(context, text, duration).show();

 

-------------------------------

 

-------------------------------

 

Positioning your Toast

 

放置你的Toast

 

A standard toast notification appears near the bottom of the screen, centered horizontally. You can change this position with the setGravity(int, int, int) method. This accepts three parameters: a Gravity constant, an x-position offset, and a y-position offset.

 

一个标准Toast通知出现在屏幕底部附近,水平地居中。你可以用setGravity(int, int, int)方法改变这个位置。它接受三个参数:一个Gravity常量,一个x位置偏移,以及一个y位置偏移。

 

For example, if you decide that the toast should appear in the top-left corner, you can set the gravity like this:

 

例如,如果你决定Toast应该出现在左上角,你可以像这样设置重力:(注:重力方向是指淡进的方向?)

 

-------------------------------

 

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);

 

-------------------------------

 

If you want to nudge the position to the right, increase the value of the second parameter. To nudge it down, increase the value of the last parameter.

 

如果你希望把位置微移到右边,请增加第二参数的值。如果想把它向下微移,请增加最后参数的值。

 

Creating a Custom Toast View

 

创建一个自定义Toast视图

 

If a simple text message isn't enough, you can create a customized layout for your toast notification. To create a custom layout, define a View layout, in XML or in your application code, and pass the root View object to the setView(View) method.

 

如果一个简单文本消息不足够,你可以为你的Toast通知创建一个定制的布局。为了创建一个定制布局,在XML或在你的应用程序代码中定义一个View布局,并传递根View对象给setView(View)方法。

 

For example, you can create the layout for the toast visible in the screenshot to the right with the following XML (saved as toast_layout.xml):

 

例如,你可以用以下的XML(存储为toast_layout.xml)为Toast创建右边截屏中所示的布局:

 

(图略:

你好!这是一个自定义Toast!

 

-------------------------------

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

              android:id="@+id/toast_layout_root"

              android:orientation="horizontal"

              android:layout_width="fill_parent"

              android:layout_height="fill_parent"

              android:padding="10dp"

              android:background="#DAAA"

              >

    <ImageView android:id="@+id/image"

               android:layout_width="wrap_content"

               android:layout_height="fill_parent"

               android:layout_marginRight="10dp"

               />

    <TextView android:id="@+id/text"

              android:layout_width="wrap_content"

              android:layout_height="fill_parent"

              android:textColor="#FFF"

              />

</LinearLayout>

 

-------------------------------

 

Notice that the ID of the LinearLayout element is "toast_layout". You must use this ID to inflate the layout from the XML, as shown here:

 

注意LinearLayout元素的ID是toast_layout。你必须使用这个ID从XML中解压布局,正如这里显示的那样:

 

-------------------------------

 

LayoutInflater inflater = getLayoutInflater();

View layout = inflater.inflate(R.layout.toast_layout,

                               (ViewGroup) findViewById(R.id.toast_layout_root));

 

ImageView image = (ImageView) layout.findViewById(R.id.image);

image.setImageResource(R.drawable.android);

TextView text = (TextView) layout.findViewById(R.id.text);

text.setText("Hello! This is a custom toast!");

 

Toast toast = new Toast(getApplicationContext());

toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);

toast.setDuration(Toast.LENGTH_LONG);

toast.setView(layout);

toast.show();

 

-------------------------------

 

First, retrieve the LayoutInflater with getLayoutInflater() (or getSystemService()), and then inflate the layout from XML using inflate(int, ViewGroup). The first parameter is the layout resource ID and the second is the root View. You can use this inflated layout to find more View objects in the layout, so now capture and define the content for the ImageView and TextView elements. Finally, create a new Toast with Toast(Context) and set some properties of the toast, such as the gravity and duration. Then call setView(View) and pass it the inflated layout. You can now display the toast with your custom layout by calling show().

 

首先,用getLayoutInflater()(或getSystemService())获取LayoutInflater,然后从XML中使用inflate(int, ViewGroup)解压布局。第一参数是布局资源ID,而第二参数是根View。你可以使用这个解压布局在布局中查找更多View对象,所以现在可以捕获并定义ImageView和TextView元素的内容。最后,用Toast(Context)创建一个新的Toast并设置Toast的一些属性,诸如重力和持续时间。然后调用setView(View)并传给它解压布局。你现在可以通过调用show()显示带有你自定义布局的Toast。

 

-------------------------------

 

Note: Do not use the public constructor for a Toast unless you are going to define the layout with setView(View). If you do not have a custom layout to use, you must use makeText(Context, int, int) to create the Toast.

 

注意:不为一个Toast使用public构造函数,除非你打算用setView(View)定义布局。如果你没有一个要使用的自定义布局,你必须使用makeText(Context, int, int)创建Toast。

 

-------------------------------

 

Except as noted, this content is licensed under Apache 2.0. For details and restrictions, see the Content License.

 

除特别说明外,本文在Apache 2.0下许可。细节和限制请参考内容许可证。

 

Android 4.0 r1 - 01 Dec 2011 20:53

 

-------------------------------

 

Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.

 

(此页部分内容基于Android开源项目,以及使用根据创作公共2.5来源许可证描述的条款进行修改)



    
[2] 【转载】开发经验总结,很享用
    来源: 互联网  发布时间: 2014-02-18
【转载】开发经验总结,很受用。

1、有一个方法,有一段类似于下面这样:

new Thread(){   
    public void run(){ 
       // 做了一些数据库操作           
      db.close();       
    }   
}.start();  
 

 

结 果运行过程中,发现有时候会报数据库已经锁定的异常。最后才定位到上面这段代码。原因是在上面的run()方法中打开了数据库,这个时候会自动锁定 Database,如果在关闭数据库之前,另外一个线程B也进行数据库操作,就会报这个异常。如果数据库已经关闭之后,另外一个线程B请求数据库操作,就 没有问题。

所以在新线程中进行数据库操作,或者是TimerTask中进行数据库操作的时候,要注意考虑并发的问题,也许就会有数据库锁定的异常。

2、另外一段代码,将TimerTask的销毁操作放在了Service的onDestory()方法里,但是发现有时候会报TimerTask已经 schedule的异常。开始就觉得很奇怪,不是已经在onDestory()方法里关闭了TimerTask了吗?后来想到,Service的 onDestory()方法不是一定有机会执行的。在资源不足的时候,系统会强行关闭Service,在这种情况下,onDestory()方法是没有机 会执行的。

所以,绝对不能依赖组件的onDestory()方法。

3、这次项目管理有一个失误的地方。就是在项目设计早期,没有关注数据库表设计。到了后期才来检查数据库的设计,结果发现有很多地方需要变更,这就造成建表语句、模型对象、DAO都要修改,开发和测试的成本都非常高。

所以以后一定要在早期就关注数据库设计,如果有迫不得已的数据库变更(这个几乎是难免的),也要趁早进行

4、有的时候,发现两个组员都是更新了最新的代码,可是一个能正常跑起来,另一个人就总是报错。这种情况,一般是因为数据库错误引起的,虽然是同样的代 码,但是却不是同样的数据库。这种情况下,需要把旧的应用卸载,重新启动。这样就会触发SqliteDatabaseOpenHelper的 onCreate()方法,重新建立一致的数据库

5、前期把整个应用的常量,都放在一个Constants类里,这样虽然避免了硬编码,但是其实由于Constants类里充斥了各种各种的常量,也失去了可维护的意义。所以如果常量太多的话,可以考虑根据模块或者业务,分散到不同的Constants类里

6、一般跳转到别的Activity,是调用startActivity()方法,不过如果需要在新Activity里做完某些操作以后,再通知原先的 Activity的话,应该调用startActivityForResult()方法,然后实现onActivityResult()方法

7、有一次在DDMS里发现了has leaked window的异常告警。这种情况一般是在Activity里创建了Dialog,然后又没有及时关闭引起的。解决的办法很简单,在需要创建Dialog 的地方,调用showDialog()方法,然后在Activity里实现onCreateDialog()方法,这样的话,Activity就会管理 Dialog的生命周期,就不会发生上述的问题了

8、一般连接android底层的linux,用adb shell命令就可以了。但是如果同时开启了模拟器,又连接了真机,就不能这样了,必须用以下的命令:
adb devices,这个命令可以看到有哪些设备,包括了模拟器和真机
然后用adb -s (deviceId) shell,就可以连接到目标终端上

或者还有一个办法,用adb -d shell连接到设备上,用adb -e shell连接到模拟器上

9、我自己定义了一个VO类,可是用Intent.putExtra()方法竟然放不进去,原来是这个VO没有实现Serializable接口

10、项目中业务上需要很多后台长时间运行的Service,可是后来发现Service实在太多了,所以换了一个方案。把实现业务逻辑的 Service,都改成用IntentService实现。只开启一个长时间后台运行的Service,在这个Service里用多个 TimerTask,定时去startService()各个IntentService。这样应用就只有一个驻留Service了

11、很多Service都去实现onStart()方法,其实这是不对的,onStart()是一个遗留方法。Android2.2以上的版本,官方推荐是实现onStartCommand()方法

12、如果没有多线程的需求的话,使用IntentService替代Service是一个不错的选择。一方面不需要编码另起线程(Service默认是 跑在UI Thread里的,这点相当恐怖),另一方面,也不需要显式地调用stopSelf(),或者stopService()。IntentService的 问题是,如果需要并发地处理请求,则晚来的Intent只能排队

13、TimerTask比较多的话,一个最佳实践(或者是迷信)是:用3、7、11、13、17这样的素数错开运行的时间

14、一个已经调用了.cancel()方法的TimerTask,不能被再次作为Timer.schedule()的参数,需要重新实例化一个TimerTask

15、没有特别的需求的话,个人建议可以在AndroidManifest.xml里不配置intent-filter,这样就强制代码只能用显式的Intent来跳转Activity或者开启Service,不能用隐式的Intent来调用。

这种做法虽然损失了一些面向组件的灵活性,但是定位问题会比较简单。因为比较容易查出来,某个Service被哪些组件启动了,或者某个Activity可以从哪些页面跳转过来

当然,如果Activity和Service被设计为允许其他应用使用,那必须要支持隐式的Intent调用

16、数据库字段的命名,还是有点讲究的。比如在T_PERSON表里,字段就没必要再命名成PERSON_NAME,直接叫NAME就可以了,前者比较 冗余。这个虽然是小问题,但是对于追求细节完美的应用来说,还是要注意的。如果前期没有注意,到项目后期再统一优化,代价会大很多

17、原来经常用getSharedPreference()方法,来获取自定义SP文件。其实发现,用PreferenceManager.getDefault()方法就可以获得一个默认的SP文件了

18、DTO和VO,建议重载toString()方法,调试会很方便

19、Activity的findViewById()方法,和View的findViewById()是不一样的。
前者一般都在onCreate()方法里调用setContentView()方法,然后findViewById()就是从这个xml文件里找ID
后者一般调用一个inflate()方法,然后findViewById()方法是从这个xml文件里找ID

 

 

1 楼 bianguai2014 2011-12-09  
好东西,谢谢
2 楼 liu_jun_y 2011-12-14  
自己每次项目完后都想总结下,但总是推。。。。

    
[3] WP7根本技巧 新手必看
    来源: 互联网  发布时间: 2014-02-18
WP7基本技巧 新手必看

以HD7为例...不过WP7手机应该都差不多...所以应该是通用的...
1:静音方法:点一下音量键 屏幕上方出现一个状态栏 点击右面的"铃铛"图标 就静音了...恢复为有声的方法一样
2:搜索键(就是下面那3个触摸按键最右面哪个...):在正常状态下点击搜索键可以打开必应搜索 在市场中点击搜索键可以搜索市场中的东西(在music中点击为搜索音乐 在app和games中点击为搜索游戏和应用) 在IE中点击可以打开谷歌主页
3:Windows键(就是搜索键左面那个...):长按可以打开语音搜索,你说啥他就在bing里搜索啥...不过不支持中文...    在应用程序中点击windows键可以回到桌面,之后点击返回键(windows键左面的...)可以恢复到刚才推出的程序(也就是说你要是在玩游戏,突然来个短信,你可以点击windows键想出去看看短信,然后看完了,也回完了,你就再点击返回键,就可以继续刚才的游戏...)
4:图标:点击图标进入应用程序(废话...)  长按图标会出现一个菜单,有pin to start,点击后把图标创建快捷方式在桌面   如果是下载的程序(非自带),菜单中会有删除和评价选项(觉得好的程序就给他好的评价吧,这样作者才会有信心开发更好的程序)
5:在主页向左滑动也可以进入程序列表,不一定非要点击右上角哪个箭头...
6:计算器:计算器很强大的,,,不要小瞧它...  默认进入的时候,计算器是竖屏的,只有普通的功能,这时候,你给他弄成横屏....你会发现他多了很多功能...而且...不光可以左横屏,还可以右横屏,界面是不一样的!...也就是有3个界面:普通界面,左横屏界面,右横屏界面   这样这个计算器就牛逼了.............
7:相机:照完相之后,向右拖动屏幕左面,就能看见刚才照的像了...
8:联系人:在联系人界面中点击联系人前面的字母,就可以选择26个首字母了...快速查找联系人...
9:在图片界面中,长按空白处 可以选择背景界面 手动或自动,参考:www.windbus.com


    
最新技术文章:
▪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