Android - 基本的なコントロール (パート 2) (15)

1.ダイアログ:ダイアログ

1.1 知識ポイント

(1) ダイアログボックスの主な機能を習得します。

(2) AlertDialog および AlertDialog.Builder を使用してダイアログ ボックスを作成できます。

(3) カスタマイズされたダイアログ ボックスは、LayoutInflater を通じて実装できます。

(4) 日付ダイアログ、時刻ダイアログ、進捗ダイアログの動作を定義できます。

1.2 具体内容

 このような継承関係により、Dialog は View クラスのサブクラスではないことがわかり、Dialog コンポーネントはレイアウト ファイルに記述できず、Activity プログラムに記述する必要があります。

API の観察を通じて、Dialog クラスには複数のサブクラスがあり、これらのサブクラスはさまざまな形式のダイアログ ボックスを実装しているだけであることがわかりました。

AlertDiglog クラスと AlertDialog.Bulider クラス:

Alert は警告を意味するため、AlertDialog は警告ボックスを表し、主にいくつかの警告情報をポップアップします。

 

AlertDialog は Dialog のサブクラスであることがわかり、Dialog のすべての (非プライベート) メソッドを使用できます。API を介して、AlertDialog クラスの構築メソッドはすべて予想される変更であることがわかります。この型のメソッドは、この型とこの型のみを持つことができ、そのクラスのサブクラスと同じパッケージ内のクラスが呼び出されます。したがって、このタイプのコンストラクターを使用してそのようなオブジェクトを構築する方法はありません。そこで疑問が生じます: 作成したプログラムで AlertDialog オブジェクトをインスタンス化したい場合は、AlertDialog.Bulider クラスを使用する必要があります。AlertDialog.Bulider クラスの名前でそれを知ることができます。これは、作成するための特殊なクラスです。アラートボックス。

 

 

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.dialog = new AlertDialog.Builder(this).create();//创建Dialog对象
	}
}

 ここでプログラムはダイアログ ボックスを作成しますが、このダイアログ ボックスには内容がありません。そのため、内容を入力しましょう。

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.dialog = new AlertDialog.Builder(this)
		.setTitle("对话框")
		.setIcon(R.drawable.logo)
		.setMessage("这是一个对话框")
		.create();//创建Dialog对象
		this.dialog.show();//显示对话框
	}
}

この時点でダイアログ ボックスが作成されます。将来、多くのプロジェクトでダイアログ ボックスを使用する必要があります。たとえば、データを削除する場合、ユーザーの誤操作を防ぐために情報プロンプト ボックスが必要になります。削除するかどうかをユーザーに確認させることもダイアログボックスで実現していますが、この種のダイアログボックスには必ずボタンを追加する必要があります。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				DialogActivity.this.dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("确认删除?")
				.setIcon(R.drawable.exit)
				.setMessage("您确定要删除此笔数据?")
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//确认之后需要做的事情
					}
				}).setNeutralButton("查看详情", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//查看详情所需要做的事情
					}
				}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//取消操作
					}
				})
				.create();//创建Dialog对象
				DialogActivity.this.dialog.show();//显示对话框
			}
		});
		
	}
}

今は単に画面を書いているだけですが、後ほどビジネスニーズに応じてイベント操作を追加する必要があります。

 

多くのプログラムでは、ユーザーは exit 関数を実装できます。通常、すべての exit プログラムには確認ボックスがあり、終了時に呼び出され、ユーザーが終了するかどうかを選択できるようになります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ImageButton
        android:id="@+id/but"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/exit" />
</LinearLayout>

 レイアウトが完成したので、肝心なのはアクティビティプログラムに終了するかどうかを確認するダイアログボックスを記述することですが、もう一つのキーはプログラムをいつ終了するかです。Activity クラスで提供されるfinish()を直接使用して、プログラムの終了を完了できます。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	private ImageButton but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.but = (ImageButton) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				DialogActivity.this.dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("确认退出?")
				.setIcon(R.drawable.exit)
				.setMessage("您确定要退出此程序吗?")
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//确认之后需要做的事情
						DialogActivity.this.finish();//表示退出程序
					}
				}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						//取消操作
					}
				})
				.create();//创建Dialog对象
				DialogActivity.this.dialog.show();//显示对话框
			}
		});
		
	}
}

携帯電話の場合、直接リターンキーを押してプログラムを終了できる学生も多いと思いますが、再度リターンキーを押すと終了確認ダイアログが表示されます。このとき相対キーを監視する場合は、キーを監視するための操作メソッドを書き換えるだけで済みます。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class DialogActivity extends Activity {
	private Dialog dialog = null;
	private ImageButton but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dialog);
		this.but = (ImageButton) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				DialogActivity.this.extiDialog();//调用弹出对话框的方法
			}
		});
	}
	/**
	 * @param keyCode 按下的是哪个键
	 * @param event
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		//此处需要进行判断按下的是否是返回键
		if(keyCode == KeyEvent.KEYCODE_BACK){
			this.extiDialog();
		}
		return false;//表示继续执行
	}
	/**
	 * 弹出退出对话框并进行监听操作
	 */
	public void extiDialog(){
		DialogActivity.this.dialog = new AlertDialog.Builder(DialogActivity.this)
		.setTitle("确认退出?")
		.setIcon(R.drawable.exit)
		.setMessage("您确定要退出此程序吗?")
		.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				//确认之后需要做的事情
				DialogActivity.this.finish();//表示退出程序
			}
		}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				//取消操作
			}
		})
		.create();//创建Dialog对象
		DialogActivity.this.dialog.show();//显示对话框
	}
}

ダイアログリスト:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <Button
        android:id="@+id/but"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请选择你喜欢的水果" />
    <TextView 
        android:id="@+id/mytext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

 レイアウトは作成されました。重要なのは、アクティビティ プログラムでリスト ダイアログ ボックスを定義することです。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	private String fruitData[] = {"苹果","西瓜","水蜜桃"};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						
					}
				}).setItems(DialogActivity.this.fruitData,  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						String fruit = fruitData[which];
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + fruit);
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

現在のプログラムはハードコーディングによって完成していますが、コンテンツをハードコーディングしたくない場合は、果物の情報を別のファイル (前述のリソース ファイル) に構成できます。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="friut">
        <item>苹果</item>
        <item>西瓜</item>
        <item>水蜜桃</item>
    </string-array>
</resources>

ここで必要なのは、アクティビティ プログラムを変更するだけです。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						DialogActivity.this.mytext.setText("");//情况内容
					}
				}).setItems(R.array.friut,  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						String fruit = DialogActivity.this.getResources().getStringArray(R.array.friut)[which];//从资源文件中读取选中的内容
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + fruit);
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

設定ファイルを使用して最終的な表示効果を実現し、リスト情報が完成したら、次にラジオ ボタン ダイアログ ボックスを実装する方法を検討します。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	private String fruitData[] = {"苹果","西瓜","水蜜桃"};
	private int index = 1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setPositiveButton("确认",  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
					
					}
					//DialogActivity.this.index 表示默认的选中项
				}).setSingleChoiceItems(DialogActivity.this.fruitData, DialogActivity.this.index, new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						String fruit = fruitData[which];
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + fruit);
						DialogActivity.this.index = which;//保存我们已选中的项
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

 このプログラムにはラジオ選択が実装されていますが、ホーム画面に戻るには確認またはキャンセル ボタンをクリックする必要があります。その場合は、「確認」をクリックした後にホーム画面の情報を更新することをお勧めします。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	private String fruitData[] = {"苹果","西瓜","水蜜桃"};
	private int index = 1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setPositiveButton("确认",  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						String fruit = fruitData[DialogActivity.this.index];
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + fruit);
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
					
					}
					//DialogActivity.this.index 表示默认的选中项
				}).setSingleChoiceItems(DialogActivity.this.fruitData, DialogActivity.this.index, new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						DialogActivity.this.index = which;//保存我们已选中的项
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	private TextView mytext = null;
	private String fruitData[] = {"苹果","西瓜","水蜜桃"};
	private boolean flag[] = {false,false,false};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.mytext = (TextView) super.findViewById(R.id.mytext); 
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("请选择您喜欢的水果")
				.setIcon(R.drawable.logo)
				.setPositiveButton("确认",  new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						StringBuffer sb = new StringBuffer();//这也是一个字符串
						for (int i = 0; i < flag.length; i++) {
							if(flag[i]){
								sb.append(fruitData[i]+",");
							}
						}
						DialogActivity.this.mytext.setText("您喜欢的水果为:" + sb.toString());
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
					
					}
					//参数1为一个显示内容数组,参数2 位 一个 boolean数组,长度和参数1的数组长度相同,表示选中的为那些
				}).setMultiChoiceItems(DialogActivity.this.fruitData, flag, new DialogInterface.OnMultiChoiceClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which, boolean isChecked) {
						if(isChecked){
							flag[which] = true;
						}else{
							flag[which] = false;
						}
					}
				}).create();
				dialog.show();//显示对话框
			}
		});
	}
}

 ダイアログ ボックスによって実装される機能は比較的基本的なものであり、どのように変更されても、すべて AlertDialog.Bulider クラスを使用して作成されます。

 

ログインレイアウト: 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/loginlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户名:" />
        <EditText
            android:id="@+id/username"
            android:layout_width="200px"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密      码:" />
        <EditText
            android:id="@+id/password"
            android:layout_width="200px"
            android:layout_height="wrap_content"
            android:password="true" />
    </LinearLayout>
</LinearLayout>

ログインレイアウトが完成し、現在は主にActivityプログラムを書いています。

package com.example.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				//实例化LayoutInflater对象
				LayoutInflater flater = LayoutInflater.from(DialogActivity.this);
				//将布局转换成一个组件
				View view = flater.inflate(R.layout.login, null);
				Dialog dialog = new AlertDialog.Builder(DialogActivity.this)
				.setTitle("用户登陆")
				.setIcon(R.drawable.logo)
				.setPositiveButton("登陆", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
					}
				}).setNegativeButton("取消", new DialogInterface.OnClickListener(){
					@Override
					public void onClick(DialogInterface dialog, int which) {
						
					}
				}).setView(view)//将组件放入到对话框
				.create();
				dialog.show();
			}
		});
	}
}

日付ダイアログボックス:

 

package com.example.dialogproject;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				DatePickerDialog dialog = new DatePickerDialog(DialogActivity.this,new DatePickerDialog.OnDateSetListener() {
					@Override
					public void onDateSet(DatePicker view, int year, int monthOfYear,
							int dayOfMonth) {
						
					}
				},1988,11,12);
				dialog.updateDate(2008, 7, 8);//修改时间
				dialog.show();
			}
		});
	}
}

 時間ダイアログボックス:

 

package com.example.dialogproject;

import android.app.Activity;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TimePicker;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				TimePickerDialog dialog = new TimePickerDialog(DialogActivity.this,new TimePickerDialog.OnTimeSetListener() {
					@Override
					public void onTimeSet(TimePicker view, int hourOfDay,
							int minute) {
					}
				},18,20,true);
				dialog.show();
			}
		});
	}
}

 [続行] ダイアログ ボックス:

 

進行状況はスレッドを使用して制御されるようになりました。

package com.example.dialogproject;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				final Dialog dialog = ProgressDialog.show(DialogActivity.this, "搜索网络", "请耐心等待。。。");
				new Thread(){
					public void run(){
						try{
							Thread.sleep(3000);
						}catch(Exception e){
							e.printStackTrace();
						}finally{
							dialog.dismiss();
						}
					}
				}.start();
				dialog.show();
			}
		});
	}
}

上記のプログラムは、単純な操作を完了するだけです。これは最も厳密なメソッドではありません。シミュレーション用にいくつかの基本的なスレッドを実行するだけです。もちろん、静的なshow メソッドを使用することに加えて、ProgressDialog はコンストラクター メソッド (一般的に) を使用してインスタンス化することもできます。使用しません)。

package com.example.dialogproject;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				final ProgressDialog dialog = new ProgressDialog(DialogActivity.this);
				dialog.setTitle("搜索网络");
				dialog.setMessage("请耐心等待。。。");
				new Thread(){
					public void run(){
						try{
							Thread.sleep(3000);
						}catch(Exception e){
							e.printStackTrace();
						}finally{
							dialog.dismiss();
						}
					}
				}.start();
				dialog.show();
			}
		});
	}
}

デフォルトでは、円形の進行状況ですが、水平方向の進行状況を設定することもできます。

package com.example.dialogproject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class DialogActivity extends Activity {
	private Button but = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_dialog);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				final ProgressDialog dialog = new ProgressDialog(DialogActivity.this);
				dialog.setTitle("搜索网络");
				dialog.setMessage("请耐心等待。。。");
				dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置水平显示进度
				dialog.setMax(100);
				dialog.setProgress(30);
				dialog.setButton("后台处理", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						dialog.dismiss();
					}
				});
				dialog.setButton2("详细信息", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
					}
				});
				dialog.onStart();
				new Thread() {				// 线程对象
					public void run() {			// 线程主体方法
						for (int x = 0; x < 100; x++) {
							try {
								Thread.sleep(500);	// 休眠0.5秒
							} catch (InterruptedException e) {
								e.printStackTrace();
							}	// 进度条每次增长1
							dialog.incrementProgressBy(1);
						}
						dialog.dismiss();	// 关闭对话框
					}}.start();			// 线程启动

				dialog.show();
			}
		});
	}
}

1.3 概要

(1) ダイアログ ボックスは主にアクティビティ プログラムを通じて生成され、ユーザーに操作を促すために使用されます。

(2) ダイアログ ボックスは、通常のダイアログ ボックス、日付ダイアログ ボックス、時刻ダイアログ ボックス、進行状況ダイアログ ボックスに分類できます。

(3) ダイアログ ボックスの表示コンポーネントはレイアウト ファイルを使用して構成することもできますが、変換は LayoutInflater クラスを通じて完了する必要があります。

おすすめ

転載: blog.csdn.net/weixin_41830242/article/details/131390198