首先我们看一下新浪微博的效果(其它就是一个dialog):
点击title前 点击title后
实现方式:
首先我们要自定义一个dialog
代码如下:
/***
* 自定义dialog
*
* @author jia
*
*/
public class MyDialog extends Dialog {
private Window window = null;
/***
*
* @param context
* @param layoutResID
* 配置文件
* @param x
* 显示的x坐标
* @param y
* 显示的y坐标
* @param title
* 集合
*/
public MyDialog(final Context context, int layoutResID, int x, int y,
final String[] title) {
super(context, R.style.Transparent);
window = this.getWindow();
window.requestFeature(Window.FEATURE_NO_TITLE);
setContentView(layoutResID);
int width = this.getWindow().getWindowManager().getDefaultDisplay()
.getWidth();
windowDeploy(width / 2, 300, x, y);
show();
}
/***
* 设置窗口显示
*
* @param x
* @param y
* @param dialog_x
* @param dialog_y
*/
public void windowDeploy(int dialog_width, int dialog_height, int dialog_x,
int dialog_y) {
window.setBackgroundDrawableResource(android.R.color.transparent); // 设置对话框背景为透明
WindowManager.LayoutParams wl = window.getAttributes();
wl.width = dialog_width;
wl.height = dialog_height;
// wl.alpha = 0.8f;
wl.gravity = Gravity.LEFT | Gravity.TOP; // 不设置的话默认是居中
wl.x = dialog_x - dialog_width / 2; // 要显示的位置x坐标
wl.y = dialog_y;
window.setAttributes(wl);
window.setWindowAnimations(R.style.dialogWindowAnim); // 设置窗口弹出动画
setCanceledOnTouchOutside(true);
}
}
我们只需要在activity中调用即可:
代码片段:
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int x_begin = textView.getLeft();
int x_end = textView.getRight();
int y_begin = textView.getTop();
int y_end = textView.getBottom();// 这个是要显示位置的纵坐标
// 获取最中间的x坐标
int x = (x_begin + x_end) / 2;// 这个值也就是屏幕最中间的值,也可以下面这样
// int x=getWindowManager().getDefaultDisplay().getWidth()/2;
// int[] location = new int[2];
// textView.getLocationInWindow(location); // 获取在当前窗口内的绝对坐标
// textView.getLocationOnScreen(location);// 获取在整个屏幕内的绝对坐标
myDialog = new MyDialog(DialogDemoActivity.this,
R.layout.dialog, x, y_end, title);
View view = LayoutInflater.from(DialogDemoActivity.this)
.inflate(R.layout.dialog, null);
listView = (ListView) myDialog.getWindow().findViewById(
R.id.lv_dialog);
listView.setAdapter(new ArrayAdapter<String>(
DialogDemoActivity.this, R.layout.text, R.id.tv_text,
title));
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
textView.setText(title[arg2]);
myDialog.cancel();
myDialog = null;
}
});
}
});
实现效果如下:
点击前 点击后 选择 选择后
实现起来也不难,有点要说明一下,这里我们用到了.9.png图片,这个图片会自动根据需要伸展,(重要的是不失真,这点很棒吧,详细介绍请点击连接).