标签:
Toast吐司是我们经常用到的一个控件,Toast是AndroidOS用来显示消息的一种机制,它与Dialog不同,Toast不会获取到焦点,通常显示一段时间之后就会自动消失,下面我们来介绍Toast的几种常用方式:
第一种,默认显示方式,也是最常用的方式:
Toast.makeText(MainActivity.this, "这是默认的显示方式", Toast.LENGTH_SHORT).show();
第二种,自定义设置位置的显示方式:
Toast toast = Toast.makeText(MainActivity.this, "这是自定义显示位置的效果", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER, 0, 0);
toast.show();
第三种,带图片显示:
Toast toast = Toast.makeText(MainActivity.this, "这是带图片的效果", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER, 0, 0);
LinearLayout linearLayout = (LinearLayout) toast.getView();
ImageView imageView = new ImageView(MainActivity.this);
imageView.setImageResource(R.mipmap.ic_launcher);
linearLayout.addView(imageView, 0);
toast.show();
第四种,完全自定义显示方式:
LayoutInflater layoutInflater = getLayoutInflater();
View toastView = layoutInflater.inflate(R.layout.custom_toast, (ViewGroup) findViewById(R.id.ll_toast));
Toast toast = new Toast(MainActivity.this);
toast.setDuration(Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setView(toastView);
toast.show();
布局文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_toast"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16sp"
android:layout_marginTop="16sp"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是完全自定义的吐司"
android:textSize="20sp" />
</LinearLayout>
第五种,其他线程通过handler显示:
new Thread(new Runnable() {
@Override
public void run() {
handler.sendEmptyMessage(1);
}
}).start();
public void showToast() {
Toast.makeText(MainActivity.this, "这是来自其它线程的吐司", Toast.LENGTH_SHORT).show();
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
showToast();
}
super.handleMessage(msg);
}
};
实现效果图:
最后附上Toast的国内镜像API
Notification是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。在AndroidAPI3.0之前,推荐使用Notification.Builder构建一个消息,但是在3.0之后,推荐使用NotificationCompat.Builder构建。
下面我们介绍一下Notification的基本使用方法:
通知主要涉及到两个类:
通知设置的相关方法:
使用Notification的步骤:
注意:Android系统提供两种取消通知的方法:一种是Notification自己维护,使用setAutoCancel()方法设置是否维护,传递一个boolean类型的数据。另外一种方式使用NotificationManager通知管理器对象来维护,它通过notify()发送通知的时候,指定的通知标识Id来操作通知,可以使用cancel(int)来移除一个指定的通知,也可以使用cancelAll()移除所有的通知。
下面我们通过实现一个简单的例子来体验Notification的用法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
btn_default_notification = (Button) findViewById(R.id.btn_default_notification);
btn_default_notification.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(mContext, DefaultActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
NotificationManager notificationManager = (NotificationManager) MainActivity.this.getSystemService(NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(MainActivity.this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentTitle("默认消息通知");
builder.setContentText("我是默认显示的消息,我进来了");
builder.setWhen(System.currentTimeMillis());
builder.setTicker("接受到一条信息");
builder.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
builder.setAutoCancel(true);
builder.setContentIntent(pendingIntent);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
Notification notification = builder.build();
notificationManager.notify(NOTIFICATION, notification);
}
}
});
}
这里的话就只放Java的代码,其他的就不再设置了,也比较简单。
照例附上Notification的国内镜像API
PopupWindow这个类用来实现一个弹出框,PopupWindow可以加载任意内容的View,这个弹出框是悬浮在当前activity之上的。如果PopupWindow显示了,那么所有的事件都会被其拦截,除了home的之外,例如:一个PopupWindow弹出了,那么你需要点击手机上的退出键让PopupWindow消失,然后Activity才会退出。
下面我们通过一个例子来体验一下PopupWindow:
Activity代码:
package com.example.popupwindow;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button btn_show_pop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_show_pop = (Button) findViewById(R.id.btn_show_pop);
btn_show_pop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
initPop(view);
}
});
}
private void initPop(View view) {
View popView = LayoutInflater.from(MainActivity.this).inflate(R.layout.pop_custom, null);
Button btn_01 = (Button) popView.findViewById(R.id.btn_01);
Button btn_02 = (Button) popView.findViewById(R.id.btn_02);
Button btn_03 = (Button) popView.findViewById(R.id.btn_03);
//初始化一个PopupWindow,第一个参数是加载的View,第二个参数是View的宽度,第三个参数是View的高度,第四个是是否获取焦点
final PopupWindow popupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
//设置加载动画
popupWindow.setAnimationStyle(R.anim.pop_anim);
//设置可以点击空白处让PopupWindow消失
popupWindow.setOutsideTouchable(true);
popupWindow.setTouchable(true);
popupWindow.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
System.out.println("touch");
//这里如果返回true的话,touch事件将被拦截
return false;
}
});
//设置背景颜色
popupWindow.setBackgroundDrawable(new ColorDrawable(0x00ff0000));
//设置PopupWindow显示的位置,第一个参数是相对的View,第二个是X轴,第三个参数是Y轴
//showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
//showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
//showAtLocation(View parent, int gravity, int x, int y): 相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移 PS:parent这个参数只要是activity中的view就可以了!
popupWindow.showAsDropDown(view, 40, 0);
btn_01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "你点击了水果", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
}
});
btn_02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "你点击了运动", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
}
});
btn_03.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "你点击了吃饭", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
}
});
}
}
布局文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="水果" />
<Button
android:id="@+id/btn_02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="运动" />
<Button
android:id="@+id/btn_03"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="吃饭" />
</LinearLayout>
实现效果:
其中,PopupWindow有9种构造方法,如下图所示:
我们常用就一下几种:
public PopupWindow (Context context)
public PopupWindow(View contentView, int width, int height)
public PopupWindow(View contentView)
public PopupWindow(View contentView, int width, int height, boolean focusable)
关于弹出窗的介绍就到这里了,最后照例附上PopupWindow的国内镜像API
Android学习笔记二十之Toast吐司、Notification通知、PopupWindow弹出窗
标签:
原文地址:http://blog.csdn.net/solo_talk/article/details/51831396