在Manifest.xml中指定该窗口以对话框风格显示!简单的使用Activity来显示界面布局!
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Material.Dialog">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
创建步骤:
1:调用PopupWindow的构造器创建PopupWindow对象
2:调用PopupWindow的showAsDropDown()将PopupWindow作为v组件的下拉组件显示处出来,或调用PopupWindow的showAtLocation()将PopupWindow在指定的位置显示出来
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<Button android:id="@+id/bn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="弹出Popup窗口"
/>
LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<ImageView
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="85dp"
android:src="@drawable/java"
/>
<Button
android:id="@+id/close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭"
/>
LinearLayout>
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 装载R.layout.popup对应的界面布局
View root = this.getLayoutInflater().inflate(R.layout.popup, null);
// 创建PopupWindow对象
final PopupWindow popup = new PopupWindow(root, 560, 720);
Button button = (Button) findViewById(R.id.bn);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 以下拉方式显示
// popup.showAsDropDown(v);
//将PopupWindow显示在指定位置
popup.showAtLocation(findViewById(R.id.bn),
Gravity.CENTER, 20,20);
}
});
// 获取PopupWindow中的“关闭”按钮
root.findViewById(R.id.close).setOnClickListener(
new View.OnClickListener()
{
public void onClick(View v)
{
// 关闭PopupWindow
popup.dismiss(); // ①
}
});
}
}
1:通过new关键字创建DatePickerDialog,TimePickerDialog实例,调用它的show()方法显示出来
2:为其绑定监听器。
Acitivity代码:
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button dateBn = (Button)findViewById(R.id.dateBn);
Button timeBn = (Button)findViewById(R.id.timeBn);
//为“设置日期”按钮绑定监听器
dateBn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
Calendar c = Calendar.getInstance();
// 直接创建一个DatePickerDialog对话框实例,并将它显示出来
new DatePickerDialog(MainActivity.this,
// 绑定监听器
new DatePickerDialog.OnDateSetListener()
{
@Override
public void onDateSet(DatePicker dp, int year,
int month, int dayOfMonth)
{
EditText show = (EditText) findViewById(R.id.show);
show.setText("您选择了:" + year + "年" + (month + 1)
+ "月" + dayOfMonth + "日");
}
}
//设置初始日期
, c.get(Calendar.YEAR)
, c.get(Calendar.MONTH)
, c.get(Calendar.DAY_OF_MONTH)).show();
}
});
//为“设置时间”按钮绑定监听器
timeBn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View source)
{
Calendar c = Calendar.getInstance();
// 创建一个TimePickerDialog实例,并把它显示出来
new TimePickerDialog(MainActivity.this,
// 绑定监听器
new TimePickerDialog.OnTimeSetListener()
{
@Override
public void onTimeSet(TimePicker tp, int hourOfDay,
int minute)
{
EditText show = (EditText) findViewById(R.id.show);
show.setText("您选择了:" + hourOfDay + "时"
+ minute + "分");
}
}
//设置初始时间
, c.get(Calendar.HOUR_OF_DAY)
, c.get(Calendar.MINUTE)
//true表示采用24小时制
, true).show();
}
});
}
}
1:创建Progress的实例,调用show();
2:创建ProgressDialog实例,然后调用方法对对话框进度条进行设置,设置完成后使其显示
Activity代码:
public class MainActivity extends Activity
{
final static int MAX_PROGRESS = 100;
// 该程序模拟填充长度为100的数组
private int[] data = new int[50];
// 记录进度对话框的完成百分比
int progressStatus = 0;
int hasData = 0;
ProgressDialog pd1,pd2;
// 定义一个负责更新的进度的Handler
Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// 表明消息是由该程序发送的
if (msg.what == 0x123)
{
pd2.setProgress(progressStatus);
}
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void showSpinner(View source)
{
// 调用静态方法显示环形进度条
ProgressDialog.show(this, "任务执行中"
, "任务执行中,请等待", false, true); // ①
}
public void showIndeterminate(View source)
{
pd1 = new ProgressDialog(MainActivity.this);
// 设置对话框的标题
pd1.setTitle("任务正在执行中");
// 设置对话框显示的内容
pd1.setMessage("任务正在执行中,敬请等待...");
// 设置对话框能用“取消”按钮关闭
pd1.setCancelable(true);
// 设置对话框的进度条风格
pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置对话框的进度条是否显示进度
pd1.setIndeterminate(true);
pd1.show(); // ②
}
public void showProgress(View source)
{
// 将进度条的完成进度重设为0
progressStatus = 0;
// 重新开始填充数组
hasData = 0;
pd2 = new ProgressDialog(MainActivity.this);
pd2.setMax(MAX_PROGRESS);
// 设置对话框的标题
pd2.setTitle("任务完成百分比");
// 设置对话框显示的内容
pd2.setMessage("耗时任务的完成百分比");
// 设置对话框不能用“取消”按钮关闭
pd2.setCancelable(false);
// 设置对话框的进度条风格
pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置对话框的进度条是否显示进度
pd2.setIndeterminate(false);
pd2.show(); // ③
new Thread()
{
public void run()
{
while (progressStatus < MAX_PROGRESS)
{
// 获取耗时操作的完成百分比
progressStatus = MAX_PROGRESS
* doWork() / data.length;
// 发送空消息到Handler
handler.sendEmptyMessage(0x123);
}
// 如果任务已经完成
if (progressStatus >= MAX_PROGRESS)
{
// 关闭对话框
pd2.dismiss();
}
}
}.start();
}
// 模拟一个耗时的操作
public int doWork()
{
// 为数组元素赋值
data[hasData++] = (int) (Math.random() * 100);
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
return hasData;
}
}
如果大家有什么问题,请留言。