androiddialog進度條
❶ android怎麼使用自定義進度條對話框中的控制項
在需要引用自定義進度條的xml的ProgressBar中添加android:indeterminateDrawable="@drawable/自定義進度條xml文件名稱"
❷ android 如何實現彈出一個進度條後,再彈出一個倒計時的界面。
實現流程
Step One 彈出進度條對話框
Step Two 執行線程,在線程中實現數據的非同步載入
Step Three 在線程數據載入完成後,調用Handler並集合數據,更新界面
Java代碼
//添加非同步操作
m_Dialog=ProgressDialog.show(m_context, "請等待...", "正在下載安裝文件,請稍後...",true);
//mRegsiterHandler.sleep(100);
new Thread(new Runnable(){
@Override
public void run() {
//載入數據
result=0;
try{
//下載文件
String url="http://00.00.00.00:80/nationaltest.html";
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
HttpResponse response;
response = client.execute(get);
HttpEntity entity = response.getEntity();
long length = entity.getContentLength();
InputStream is = entity.getContent();
FileOutputStream fileOutputStream = null;
if (is != null) {
File file = new File(Environment.getExternalStorageDirectory(), "nationaltest.apk");
fileOutputStream = new FileOutputStream(file);
byte[] buf = new byte[1024];
int ch = -1;
while ((ch = is.read(buf)) != -1) {
fileOutputStream.write(buf, 0, ch);
}
}
fileOutputStream.flush();
if (fileOutputStream != null) {
fileOutputStream.close();
}
result=2;
}
catch(Exception ex){
result=-1;
}
//更新界面
// Update the progress bar
mHandler.post(new Runnable() {
public void run() {
if(result==2)
install();
else
Toast.makeText(m_context, "下載文件失敗,請檢查網路連接", Toast.LENGTH_SHORT).show();
}
});
m_Dialog.dismiss();
}}).start();
}
❸ Android常用對話框有哪些
1、對話框通知(Dialog Notification)
當你的應用需要顯示一個進度條或需要用戶對信息進行確認時,可以使用對話框來完成。
2、創建帶單選項列表的對話框
3、創建帶多選項列表的對話框
4、進度對話框(ProgressDialog)
❹ 自定義dialog怎麼加入自己的自定義進度條
android修改HOLO對話框風格 andriod中修改對話框的風格,可以通過設置theme來實現,部分元素需要通過Java代碼來修改,下面以修改對話框的標題為例說明各步驟。 1、編寫一個文本樣式。 DIALOG的標題是一個textview
❺ 為什麼android中在dialog中調用progressDialog不用如方法同時載入
private void initProgressDialog() {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("載入中....");
progressDialog.show();
mHandler.postDelayed(runnable, 200);
}
這個方法本身有問題,android系統有一個主線程叫UI主線程,任何在UI主線程上進行較長時間得數據的交互都會導致UI線程堵塞,即有圖像卡頓的現象。
mHandler.postDelayed(runnable, 200);這句話就是指在200毫秒後進行runnable的run方法,而這個方法會在UI主線程上進行,progressDialog轉圈還沒來得及顯示就被這方法給堵塞了,所以會出現你的說那種狀況。
解決方法有幾種,可以用非同步機制,或者消息機制(就好像你這種)。
用消息機制的話 ,mHandler.postDelayed(runnable, 200);這句話就不能要,改為:
Thread t = new Thread(runnable);
t.start();
非同步機制就自己上網搜搜吧。
❻ 如何正確地使用android中的progressdialog-Android
// 方式一:new Dialog
final ProgressDialog dialog = new ProgressDialog(this);
dialog.show();
// 方式二:使用靜態方式創建並顯示,這種進度條只能是圓形條,設置title和Message提示內容
ProgressDialog dialog2 = ProgressDialog.show(this, "提示", "正在登陸中");
// 方式三 使用靜態方式創建並顯示,這種進度條只能是圓形條,這里最後一個參數boolean indeterminate設置是否是不明確的狀態
ProgressDialog dialog3 = ProgressDialog
.show(this, "提示", "正在登陸中", false);
// 方式四 使用靜態方式創建並顯示,這種進度條只能是圓形條,這里最後一個參數boolean cancelable 設置是否進度條是可以取消的
ProgressDialog dialog4 = ProgressDialog.show(this, "提示", "正在登陸中",
false, true);
// 方式五 使用靜態方式創建並顯示,這種進度條只能是圓形條,這里最後一個參數 DialogInterface.OnCancelListener
// cancelListener用於監聽進度條被取消
ProgressDialog dialog5 = ProgressDialog.show(this, "提示", "正在登陸中", true,
true, cancelListener);
❼ Dialog組件功能是什麼
自定義組件---dialog篇
在自定義組件時,從已有組件源碼中會很大收獲。
就拿progressDialog來說
間接父類是dialog,想了解dialog繼承結構可以去api文檔,或者
從構造器來說ProgressDialog(Context context, int theme)很明顯需要個樣式主題文件,我們可以在value文件下自定義一個樣式文件。
從外觀上需要個動態效果控制項和文本框兩個屬性
ProgressBar mProgress; TextView mMessageView
源碼中onCreate()方法中 有
View view = inflater.inflate(R.layout.alert_dialog_progress, null);//來載入布局文件
setView(view);
動態效果是由ProgressBar實現,當然我們可以通過給圖片添加動態效果也可以實現類似功能,這就需要個anim文件
從上可以總結出創建自定義dialog需要的步驟
1.繼承dialog
2.一個主題樣式文件
3.一個布局文件來載入
4.一個anim文件
復制內容到剪貼板
代碼:
public class IphoneProgersssDialog extends Dialog {
private Context context;
private ImageView img;
private TextView txt;
public IphoneProgersssDialog(Context context) {
super(context, R.style.iphone_progress_dialog);
this.context=context;
//載入布局文件
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Viewview=inflater.inflate(R.layout.iphone_progress_dialog, null);
img=(ImageView) view.findViewById(R.id.iphone_progress_dialog_img);
txt=(TextView) view.findViewById(R.id.iphone_progress_dialog_txt);
//給圖片添加動態效果
Animation anim=AnimationUtils.loadAnimation(context, R.anim.progressbar);
img.setAnimation(anim);
txt.setText(R.string.iphone_progressbar_dialog_txt);
//dialog添加視圖
setContentView(view);
}
public void setMsg(String msg){
txt.setText(msg);
}
public void setMsg(int msgId){
txt.setText(msgId);
}
}
看了下pregeressdialog中像activity類一樣都有生命周期函數,其實dialog和activity都是窗體概念,並不是api中window類,有個地方還是不明白,希望哪位以後版主有針對setcontentview 和setview的話題。
現在我們就做個iphone風格的進度條吧!
1.繼承
public class IphoneProgersssDialog extends Dialog
2.定義主題樣式
在value資源文件下
<style name="iphone_progress_dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@Null</item> <!--Dialog的windowFrame框為無 -->
<item name="android:windowIsFloating">true</item><!-- 是否漂現在activity上 -->
<item name="android:windowIsTranslucent">true</item><!-- 是否半透明 -->
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowBackground">@drawable/load_bg</item>
</style>
在構造器中 super(context, R.style.iphone_progress_dialog);
3.定義動畫文件progressbar.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<rotate
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="+360"
android:ration="1000"
android:startOffset="-1"
android:repeatMode="restart"
android:repeatCount="-1"/>
</set>
給圖片載入動畫
Animation anim=AnimationUtils.loadAnimation(context, R.anim.progressbar);
img.setAnimation(anim);
最後就是setContentview;沒有去分析setView的區別
❽ android dialog可以使用log嗎
應該可以。Android Dialog用法
摘要: 創建對話框 一個對話框一般是一個出現在當前Activity之上的一個小窗口. 處於下面的Activity失去焦點, 對話框接受所有的用戶交互. 對話框一般用於提示信息和與當前應用程序直接相關的小功能.Android API 支持下列類型 ...
創建對話框
一個對話框一般是一個出現在當前Activity之上的一個小窗口. 處於下面的Activity失去焦點, 對話框接受所有的用戶交互. 對話框一般用於提示信息和與當前應用程序直接相關的小功能.
Android API 支持下列類型的對話框對象:
警告對話框 AlertDialog: 一個可以有0到3個按鈕, 一個單選框或復選框的列表的對話框. 警告對話框可以創建大多數的交互界面, 是推薦的類型.
進度對話框 ProgressDialog: 顯示一個進度環或者一個進度條. 由於它是AlertDialog的擴展, 所以它也支持按鈕.
日期選擇對話框 DatePickerDialog: 讓用戶選擇一個日期.
時間選擇對話框 TimePickerDialog: 讓用戶選擇一個時間.
如果你希望自定義你的對話框, 可以擴展Dialog類.
Showing a Dialog 顯示對話框
一個對話框總是被創建和顯示為一個Activity的一部分. 你應該在Activity的onCreateDialog(int)中創建對話框. 當你使用這個回調函數時,Android系統自動管理每個對話框的狀態並將它們和Activity連接, 將Activity變為對話框的"所有者". 這樣,每個對話框從Activity繼承一些屬性. 例如,當一個對話框打開時, MENU鍵會顯示Activity的菜單, 音量鍵會調整Activity當前使用的音頻流的音量.
注意: 如果你希望在onCreateDialog()方法之外創建對話框, 它將不會依附在Activity上. 你可以使用setOwnerActivity(Activity)來將它依附在Activity上.
當你希望顯示一個對話框時, 調用showDialog(int)並將對話框的id傳給它.
當一個對話框第一次被請求時,Android調用onCreateDialog(int). 這里是你初始化對話框的地方. 這個回調函數傳入的id和showDialog(int)相同. 創建對話框之後,將返回被創建的對象.
在對話框被顯示之前,Android還會調用onPrepareDialog(int, Dialog). 如果你希望每次顯示對話框時有動態更改的內容, 那麼就改寫這個函數. 該函數在每次一個對話框打開時都調用. 如果你不定義該函數,則對話框每次打開都是一樣的. 該函數也會傳入對話框的id以及你在onCreateDialog()中創建的Dialog對象.
最好的定義onCreateDialog(int) 和onPrepareDialog(int, Dialog) 的方法就是使用一個switch語句來檢查傳入的id. 每個case創建相應的對話框. 例如, 一個游戲使用兩個對話框: 一個來指示游戲暫停,另一個指示游戲結束. 首先, 為它們定義ID:static final int DIALOG_PAUSED_ID = 0;
static final int DIALOG_GAMEOVER_ID = 1;
然後, 在onCreateDialog(int)中加入一個switch語句:
protected Dialog onCreateDialog(int id) {
Dialog dialog;
switch(id) {
case DIALOG_PAUSED_ID:
// do the work to define the pause Dialog
break;
case DIALOG_GAMEOVER_ID:
// do the work to define the game over Dialog
break;
default:
dialog = null;
}
return dialog;
}
注意: 在這個例子中, case語句為空因為定義Dialog的程序在後面會有介紹.
在需要顯示對話框是, 調用showDialog(int), 傳入對話框的id:
showDialog(DIALOG_PAUSED_ID);Dismissing a Dialog 解除對話框
當你准備關閉對話框時, 你可以使用dismiss()函數. 如果需要的話, 你也可以從Activity調用dismissDialog(int), 二者效果是一樣的.
如果你使用onCreateDialog(int)來管理你的對話框的狀態, 那麼每次你的對話框被解除時, 該對話框對象的狀態會被Activity保存. 如果你決定你不再需要這個對象或者需要清除對話框的狀態, 那麼你應該調用 removeDialog(int). 這將把所有該對象的內部引用移除, 如果該對話框在顯示的話將被解除.
Using dismiss listeners 使用解除監聽器
如果你希望在對話框解除時運行某些程序, 那麼你應該給對話框附加一個解除監聽器.
首先定義DialogInterface.OnDismissListener介面. 這個介面只有一個方法, onDismiss(DialogInterface), 該方法將在對話框解除時被調用.
然後將你的OnDismissListener實現傳給setOnDismissListener().
然而,注意對話框也可以被"取消". 這是一個特殊的情形, 它意味著對話框被用戶顯式的取消掉. 這將在用戶按下"back"鍵時, 或者對話框顯式的調用cancel()(按下對話框的cancel按鈕)時發生. 當一個對話框被取消時, OnDismissListener將仍然被通知, 但如果你希望在對話框被顯示取消(而不是正常解除)時被通知, 則你應該使用setOnCancelListener()注冊一個DialogInterface.OnCancelListener.
Creating an AlertDialog 創建警告對話框
An AlertDialog is an extension of the Dialog class. It is capable of constructing most dialog user interfaces and is the suggested dialog type. You should use it for dialogs that use any of the following features:
一個警告對話框是對話框的一個擴展. 它能夠創建大多數對話框用戶界面並且是推薦的對話框類新星. 對於需要下列任何特性的對話框,你都應該使用它:
一個標題
一條文字消息
1個-3個按鈕
一個可選擇的列表(單選框或者復選框)
要創建一個AlertDialog, 使用AlertDialog.Builder子類. 使用AlertDialog.Builder(Context)來得到一個Builder, 然後使用該類的公有方法來定義AlertDialog的屬性. 設定好以後, 使用create()方法來獲得AlertDialog對象.
下面的主題展示了如何為AlertDialog定義不同的屬性, 使用AlertDialog.Builder類. 如果你使用這些示例代碼, 你可以在onCreateDialog()中返回最後的Dialog對象來獲得圖片中對話框的效果.
Adding buttons 增加按鈕
要創建一個如圖所示的窗口, 使用set...Button()方法:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MyActivity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).show();
AlertDialog alert = builder.create();
首先,使用setMessage(CharSequence)為對話框增加一條消息。 然後, 開始連續調用方法, 使用setCancelable(boolean)將對話框設為不可取消(不能使用back鍵來取消)。對每一個按鈕,使用set...Button()方法,該方法接受按鈕名稱和一個DialogInterface.OnClickListener,該監聽器定義了當用戶選擇該按鈕時應做的動作。
注意:對每種按鈕類型,只能為AlertDialog創建一個。也就是說,一個AlertDialog不能有兩個以上的"positive"按鈕。這使得可能的按鈕數量最多為三個:肯定、否定、中性。這些名字和實際功能沒有聯系,但是將幫助你記憶它們各做什麼事情。
Adding a list 增加列表
要創建一個具有可選項的AlertDialog,使用setItems()方法
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
首先增加一個標題。然後使用setItems()增加一個可選列表,該列表接受一個選項名稱的列表和一個DialogInterface.OnClickListener, 後者定義了選項對應的響應。
Adding checkboxes and radio buttons 增加單選框和復選框
要創建一個帶有多選列表或者單選列表的對話框, 使用setMultiChoiceItems()和setSingleChoiceItems()方法。如果你在onCreateDialog()中創建可選擇列表, Android會自動管理列表的狀態. 只要activity仍然活躍, 那麼對話框就會記住剛才選中的選項,但當用戶退出activity時,該選擇丟失。
注意: 要在你的acitivity離開和暫停時保存選擇, 你必須在activity的聲明周期中正確的保存和恢復設置。為了永久性保存選擇,你必須使用數據存儲技術中的一種。
要創建一個具有單選列表的AlertDialog,只需將一個例子中的setItems()換成 setSingleChoiceItems():
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
第二個參數是默認被選中的選項位置,使用「-1」來表示默認情況下不選中任何選項。
Creating a ProgressDialog 創建進度對話框
一個ProgressDialog(進度對話框)是AlertDialog的擴展。它可以顯示一個進度的動畫——進度環或者進度條。這個對話框也可以提供按鈕,例如取消一個下載等。
打開一個進度對話框很簡單,只需要調用 ProgressDialog.show()即可。例如,上圖的對話框可以不通過onCreateDialog(int),而直接顯示:
ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "",
"Loading. Please wait...", true);
第一個參數是應用程序上下文。第二個為對話框的標題(這里為空),第三個為對話框內容, 最後一個為該進度是否為不可確定的(這只跟進度條的創建有關,見下一節)。
進度對話框的默認樣式為一個旋轉的環。如果你希望顯示進度值,請看下一節。
Showing a progress bar 顯示進度條
使用一個動畫進度條來顯示進度:
使用 ProgressDialog(Context)構造函數來初始化一個ProgressDialog對象。
將進度樣式設置為"STYLE_HORIZONTAL",使用setProgressStyle(int)方法。並且設置其它屬性,例如內容等。
在需要顯示時調用show()或者從onCreateDialog(int)回調函數中返回該ProgressDialog。
你可以使用 setProgress(int)或者incrementProgressBy(int)來增加顯示的進度。
例如,你的設置可能像這樣:ProgressDialog progressDialog;
progressDialog = new ProgressDialog(mContext);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(false);
設置很簡單。大部分創建進度對話框需要的代碼是在更新它的進程中。你可能需要在一個新的線程中更新它,並使用Handler來將進度報告給Activity。如果你不熟悉使用Handler和另外的線程,請看下列例子,該例子使用了一個新的線程來更新進度。
Example ProgressDialog with a second thread 例--使用一個線程來顯示進度對話框
這個例子使用一個線程來跟蹤一個進程的進度(其實為從1數到100)。每當進度更新時,該線程通過Handler給主activity發送一個消息。主Activity更新ProgressDialog.package com.example.progressdialog;
❾ android 怎樣設置單擊一個按鈕,不會重復彈出dialog
Android中的對話框是經常用的組件,是用來提示用戶的消息的。
常用的對話框有
1:警告對話框
AlertDialog:
一個可以有0到3個按鈕,
一個單選框或復選框的列表的對話框.
警告對話框可以創建大多數的交互界面,
是推薦的類型.
2:進度對話框
ProgressDialog:
顯示一個進度環或者一個進度條.
由於它是AlertDialog的擴展,
所以它也支持按鈕.
3:日期選擇對話框
DatePickerDialog:
讓用戶選擇一個日期.
4:時間選擇對話框
TimePickerDialog:
讓用戶選擇一個時間.
為了讓用戶重復單機按鈕不會重復產生對話框只要在產生對話框的時候做個判斷即可,定義個全局的對話框。
AlertDialog.Builder
builder
=
null;//這里先設置為null
點擊按鈕產生對話框
button2.setOnClickListener(new
OnClickListener()
{
public
void
onClick(View
v)
{
if(builder
!=null){
builder
=
new
AlertDialog.Builder(MainDialog.this);
builder.setIcon(R.drawable.icon);
builder.setTitle("你確定要離開嗎?");
builder.setPositiveButton("確定",
new
DialogInterface.OnClickListener()
{
public
void
onClick(DialogInterface
dialog,
int
whichButton)
{
//這里添加點擊確定後的邏輯
showDialog("你選擇了確定");
}
});
builder.setNegativeButton("取消",
new
DialogInterface.OnClickListener()
{
public
void
onClick(DialogInterface
dialog,
int
whichButton)
{
//這里添加點擊確定後的邏輯
showDialog("你選擇了取消");
}
});
builder.create().show();//顯示兌換框
}
}
});
