咋说呢,之前用Dialog里边包一个RecyclerView 然后根据内容设置高度,后来怎么也不行,最后根据list的size数加了几个判断,不了了之
后来终于发现原来是 他娘的布局里边设置background=src 这张图完全把整个布局撑起来了............
于是乎试了一下这个DialogFragment发现这个可以,比较灵活.
public class MyDialogFragment extends DialogFragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.mydialog_fragment, null);
List<String> list = new ArrayList<>();
list.add("我可能很少------------------------------------早法发顺丰大法师法师法师法师");
list.add("我可能很少------我可能很少--------------我可能很少-----早法发顺丰大法师法师法师法师");
list.add("我可能很少------------我可能很少-----------我可能很少---早法发顺丰大法师法师法师法师");
list.add("我可能很少----------------我可能很少-----我可能很少---早法发顺丰大法师法师法师法师");
LinearLayout root = inflate.findViewById(R.id.root);
DevShape.getInstance(DevShape.RECTANGLE)
.radius(10)
.line(1, R.color.colorAccent)
.into(root);
RecyclerView recyclerView = inflate.findViewById(R.id.recycler);
MyAdapter myAdapter = new MyAdapter(R.layout.item_recycler_dialogfrag, list);
recyclerView.setAdapter(myAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
return inflate;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
super.onActivityCreated(savedInstanceState);
//① 设置对话框内的内容为透明
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//② . 将对话框外的内容设置为透明
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window != null ? window.getAttributes() : null;
windowParams.dimAmount = 0.0f;
window.setAttributes(windowParams);
}
@Override
public void onResume() {
super.onResume();
//动态设置宽高
getDialog().getWindow().setLayout(ScreenUtils.getScreenWidth()*5/6, ViewGroup.LayoutParams.WRAP_CONTENT);
}
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
return super.onCreateAnimation(transit, enter, nextAnim);
}
}
设置背景色:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
super.onActivityCreated(savedInstanceState);
getDialog().setCanceledOnTouchOutside(false);
//① 设置对话框内的内容为透明
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//② . 将对话框外的内容设置为透明
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window != null ? window.getAttributes() : null;
windowParams.dimAmount = 0.0f;
window.setAttributes(windowParams);
}
如果有阴影可以考虑设置内部透明,自己加边框
使用:
MyDialogFragment myDialogFragment = new MyDialogFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
myDialogFragment.show(ft,"ft");
设置点击隐藏
myAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
getDialog().dismiss();
}
});
然而我在项目里
需求:阴影背景/内容圆角
需要不设置外边内容, 内部内容
//① 设置对话框内的内容为透明
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//② . 将对话框外的内容设置为透明
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window != null ? window.getAttributes() : null;
windowParams.dimAmount = 0.0f;
window.setAttributes(windowParams);
动画可以自定义
也可以在使用的时候添加
ft.setCustomAnimations(, )
基本上够用了