先预览下效果:
自定义Dialog,设置Dialog居于底部并且和屏幕一样宽:
public class BottomStyleDialog extends Dialog implements OnItemClickListener { private String[] mNames = new String[] { "我是条目1", "我是条目2", "我是条目3", "我是条目4", "我是条目5","我是条目6","我是条目7" }; private ListView mLv; private ArrayList<StyleItem> mList = new ArrayList<StyleItem>(); private StyleAdapter mAdapter; public BottomStyleDialog(Context context) { // 在构造方法里, 传入主题 super(context, R.style.BottomDialogStyle); // 拿到Dialog的Window, 修改Window的属性 Window window = getWindow(); window.getDecorView().setPadding(0, 0, 0, 0); // 获取Window的LayoutParams LayoutParams attributes = window.getAttributes(); attributes.width = LayoutParams.MATCH_PARENT; attributes.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL; // 一定要重新设置, 才能生效 window.setAttributes(attributes); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view_dialog); initView(); initData(); } private void initView() { mLv = (ListView) findViewById(R.id.lv_view_dialog); mLv.setOnItemClickListener(this); } private void initData() { // 填充数据集合 for (int i = 0; i < mNames.length; i++) { StyleItem styleItem = new StyleItem(); styleItem.mName = mNames[i]; mList.add(styleItem); } mAdapter = new StyleAdapter(getContext(), mList); mLv.setAdapter(mAdapter); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mAdapter.notifyDataSetChanged(); } }styles中定义Dialog的样式及其进入和退出动画
<!-- 自定义Dialog主题 --> <style name="BottomDialogStyle" parent="@android:style/Theme.Dialog"> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/white</item> <item name="android:windowAnimationStyle">@style/BottomDialogAnimation</item> </style> <!-- 自定义Dialog动画 --> <style name="BottomDialogAnimation"> <item name="android:windowEnterAnimation">@anim/input_method_enter</item> <item name="android:windowExitAnimation">@anim/input_method_exit</item> </style>Dialog中使用的Adapter:
public class StyleAdapter extends BaseAdapter { private Context mContext; private ArrayList<StyleItem> mList; public StyleAdapter(Context context, ArrayList<StyleItem> list) { mContext = context; mList = list; } @Override public int getCount() { return mList.size(); } @Override public StyleItem getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = View.inflate(mContext, R.layout.item_dialog_style, null); holder = new ViewHolder(); holder.tvName = (TextView) convertView.findViewById(R.id.tv_item_dialog_name); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } StyleItem item = getItem(position); holder.tvName.setText(item.mName); return convertView; } static class ViewHolder { TextView tvName; } }点击展示Dialog
BottomStyleDialog bottomStyleDialog = new BottomStyleDialog(MainActivity.this); bottomStyleDialog.show();代码GitHub地址