不居中問題
默認DialogFragment是展示在屏幕中間,并且周圍有邊距,而需求是貼近底部展示,并且距離左右下屏幕邊界0距離
解決方法
1.設置樣式
- 在onCreate中設置樣式
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogFragmentStyle);
- 自定義style修改彈框背景
<style name="DialogFragmentStyle" parent="@android:style/Theme.Dialog">
<item name="android:backgroundDimEnabled">true</item><!--activity變暗-->
</style>
2.修改邊界
- 在onCreateView增加修改邊界代碼
// 設置寬度為屏寬、靠近屏幕底部。
final Window window = getDialog().getWindow();
window.setBackgroundDrawableResource(R.color.transparent);
window.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.BOTTOM;
wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setAttributes(wlp);
全部代碼如下
package com.hugboga.custom.fragment;
import android.arch.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import com.hugboga.custom.R;
import com.hugboga.custom.activity.viewmodel.AssignerGuideViewModel;
import com.hugboga.custom.widget.CharterFirstCountView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
/**
* 選擇出行人數
* Created by HONGBO on 2018/6/11 20:26.
*/
public class AssignerGuidePeopleDialog extends AppCompatDialogFragment {
public static final String TAG = AssignerGuidePeopleDialog.class.getSimpleName();
Unbinder unbind; //在fragment中使用需要解綁定
@BindView(R.id.assigner_count_view)
CharterFirstCountView countLayout;
AssignerGuideViewModel viewModel;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = ViewModelProviders.of(getActivity()).get(AssignerGuideViewModel.class);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogFragmentStyle);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.assigner_guide_people_diaog_layout, container, false);
unbind = ButterKnife.bind(this, view);
// 設置寬度為屏寬、靠近屏幕底部。
final Window window = getDialog().getWindow();
window.setBackgroundDrawableResource(R.color.transparent);
window.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.BOTTOM;
wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setAttributes(wlp);
countLayout.setCountViewEnabled(true);
countLayout.setMaxPassengers(true, 10, true, false, true, "");
return view;
}
public static AssignerGuidePeopleDialog newInstance() {
return new AssignerGuidePeopleDialog();
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbind.unbind();
}
@OnClick(R.id.assigner_guide_people_ok)
public void clickOk() {
//選擇好了人數,點擊確認
AssignerGuideViewModel.ChoosePeopleInfo info = new AssignerGuideViewModel.ChoosePeopleInfo();
info.adult = countLayout.getAdultValue();
info.child = countLayout.getChildValue();
info.seat = countLayout.getChildSeatValue();
viewModel.setPeopleInfo(info);
dismiss();
}
}