在应用中,各种各样的界面层出不穷,对话框的样式也不再是之前的那样简单,自定义dialog,里面的布局可以像activity那样,可以再layout布局中的定义,方便。
源代码:
package com.enterise.comic.manyu.dialog;
import com.enterise.comic.manyu.activity.R;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
public abstract class UpdateVersionDialog extends Dialog implements android.view.View.OnClickListener{
private ImageView btnAfter,btnNow;
public UpdateVersionDialog(Context context) {
super(context, R.style.dialog);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog_update_version);
initViews();
}
private void initViews() {
btnAfter = (ImageView)this.findViewById(R.id.say_after);
btnNow = (ImageView)this.findViewById(R.id.say_now);
btnAfter.setOnClickListener(this);
btnNow.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.equals(btnAfter)) {
doAfter();
}
if(v.equals(btnNow)) {
doNow();
}
}
public abstract void doAfter();
public abstract void doNow();
}
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="285dp"
android:layout_height="192dp"
android:layout_gravity="center"
android:gravity="center_horizontal"
android:orientation="vertical"
android:background="@drawable/version_back">
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
>
<ImageView
android:layout_height="35dp"
android:layout_width="65dp"
android:id="@+id/say_after"
android:layout_marginBottom="20dp"
android:src="@drawable/btn_no"
/>
<ImageView
android:layout_height="35dp"
android:layout_width="65dp"
android:layout_marginLeft="60dp"
android:layout_marginBottom="20dp"
android:id="@+id/say_now"
android:src="@drawable/btn_yes"
/>
</LinearLayout>
</RelativeLayout>
这个自定义的dialog是一个抽象类,里面有连个button,可以再实现的时候在具体类中进行操作,比较方便。
在pad中有时候dialog的显示位置并不是我们想要的,所以就想要改变dialog的显示位置。
private void setDialogSize(Dialog dg) { Window dialogWindow = dg.getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); dialogWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP); //显示的坐标 lp.x = 150; lp.y = 50; int width = getResources().getDimensionPixelOffset(R.dimen.d_width); int height = getResources().getDimensionPixelOffset(R.dimen.d_height); //dialog的大小 lp.width = width; lp.height = height; dialogWindow.setAttributes(lp); }}