1 点击弹出dialog
@OnClick(R.id.siv_style_address)
public void setStyleAddress(View view) {
final AddressDialog addressDialog = new AddressDialog(this);
mAddressAdapter = new AddressAdapter();
addressDialog.setAdapter(mAddressAdapter);
// 1 设置item 监听
addressDialog.setOnItemOnClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 存储
PreferencesUtils.putInt(getApplicationContext(),
Constants.ADDRESS_STYLE, ICONS[position]);
addressDialog.dismiss();
}
});
addressDialog.show();
}
2 AdressDialog
package org.heima.mobilesafe01.view;
import org.heima.mobilesafe01.R;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
/**
* @author U 自定义Dialog
*/
public class AddressDialog extends Dialog {
private ListAdapter mAdapter;
private OnItemClickListener mOnItemClickListener;
private ListView mlv;
public AddressDialog(Context context) {
super(context, R.style.AddressStyle);// 自己弄一个dialog --> Style --->找
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_address_dialog);
mlv = (ListView) findViewById(R.id.lv_address_dialog);
if (mAdapter != null) {
mlv.setAdapter(mAdapter);
}
if (mOnItemClickListener != null) {
mlv.setOnItemClickListener(mOnItemClickListener);
}
// 设置对话框位置
Window window = getWindow();
window.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
// 获取LayoutParams
LayoutParams params = window.getAttributes();// getLayoutParams
params.width = LayoutParams.WRAP_CONTENT;
params.height = LayoutParams.WRAP_CONTENT;
window.setAttributes(params);// setLayoutParams
}
public void setAdapter(ListAdapter adapter) {
this.mAdapter = adapter;
}
public void setOnItemOnClickListener(OnItemClickListener onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
}
}
3 Dialog的主题(<item name="android:windowAnimationStyle">@android:style/Animation.InputMethod</item>设置动画)
<style name="AddressStyle" parent="android:Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.InputMethod</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>
4 动画
<!-- Window animations that are applied to input method overlay windows. -->
<style name="Animation.InputMethod">
<item name="windowEnterAnimation">@anim/input_method_enter</item>
<item name="windowExitAnimation">@anim/input_method_exit</item>
</style>
MyDialog
package com.example.mtdialog;
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;
public class TestDialog extends Dialog {
public TestDialog(Context context) {
super(context);
init();
}
private void init() {
Window w = getWindow();
w.requestFeature(Window.FEATURE_NO_TITLE);
View v = View.inflate(getContext(), R.layout.view, null);
setContentView(v);
TextView tv = (TextView) v.findViewById(R.id.tv);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "dialog", 100).show();
}
});
LayoutParams p = w.getAttributes();
p.width = 200;
p.height =WindowManager.LayoutParams.MATCH_PARENT;
w.setAttributes(p);
}
}
# 自定义 Dialog
* 1 extends Dialog
* 2 Window: setGravity,LayoutParams
* 3 找主题:values/styles---Theme--- ctrl+f(Dialog) 找到了 <item name="dialogTheme">@android:style/Theme.Dialog</item> 进入: <style name="Theme.Dialog.NoFrame">