UI view
about the radius dialog visit
here.
here is my code.
public void handleCloseTable(View anchor) {
PaymentCloseDialog dialog = new PaymentCloseDialog(mActivity);
dialog.setAnchorView(anchor);
dialog.show();
}
the basic dialog
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/_348dp"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="@dimen/_336dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/bg_dialog_white_all_radius"
android:orientation="vertical">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="@dimen/_51dp"
android:background="@drawable/bg_textview_radius_black"
android:gravity="center"
android:paddingLeft="@dimen/_5dp"
android:text="Title"
android:textColor="#FFF6F6"
android:textSize="@dimen/_24sp" />
<LinearLayout
android:id="@+id/layContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical">
<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/_4dp"
android:gravity="center_vertical"
android:maxLines="3"
android:paddingLeft="@dimen/_5dp"
android:paddingTop="@dimen/_6dp"
android:text="Are you sure?"
android:textSize="@dimen/_18sp"/>
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/_51dp"
android:orientation="horizontal">
<Button
android:id="@+id/btnCancel"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_below="@+id/tvTitle"
android:layout_marginRight="@dimen/_2dp"
style="@style/buttonGreyLeftRadius"
android:text="NO" />
<Button
android:id="@+id/btnConfirm"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/btnCancel"
style="@style/buttonBlueRightRadius"
android:text="YES" />
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/ivPoint"
android:layout_width="@dimen/_13dp"
android:layout_height="@dimen/_20dp"
android:layout_marginTop="@dimen/_51dp"
android:src="@drawable/dialogpoint" />
</RelativeLayout>
drawable files
Abs Dialog code
package com.jack.lib.dialog;
import android.content.Context;
import android.content.res.Resources;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import com.jack.lib.R;
/**
* 此类为付款页面所有带有箭头效果窗口的父类,其中子Dialog的布局文件必须基于 R.layout.dialog_payment_abs
* <p/>
* http://www.cnblogs.com/angeldevil/archive/2012/03/31/2426242.html
* https://developer.android.com/reference/android/view/View.html#Position
*/
public class PaymentAbsDialog extends MessageConfirmAbsDialog {
protected Context context;
public Resources resources;
private ImageView ivPoint;
private View mView; //锚点
public PaymentAbsDialog(Context context, int resId) {
super(context, R.layout.dialog_payment_close);
this.context = context;
resources = context.getResources();
ivPoint = $(R.id.ivPoint);
}
public void setAnchorView(View mView) {
this.mView = mView;
}
/*
* lp.x与lp.y表示相对于原始位置的偏移.
* 当参数值包含Gravity.LEFT时,对话框出现在左边,所以lp.x就表示相对左边的偏移,负值忽略.
* 当参数值包含Gravity.RIGHT时,对话框出现在右边,所以lp.x就表示相对右边的偏移,负值忽略.
* 当参数值包含Gravity.TOP时,对话框出现在上边,所以lp.y就表示相对上边的偏移,负值忽略.
* 当参数值包含Gravity.BOTTOM时,对话框出现在下边,所以lp.y就表示相对下边的偏移,负值忽略.
*/
@Override
public void show() {
int[] scPosition = new int[2];
mView.getLocationOnScreen(scPosition);
Window dialogWindow = getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);
lp.x = mView.getWidth() + 4;
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) ivPoint.getLayoutParams();
ViewGroup.LayoutParams pa = ivPoint.getLayoutParams();
double height = scPosition[1] + ((double) mView.getMeasuredHeight()) / 2 - (params.topMargin + pa.width / 2);
lp.y = (int) height; // 新位置Y坐标
lp.dimAmount = 0.1f; //设置弹出后Activity背景透明度
dialogWindow.setAttributes(lp);
super.show();
}
}
docs address
i'm fish. i'm on.