編輯:關於Android編程
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();
布局文件代碼:
第五種,其他線程通過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類:通知信息類,它用於承載通知的內容,一般我們不直接構建這個對象,而是使用它的一個內部類NotificationCompat.Builder來實例化一個對象(Android3.0之下使用Notification.Builder),並設置通知的各種屬性,最後通過NotificationCompat.Builder.build()方法得到一個Notification對象。當獲得這個對象之後,可以使用NotificationManager.notify()方法發送通知。 NotificationManager類:是一個通知管理器類,這個對象是由系統維護的服務,是以單例模式獲得,所以一般並不直接實例化這個對象。在Activity中,我們直接傳入Context.NOTIFICATION_SERVICE就可以通過調用Activity.getSystemService(String)方法獲取NotificationManager對象。通知設置的相關方法:
setContentTitle(CharSequence):設置標題,必須要設置 setContentText(CharSequence):設置內容,必須要設置 setSmallIcon(int):設置在接收到通知的時候頂部顯示的小圖標,必須要設置 setSubText(CharSequence):設置內容下面一小行的文字 setTicker(CharSequence):設置收到通知時在頂部顯示的文字信息 setLargeIcon(Bitmap):設置大圖標 setAutoCancel(boolean):用戶點擊Notification點擊面板後是否讓通知取消(默認不取消) setDefaults(int):向通知添加聲音、閃燈和振動效果的最簡單、 使用默認(defaults)屬性,可以組合多個屬性,Notification.DEFAULT_VIBRATE(添加默認震動提醒);Notification.DEFAULT_SOUND(添加默認聲音提醒);Notification.DEFAULT_LIGHTS(添加默認三色燈提醒);Notification.DEFAULT_ALL(添加默認以上3種全部提醒) setVibrate(long[]):設置振動方式 setLights(int argb, int onMs, int offMs):設置三色燈,參數依次是:燈光顏色, 亮持續時間,暗的時間 setSound(Uri):設置接收到通知時的鈴聲,可以用系統的,也可以自己設置 setOngoing(boolean):設置為ture,表示它為一個正在進行的通知 setProgress(int,int,boolean):設置帶進度條的通知 參數依次為:進度條最大數值,當前進度,進度是否不確定 如果為確定的進度條 setContentIntent(PendingIntent):PendingIntent和Intent略有不同,它可以設置執行次數, 主要用於遠程服務通信、鬧鈴、通知、啟動器、短信中,在一般情況下用的比較少 setPriority(int):設置優先級使用Notification的步驟:
第一步:獲得一個NotificationManager對象, 第二步:創建一個通知欄的Builder構造類 第三步:對Builder進行相關的設置,通過用上面介紹的相關方法 第四步:調用Builder的build()方法為notification賦值 第五步:調用NotificationManager的notify()方法發送通知注意: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();
}
});
}
}
布局文件代碼:
實現效果:
其中,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)
android 5.0 以後,app可以在styles.xml中通過設置主題theme的顏色來設置指定的Activity或者整個app的顯示的顏色,一直對幾個屬性混淆,這
前言昨日,公司討論用什麼工具來統計Crash信息時,有提出友盟,TalkingData,Crashlytics等等工具。鑒於之前其他兄弟部門有使用Crashlytics和
滑動導航菜單一直都是移動App中比較流行的UI設計,隨著Material Design的盛行Android也越來越多采用這種設計,當然這種滑動菜單樣式也是各種各樣五花八門
前言 之前博客裡已經將了MediaPlayer的簡單應用,如何使用MediaPlayer在Android應用中播放音頻。這篇博客在MediaPlayer使用的基礎