扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
第一步: 给Dialog设置一个风格主题: 无边框全透明背景
创新互联公司是一家集网站建设,伽师企业网站建设,伽师品牌网站建设,网站定制,伽师网站建设报价,网络营销,网络优化,伽师网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
在res-valus-styles.xml 下新建一个styles
style name="dialog" parent="android:style/Theme.Dialog"
!--背景颜色及和透明程度--
item name="android:windowBackground"@android:color/transparent/item
!--是否去除标题 --
item name="android:windowNoTitle"true/item
!--是否去除边框--
item name="android:windowFrame"@null/item
!--是否浮现在activity之上 --
item name="android:windowIsFloating"false/item
!--背景是否模糊--
item name="android:backgroundDimEnabled"false/item
/style
第二步:新建自定义view 类 继承Dialog,在构造方法中引用刚才写好的styles(粗体部分)
public class MyDialog extends Dialog {
public LoginRestltDialog(@NonNull Context context) {
//引用样式
super(context, R.style.dialog );
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//引入布局
setContentView(R.layout.dialog);
}
//定义其他需要的方法
}
第三步:创建布局
?xml version="1.0" encoding="utf-8"?
RelativeLayout xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#11ffffff"
LinearLayout
android:layout_width="260dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/dialog_share"
android:orientation="vertical"
TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="15dp"
android:gravity="center"
android:text="消息提示"
android:textColor="#38ADFF"
android:textSize="16sp" /
TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:text="提示消息" /
View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="15dp"
android:background="#E4E4E4" /
LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal"
Button
android:id="@+id/no"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:singleLine="true"
android:text="No"
android:textColor="#7D7D7D"
android:textSize="16sp" /
View
android:layout_width="1px"
android:layout_height="match_parent"
android:background="#E4E4E4" /
Button
android:id="@+id/yes"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:singleLine="true"
android:text="Yes"
android:textColor="#38ADFF"
android:textSize="16sp" /
/LinearLayout
/LinearLayout
/RelativeLayout
第四步:定义dialog的背景框
?xml version="1.0" encoding="utf-8"?
shape xmlns:android=""
solid android:color="#ffffff" /
stroke
android:width="0.8dp"
android:color="#ffffff" /
!-- 圆角 --
corners android:radius="8dp" /
/shape
最后在需要的地方调用即可
Dialog 的自定义布局的根布局的宽度是写固定的,显示的时候宽度和高度不是对应的固定值。
根布局外面又添加了一层 FrameLayout,设置其宽高均为 wrap_content 来包裹以前的布局。
这个时候猜测是否因为添加自定义视图的时候,布局参数被改写了,然后开始查看源码,最终发现确实是这样的。
在下面的源码分析中,最终发现也是用了 mWindow.setContentView(mAlertDialogLayout) 将 R.layout.alert_dialog.xml 的默认布局添加到 PhoneWindow, 和Activity一样的。
关键的地方看一下 setupCustomContent() 这个方法,在添加自定义视图的时候布局参数设置为 MATCH_PARENT 了,所以我们设置固定大小是没有作用的,要套一层父布局解决这个问题。
一、在themes.xml中添加自定义dialog的样式
二、创建dialog基类
三、创建自定义dialog的布局
四、创建自定义dialog
五、在activity中使用自定义dialog
Android 中自定义Dialog的样式,主要是通过自定义的xml,然后加载到dialog的背景中,如下步骤:
1、自定义Dialog
final Dialog dialog = new Dialog(this, R.style.Theme_dialog);
2、窗口布局
View contentView = LayoutInflater.from(this).inflate(R.layout.select_list_dialog,null);
3、把设定好的窗口布局放到dialog中
dialog.setContentView(contentView);
4、设定点击窗口空白处取消会话
dialog.setCanceledOnTouchOutside(true);
5、具体的操作
ListView msgView = (ListView)contentView.findViewById(R.id.listview_flow_list);
6、展示窗口
dialog.show();
例:
final Dialog dialog = new Dialog(this,R.style.Theme_dialog);
View contentView =LayoutInflater.from(this).inflate(R.layout.select_list_dialog, null);
dialog.setContentView(contentView);
dialog.setCanceledOnTouchOutside(true);
ListView msgView = (ListView)contentView.findViewById(R.id.listview_flow_list);
TextView titleText = (TextView)contentView.findViewById(R.id.title);
titleText.setText("请选择银行卡");
SelectBankCardDialogAdapter adapter =new SelectBankCardDialogAdapter(this, mBankcardList);
msgView.setAdapter(adapter);
msgView.setOnItemClickListener(newOnItemClickListener() {
@Override
public void onItemClick(AdapterViewparent, View view, int position, long id) {
//Toast.makeText(RechargeFlowToMobileActivity.this,
// position+"",0).show();
mSelectCard =mBankcardList.get(position);
String area = mSelectCard.getBank_card();
mCardNumberText.setText(area);
dialog.dismiss();
}
});
Button closeBtn = (Button)contentView.findViewById(R.id.close);
closeBtn.setClickable(true);
closeBtn.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
以上就是在Android开发自定义dialog样式的方法和步骤,android很多的控件都提供了接口或者方法进行样式的定义和修改。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流