2023年7月15日发(作者:)
android中⾃定义对话框,Android中⾃定义对话框(Dialog)的实例代码1.修改系统默认的Dialog样式(风格、主题)2.⾃定义Dialog布局⽂件3.可以⾃⼰封装⼀个类,继承⾃Dialog或者直接使⽤Dialog类来实现,为了⽅便以后重复使⽤,建议⾃⼰封装⼀个Dialog类第⼀步:我们知道Android定义个控件或View的样式都是通过定义其style来实现的,查看Android框架中的主题⽂件,在源码中的路径:/frameworks/base/core/res/res/values/,我们可以看到,Android为Dialog定义了⼀个样式,@null@android:style/DialogWindowTitle@android:drawable/panel_backgroundtrue@null@android:style/stateUnspecified|adjustPan我们可以看到,在中定义的Dialog的样式,其中,定义了window的标题样式,window的背景图,是否悬浮等等。那么,我们要创建具有⾃定义样式的Dialog就可以创建⼀个,在其中定义我们⾃⼰的Dialog样式,让其继承⾃样式,并修改其中的某些属性即可。定义我们⾃⼰的Dialog样式:a.创建⼀个⽂件,放在res/values ⽂件夹下(当然了,这就不⽤说了。。。啰嗦⼀下)b.在中定义Dialog样式,代码如下:@android:color/transparenttrue上⾯代码中,定义了⼀个样式Theme_dialog,继承⾃@android:style/,然后定义了Dialog所在Window的背景图,此处使⽤的是透明颜⾊#00000000,然后定义了Dialog所在的Window隐藏标题(系统定义Dialog样式是带有标题的,在此设置此属性为true可隐藏标题),⾃定义Dialog样式到这就完成了。第⼆步:定义Dialog的布局:创建⼀个布局⽂件layout_,代码如下:xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/pp_bg_dialog"android:gravity="center">android:layout_height="wrap_content"style="@style/progressbar_normal"/>style="@style/text_white_small" android:layout_marginTop="5dp"android:text="正在删除..." android:id="@+id/message"/>这⾥使⽤了⼀个垂直⽅向的线性布局,并且设置所有⼦元素居中,⼦元素为已个进度条ProgressBar和⼀个TextView。此处,ProgressBar采⽤⾃定义样式,使⽤系统默认的ProgressBar可达到同样的效果(⼤同⼩异)。LinearLayout的背景android:background="@drawable/pp_bg_dialog"(即上⾯效果图中居中显⽰的⿊⾊透明背景框)是⼀个⾃定义的图⽚资源Shape:xmlns:android="/apk/res/android"android:shape="rectangle">代码中定义了⼀个矩形,并设置了圆⾓和颜⾊。到此,Dialog的布局就完成了。第三步:⾃定义CustomDialog类,继承⾃Dialog,代码如下:public class CustomDialog extends Dialog { 2private static int default_width = 160; //默认宽度private static int default_height = 120;//默认⾼度public CustomDialog(Context context, int layout, int style) {this(context, default_width, default_height, layout, style);}public CustomDialog(Context context, int width, int height, int layout, int style) {super(context, style);12//set contentsetContentView(layout);//set window paramsWindow window = getWindow();Params params = ributes();//set width,height by density and gravityfloat density = getDensity(context); = (int) (width*density); = (int) (height*density);y = ;ributes(params);}private float getDensity(Context context) {Resources resources = ources();DisplayMetrics dm = playMetrics();return y;}}在构造⽅法中设置了Dialog的contentView,并且设置了Window的宽度、⾼度和居中显⽰。CustomDialog使⽤⽅法如下:public class CustomDialogDemoActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {te(savedInstanceState);setContentView();CustomDialog dialog1 = new CustomDialog(this, _dialog, _dialog);//Dialog使⽤默认⼤⼩(160)CustomDialog dialog2 = new CustomDialog(this, 180, 180, _dialog, _dialog);();//显⽰Dialog//如果要修改Dialog中的某个View,⽐如把"正在删除..."改为"加载中..."TextView mMessage = (TextView) ewById(e);t("加载中...");}}⼤体过程就是这样,根据以上⼤家可以⾃由发挥吧,希望都设计出⾃⼰满意的dialog。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689428417a246586.html
评论列表(0条)