常用对话框
来源:互联网 发布:mac版网络游戏 编辑:程序博客网 时间:2024/06/05 03:31
开发中常用的各种自定义控件(一)自定义样式对话框
暂时分三种:
1)固定对话框标题栏与下部两个按钮,自定义内容区域
2)固定对话框标题栏,自定义内容区域与按钮区域
3)完全自定义对话框UI
因为是常用,所以只放通用的前两种,下面举个例子:
暂时分三种:
1)固定对话框标题栏与下部两个按钮,自定义内容区域
2)固定对话框标题栏,自定义内容区域与按钮区域
3)完全自定义对话框UI
因为是常用,所以只放通用的前两种,下面举个例子:
a)自定义的工具:
public abstract class DialogBaseViewHolder {public View itemView;public DialogBaseViewHolder() {}public DialogBaseViewHolder(View itemView) {this.itemView = itemView;}}
public class CustomDialogUtils {
public interface OnCustomDialogListener {void onClickCancel(String type);void onClickConfrim(String type);}public static final String TYPE_CUSTOM_CLQDJL = "TYPE_CUSTOM_CLQDJL";public static final String TYPE_CUSTOM_CLQDJL_EDIT = "TYPE_CUSTOM_CLQDJL_EDIT";private OnCustomDialogListener listener;private LayoutInflater layoutInflater;private Context context;private Dialog dialog;private View view;private String type;public CustomDialogUtils(Context context, OnCustomDialogListener listener) {this.context = context;this.listener = listener;this.layoutInflater = LayoutInflater.from(context);}public void setType(String type) {this.type = type;}/** * 获取自定义View对话框 */public void initCustonViewDialog(String title,DialogBaseViewHolder viewHolder) {dialog = new Dialog(context, R.style.CustomDialogStyle);view = layoutInflater.inflate(R.layout.dialog_item_layout_custom, null);initTitleAndButton(title);LinearLayout layout = (LinearLayout) view.findViewById(R.id.dialog_custom_view_layout);layout.addView(viewHolder.itemView);dialog.setContentView(view);}/** 获取自定义button对话框 */public void initCustomViewAndButtonDialog(String title,DialogBaseViewHolder viewHolder) {initCustonViewDialog(title, viewHolder);LinearLayout dialog_button_view = (LinearLayout) view.findViewById(R.id.dialog_button_view);dialog_button_view.setVisibility(View.GONE);}private void initTitleAndButton(String title) {TextView item_name = (TextView) view.findViewById(R.id.item_name);item_name.setText(title);/** 按钮 */Button cancel = (Button) view.findViewById(R.id.item_cancel);Button confrim = (Button) view.findViewById(R.id.item_confrim);cancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (listener != null) {listener.onClickCancel(type);}}});confrim.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (listener != null) {listener.onClickConfrim(type);}}});}public void show() {dialog.show();Window dialogWindow = dialog.getWindow();WindowManager.LayoutParams lp = dialogWindow.getAttributes();DisplayMetrics d = context.getResources().getDisplayMetrics(); // 获取屏幕宽、高用lp.width = (int) (d.widthPixels * 0.85); // 宽度设置为屏幕的0.8dialogWindow.setAttributes(lp);}public void dissmiss() {dialog.dismiss();}}
b)注意样式的问题:
<style name="CustomDialogStyle" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> <item name="android:background">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:backgroundDimAmount">0.6</item> </style>
c)固定的layout文件:
1)主布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/item_root_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/dialog_item_title" android:layout_width="match_parent" android:layout_height="50dp" /> <LinearLayout android:id="@+id/dialog_custom_view_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" /> <include android:id="@+id/dialog_button_view" layout="@layout/dialog_item_button" android:layout_width="match_parent" android:layout_height="50dp" /></LinearLayout>2)标题栏布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/item_layout" android:layout_width="match_parent" android:layout_height="80px" android:layout_alignParentTop="true" android:background="#ffff0000" android:gravity="center_vertical|center_horizontal" android:orientation="vertical"> <TextView android:id="@+id/item_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:textColor="@color/white" android:textSize="16sp" /></LinearLayout>3)按钮布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="80px" android:background="#f1f1f1" android:orientation="horizontal"> <Button android:id="@+id/item_cancel" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@color/transparent" android:gravity="center" android:text="取消" android:textColor="#666666" android:textSize="16sp" /> <ImageView android:layout_width="1px" android:layout_height="match_parent" android:background="#999999" /> <Button android:id="@+id/item_confrim" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@color/transparent" android:gravity="center" android:text="确定" android:textColor="#666666" android:textSize="16sp" /></LinearLayout>
d)实现自定义ViewHolder,继承工具中的DialogBaseViewHoldler:
重点()
super(view);
public class CustomDialogActivity extends AdaptiveActivity {private CustomDialogUtils utils;private TestDialogHolder dialogHolder;private static final String TYPE_01 = "TYPE_01";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_custom_dialog);}public void showDialog(View v) {utils = new CustomDialogUtils(this, new OnCustomDialogListener() {@Overridepublic void onClickConfrim(String type) {utils.dissmiss();switch (type) {case TYPE_01:break;}}@Overridepublic void onClickCancel(String type) {utils.dissmiss();switch (type) {case TYPE_01:break;}}});dialogHolder = new TestDialogHolder(LayoutInflater.from(this).inflate(R.layout.dialog_item_custom_01, null));dialogHolder.textView.setText("1234567654321234567");utils.initCustonViewDialog("测试对话框", dialogHolder);/** 区分不同对话框的flag,对应的操作返回分发 */utils.setType(TYPE_01);utils.show();}class TestDialogHolder extends DialogBaseViewHolder {public TextView textView;public TestDialogHolder(View view) {super(view);textView = (TextView) view.findViewById(R.id.text);}}}
实现自定义区域的layout:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" /></LinearLayout>
阅读全文
0 0
- 常用对话框、自定义对话框
- 常用对话框:消息对话框
- 常用对话框:文件对话框
- 常用对话框:字体对话框
- 常用对话框:颜色对话框
- 常用对话框
- 常用对话框
- 常用对话框
- 常用对话框
- MFC-对话框常用函数
- C# 常用对话框有
- 对话框和常用控件
- SWT常用系统对话框
- Symbian常用对话框
- 对话框和常用控件
- 对话框常用方法
- C#常用对话框
- 对话框及常用控件
- 【面试题】设计模式相关
- C#中String s1 = null;String s2 = “” 的区别
- 信息安全快讯2017年8月第1期
- TypeAdapter介绍[L]
- -[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object' 解决方法
- 常用对话框
- Spring与Struts
- CodeForces
- 一个很好用的圆形头像控件.
- Spring常见面试题
- OkHttp:Java 平台上的新一代 HTTP 客户端
- php内存泄露,系统缓存消耗?
- 游戏服务器开发都要学什么
- php 一个字符串中插入另外一个字符串的函数