您的位置:首页 > 其它

自定义底部显示并没有标题栏的Dialog

2016-12-21 20:17 267 查看

需求:

*1. 对话框沉底显示

对话框要想显示,实际上也是通过addView的方法显示的。

params.gravity = Gravity.Bottom


*2. 设置对话框显示自己定义的布局

复写onCreate,然后在里面指定当前你的dialog显示的内容 但是这么做的话,会在上面有一段空白的区域,这段区域是用来放置Title

*3. 去掉title

** 1. 查看系统的dialog使用的是什么属性,在构造方法里面,有这样的一句话

context.getTheme().resolveAttribute(com.android.internal.R.attr.dialogTheme, outValue, true);


**2. 它实际上找的是这个叫做dialogTheme的样式。

**3. 继续跟进系统的Theme样式, 在里面最终找到一个叫做noFrame样式

**4. 拷贝过来,声明自己的样式,然后给构造方法里面指定使用样式即可

一.写一个类继承Dialog

public class LocationStyleDialog extends Dialog {
private WindowManager mWindowManager;
private TextView mTitle;
private ListView mListView;
private Context mContext;
private int[] mColors;

public LocationStyleDialog(Context context) {
//        super(context);
//设置自己的样式
this(context, R.style.LocationStyle);

//获取window显示的属性
WindowManager.LayoutParams params = getWindow().getAttributes();
//设置沉底
params.gravity = Gravity.BOTTOM;
//再次给属性赋值
getWindow().setAttributes(params);

mContext = context;
}

protected LocationStyleDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
}

public LocationStyleDialog(Context context, int themeResId) {
super(context,themeResId);

}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_view);
initView();
initData();
initListener();
}

private void initView() {
mTitle = (TextView) findViewById(R.id.tv_title);
mListView = (ListView)findViewById(R.id.lv_list);

}

private void initData() {
String [] mTitles = {
"半透明","活力橙","卫士蓝","金属灰","苹果绿"
};

mColors = new int[]{
R.drawable.shape_dialog_item01,
R.drawable.shape_dialog_item02,
R.drawable.shape_dialog_item03,
R.drawable.shape_dialog_item04,
R.drawable.shape_dialog_item05
};

LocationStyleAdapter adapter = new LocationStyleAdapter(mContext , mColors, mTitles);
mListView.setAdapter(adapter);
}

public void initListener(){
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
dismiss();
dismiss();
SharedPreUtil.putInt("color" , mColors[position] , mContext);
}
});

}
}


二.在style.xml文件中创建自己的样式

<style name="LocationStyle" parent="Theme.AppCompat.Dialog">
<item name="android:windowBackground">@color/white</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<!--窗口的显示动画风格-->
<item name="android:windowAnimationStyle">@null</item>
<!--背景是否是暗淡-->
<item name="android:backgroundDimEnabled">true</item>
<!--窗口是否是半透明的-->
<item name="android:windowIsTranslucent">true</item>
<!--是否没有标题-->
<item name="android:windowNoTitle">true</item>
<!--点击外部是否关闭窗口-->
<item name="android:windowCloseOnTouchOutside">true</item>
</style>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: