編輯:關於Android編程
對話框是提示用戶作出決定或輸入額外信息的小窗口。對話框不會填充屏幕,通常用於需要用戶采取行動才能繼續執行的模式事件。Android中常見跟對話框相關控件有Toast、AlertDialog、PopupWindow、ProgressDialog等
Toast用於彈出一個簡單文本信息為應用提供反饋,可以和當前活動保持可見和互動,在一定時間後自動消失。Toast有兩種形式基本Toast和自定義Toast,效果如圖2.5.1-1所示:
圖2.5.1-1
1、基本Toast的實現
首先通過makeText()實例化一個Toast,然後調用show()進行顯示,代碼實現:
Toast toast = Toast.makeText(context, “請檢查網絡連接”,
Toast.LENGTH_SHORT.);
toast.show();
2、自定義Toast
如果一個簡單的文本信息是不夠的,可以為Toast自定義布局並可以設置在屏幕上的顯示位置。
?要創建一個自定義布局,定義視圖的布局
?通過setView()方法加載布局。
下面就通過案例2.5-1,實現如圖2.5-1所示的應用效果
圖2.5-1
AlertDialog是Dialog的子類,可實現簡單、方便、靈活的構建對話框。AlertDialog可顯示標題、最多三個按鈕、可選擇項列表或自定義布局。AlertDialog
主要有三個布局區域如圖2.5-2所示:
圖2.5-2
AlertDialog實現要點
?實現向AlertDialog添加按鈕
通過調用 setPositiveButton() 和 setNegativeButton() 方法實現為對話框添加按鈕,代碼如下:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setPositiveButton(“ok”, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
builder.setNegativeButton(“cancel”, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}});
?創建自定義布局
想讓對話框具有自定義布局,需創建一個布局,然後通過調AlertDialog.Builder對象上的 setView()將其添加到 AlertDialog,代碼如下:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.dialog_signin, null));
默認情況下,自定義布局會填充對話框窗口,但仍然可以使用 AlertDialog.Builder 方法來添加按鈕和標題。
下面就通過案例2.5-2,實現如圖2.5-3 所示的應用效果
圖2.5-3
PopupWindow是可在任意位置彈出的對話框,在當前活動的Activity的頂部顯示一個浮動的容器。AlertDialog與PopupWindow的區別:
?AlertDialog的位置固定,而PopupWindow的位置可以隨意。
?AlertDialog是非阻塞線程的,而PopupWindow是阻塞線程的。
PopupWindow的實現:
?構建PopupWindow
View view= LayoutInflater.from(this).inflate(
R.layout.popuwindow_layout,null);
mPopupWindow=new PopupWindow(view);
?設置PopupWindow
1、單擊外側區域關閉PopupWindow
顯示PopupWindow之後在外面點擊是關閉窗口需進行下列設置,否則點擊外面並不會關閉PopupWindow。
mPopupWindow.setFocusable(true);
ColorDrawable colorDrawable=new ColorDrawable(0);
mPopupWindow.setBackgroundDrawable(colorDrawable);
2、為popupwindow添加動畫
首先在anim中定義動畫資源,並在Style中定義樣式然後使用setAnimationStyle()方法為PopupWindow添加動畫,代碼如下:
進入動畫:
android:fromAlpha="0"
android:toAlpha="1"
android:duration="1000"
/>
退出動畫:
android:fromAlpha="1" android:toAlpha="0"/>
定義樣式:
設置動畫
mPopupWindow.setAnimationStyle(R.style.popuAnimationStyle);
?彈出PopupWindow
showAsDropDown(view):相對某個控件的位置(正左下方),無偏移
showAsDropDown(view, xoff, yoff):相對某個控件的位置,有偏移
showAsDropDown(view, xoff, yoff, gravity):相對某個控件的指定位置,有偏移
showAtLocation(parent, gravity, x, y):相對於父控件的指定位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以設置偏移或無偏移
下面就通過案例2.5-3,講解PopupWindow的用法
1、實現在控件的正下方彈出菜單
帶有進度條(Progressbar)的對話框,該對話框只能顯示一個文本或一個View加上一個進度條,但文本和View不能同時使用。如果顯示不確定的進度(圓形進度條),則不建議使用ProgressDialog,而應改為在Activity布局中使用
ProgressDialog的幾個方法
1.setMax()
設置對話框中進度條的最大值,進度的取值范圍為0..10000。
2.setTile()
設置標題。
3.setProgressStyle()
設置對話框中進度條的樣式。例如:環形和水平。
參數:
ProgressDialog.STYLE_SPINNER 環形精度條。
ProgressDialog.STYLE_HORIZONTAL 水平樣式的進度條。
4.setMessage()
設置顯示的內容。
下面就通過案例2.5-4,講解ProgressDialog的用法,執行效果如圖2.5-4
圖2.5-4
提示:本例中用於異步任務,請參閱AsyncTask的用法請參閱《第三章 事件處理》異步任務相關內容
public class ProgressDialogActivity extends AppCompatActivity { private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_progress_dialog); showProgressDialog(); new UpdateAsyncTask().execute(); } private void showProgressDialog(){ //創建ProgressDialog progressDialog = new ProgressDialog(ProgressDialogActivity.this); //設置ProgressDialog的樣式 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //設置標題 progressDialog.setTitle("軟件更新"); //設置顯示的內容 progressDialog.setMessage("正在下載"); //設置最大值 progressDialog.setMax(100); //設置進度值 progressDialog.setProgress(0); //顯示對話框 progressDialog.show(); } private Integer progress=0; private class UpdateAsyncTask extends AsyncTask{ @Override protected Void doInBackground(Void... params) { //模擬網絡操作。 while(progress<100){ try { Thread.sleep(1000); progress+=10; publishProgress(progress); } catch (InterruptedException e) { e.printStackTrace(); } } return null; } @Override protected void onPostExecute(Void aVoid) { //執行完成之後,關閉對話框。 progressDialog.dismiss(); } @Override protected void onProgressUpdate(Integer... values) { Log.d("jereh","dfdfdf"); super.onProgressUpdate(values); //更改進度條的值 progressDialog.setProgress(values[0]); } }
應用項目需要要屏蔽HOME鍵。項目本身的要求是讓按下HOME鍵後程序不做任何響應,就像按下返回鍵一樣在onBackPressed 方法中直接return啥都
最流行的android組件大全http://www.open-open.com/lib/view/open1409108030307.htmlAndroid開源項目分類匯
1.引言 所謂的消息推送就是從服務器端向移動終端發送連接,傳輸一定的信息。比如一些新聞客戶端,每隔一段時間收到一條或者多條通知,這就是從服務器端傳來的推送消息;還
前言對於移動開發者來說,“將耗時的任務放到子線程去執行,以保證UI線程的流暢性”是線程編程的第一金科玉律,但這條鐵則往往也是UI線程不怎麼流暢的主因。我們在督促自己更多的