android fragment 设置透明,DialogFragment背景透明设置
一 、背景
使用自定义DialogFragment实现弹窗效果时,边缘透明图片作为背景图片,依然存在不透明背景;
QQ截图20180428154111.png
修复后:
QQ截图20180428153910.png
二、实现
因为项目中多个地方使用到DialogFragment,所以稍作了一下封装:
import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* Created by Ljt on 2018/4/27
*/
public abstract class BaseDislogFragment extends DialogFragment {
private boolean isShow = false;
private Unbinder unbinder;
public boolean isShow() {
return isShow;
}
public void setShow(boolean show) {
isShow = show;
}
/**
* 显示弹窗信息
* @param savedInstanceState
* @param builder
*/
protected abstract void displayDialog(Bundle savedInstanceState, AlertDialog.Builder builder);
/**
* 设置布局文件
* @return
*/
protected abstract int getLayoutId();
protected abstract boolean isCanceledOnTouchOutside();
protected abstract boolean isTransparent();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View rootView = super.onCreateView(inflater, container, savedInstanceState);
return rootView;
}
@Override
public void onStart() {
super.onStart();
if (isTransparent()) {
//设置背景半透明
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
getDialog().getWindow().setLayout(dm.widthPixels, getDialog().getWindow().getAttributes().height);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
//getDialog().setCancelable(false);//这个会屏蔽掉返回键
getDialog().setCanceledOnTouchOutside(isCanceledOnTouchOutside());
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View view = inflater.inflate(getLayoutId(), null);
unbinder = ButterKnife.bind(this, view);
builder.setView(view);
displayDialog(savedInstanceState,builder);
return builder.create();
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
public void dismissDialog() {
if (isShow) {
this.dismiss();
}
}
}
所以事实上,这里最终使用的还是使用onCreateDialog()方法返回AlertDialog来呈现自定义布局弹窗;
主要的实现背景透明效果,使用如下代码:
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
getDialog().getWindow().setLayout(dm.widthPixels, getDialog().getWindow().getAttributes().height);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
BaseDialogFragment的子类使用起来就只关注与具体差异的实现就好了:
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
//这里删除了部分带有APP报名路径的类的导入
import butterknife.BindView;
/**
* Created by Ljt on 2018/4/26
*/
public class RewardDialogFragment extends BaseDislogFragment {
@BindView(R.id.img_reward_bg)
ImageView imgRewardBg;
@BindView(R.id.tv_reward_sum)
TextView tvRewardSum;
@BindView(R.id.tv_reward_receive)
TextView tvRewardReceive;
@BindView(R.id.rl_reward_content)
RelativeLayout rlRewardContent;
@BindView(R.id.img_reward_close)
ImageView imgRewardClose;
private Callback callback;
public interface Callback {
void onClose();
void onReceive();
}
public void setCallback(Callback pCallBack){
this.callback = pCallBack;
}
public void show(FragmentManager fragmentManager) {
if (this.isAdded())return;
show(fragmentManager, "RewardDialogFragment");
setShow(false);
Settings.setFirstReward(false);
}
@Override
protected void displayDialog(Bundle savedInstanceState, android.support.v7.app.AlertDialog.Builder builder) {
imgRewardClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (callback != null)callback.onClose();
dismiss();
}
});
tvRewardReceive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (callback != null)callback.onReceive();
dismiss();
}
});
}
@Override
protected int getLayoutId() {
return R.layout.fragment_dialog_reward;
}
@Override
protected boolean isCanceledOnTouchOutside() {
return false;
}
@Override
protected boolean isTransparent() {
return true;
}
@Override
public void onDestroy() {
super.onDestroy();
callback = null;
}
}
!!!请确认当中的AlertDialog使用android.support.v7.app.AlertDialog下的;否则在Android 5.0以下版本,依然是不透明。
android fragment 设置透明,DialogFragment背景透明设置相关推荐
- android如何设置透明字体颜色,android TextView文字透明度跟背景透明度设置
当前位置: 我的异常网 » Android » android TextView文字透明度跟背景透明度设置 android TextView文字透明度跟背景透明度设置 www.myexceptions ...
- Thress.js设置背景色及背景透明
Thress.js默认背景 Thress.js默认背景色为黑色 设置Thress.js背景颜色 场景 想要自行定义Thress.js模型的背景颜色 实现 this.renderer = new THR ...
- html控件透明与背景透明
html控件透明与背景透明 如何实现一个控件的半透明效果? IE中关于半透明和透明控件的一些说明 .大家在有些时候希望自己做的控件是半透明或透明的,就像半透明的窗体一样,我经过一段时间的查询,发现这个 ...
- 【最全IDEA个性化教程】idea设置主题+恢复主题默认设置+设置选中代码颜色+关键字颜色+设置字体大小、样式、颜色+设置背景颜色、图片+设置导航栏背景颜色+设置控制台字体样式及背景+常用快捷键)
目录 下载设置主题样式+恢复主题默认设置 1 个性化代码段 1.1设置颜色 设置光标颜色 自定义图片做背景 修改代码段的颜色和背景颜色 选中代码块颜色修改,修改括号颜色 1.2 设置字体大小.格式 1 ...
- Android设置窗体Activity背景透明
为什么80%的码农都做不了架构师?>>> 背景透明 style.xml <item name="android:windowBackground"&g ...
- Axure 教程 | 设置文本框背景透明
在AXURE软件中,部件样式可以编辑,但有时却无法满足所有个性化原型的需求.例如文本框部件,可以设置是否隐藏边框,但即使隐藏边框之后,文本框还会有白色的背景. 当界面需要一个无背景色的输入框时,对于完 ...
- android textview背景透明度,Android TextView文字透明度和背景透明度设置
textview1.setTextColor(Color.argb(255, 0, 255, 0)); //文字透明度 控件设为半透明: 控件名.getBackground().setAlpha(in ...
- Android手写签名 附带背景图设置
android手写签名的demo网上其实有很多,但是大多没考虑到签名用在哪里的问题,所以就需要背景图设置,保存电子签名的时候 会连同背景图一起保存 这才达到了电子签名的效果,背景可以放置合同,请 ...
- 怎么给HTML文件加背景,设置文件夹背景,如何设置文件夹背景颜色
电脑桌面的背景是可以进行自定义设置的,那么大家知道,电脑文件夹的背景也是可以进行设置和更换的吗?很多人的文件都是有背景的,这样看起来会非常的有个性,不会闲得很单调. 电脑的文件夹背景可以设置一些自己喜 ...
- C++ MFC深入详解之----设置控件背景透明
首先要添加OnCtlColor函数 1.该函数在VC++中的添加方法为:快捷键Ctrl+W或右击空白处打开ClassWizard对话框(也可以菜单->view->ClassWizard), ...
最新文章
- Linux下代码运行不了?看这里设置环境变量
- Horticulture Research 模式图的手稿
- 蒙特卡洛积分与重要性采样详解
- 销售单据条件价格明细表
- read web.config
- C++ __gnu_pbds(hash,可并堆,平衡树)
- easyui树形菜单实现
- sap 供应商表_财务人员学习SAP的路线图
- LeetCode 2032. 至少在两个数组中出现的值(哈希/位运算)
- 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图
- UVa11988-破损的键盘 Broken Keyboard
- Oracle系列:(22)视图
- 禁用Windows 10系统更新
- Shopee Games 游戏引擎演进之路
- wordpress单独html页面,wordpress独立留言板页面
- 什么是模式、什么是模式识别、模式识别的方法、过程
- Qt示例程序打开失败,出现一个感叹号图标
- 片上总线学习之Wishbone
- 已解决NameError: name ‘XXX‘ is not defined
- openni2结构简介