http://blog.csdn.net/jj120522/article/details/7764183
首先我們看一下新浪微網誌的效果(其它就是一個dialog):

點選title前 點選title後
實作方式:
首先我們要自定義一個dialog
代碼如下:
[java] view
plaincopy
/***
* 自定義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 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圖檔,這個圖檔會自動根據需要伸展,(重要的是不失真,這點很棒吧,詳細介紹請點選連接配接).
源碼下載下傳