如果做一个如下图的Dialog,首先要定义样式:
<style name="DropdownFilterDialogStyle" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowSoftInputMode">stateUnchanged|adjustResize</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
定义一个基类,基类里面有一些基本方法:
public abstract class DropDownFilterDialog extends Dialog {
protected ArrayList<DropDownItem> mTopMenuList;
OnDropdownClickListener mDropdownClickListener;
protected LinearLayout mDropDownMenuLayout;
public Context mContext;
private int mCurrentIndex = 0;
public void setCurrentIndex(int mCurrentIndex) {
this.mCurrentIndex = mCurrentIndex;
}
public void setTopMenuItemList(ArrayList<DropDownItem> mTopMenuList) {
this.mTopMenuList = mTopMenuList;
}
public DropDownFilterDialog(Context context) {
<strong> super(context, R.style.DropdownFilterDialogStyle);</strong>
mContext = context;
}
public interface OnDropdownClickListener {
void onDropdownHide();
void onClickItem(int index);
}
public void setDropDownClickListener(OnDropdownClickListener dropdownClickListener) {
mDropdownClickListener = dropdownClickListener;
}
public abstract void hideDropDownFilter(boolean showAnimation);
public abstract void showDialog(boolean showAnimation, View banner);
public void init() {
mDropDownMenuLayout = (LinearLayout) findViewById(R.id.text_chat_menu_linear);
constructButton(mTopMenuList);
}
@Override
protected void onStart() {
super.onStart();
init();
}
public void constructButton(ArrayList<DropDownItem> list) {
mDropDownMenuLayout.removeAllViews();
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
// mDropDownMenuLayout.addView(View.inflate(mContext,
// R.layout.view_top_menu_separator, null), params);
final int size = list.size();
final int lastPosition = size - 1;
for (int i = 0; i < size; i++) {
DropDownItem item = list.get(i);
View view = View.inflate(mContext, R.layout.dropdown_menu_item_layout,
null);
view.setTag(i);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
hideDropDownFilter(true);
mDropdownClickListener.onClickItem((Integer) view.getTag());
}
});
TextView btn = (TextView) view
.findViewById(R.id.top_menu_button);
btn.setText(item.getName());
btn.setTag(item.getIndex());
if (mCurrentIndex == i) {
btn.setTextColor(mContext.getResources().getColor(R.color.contact_detail_phone_related_color_pressed));
}
TextView tab_indicator_counter = (TextView) view.findViewById(R.id.indicator_counter);
if (item.getCouter() == 0) {
tab_indicator_counter.setVisibility(View.GONE);
} else {
tab_indicator_counter.setText(String.valueOf(item.getCouter()));
}
boolean showSeparator = true;
if (size == 1) {
showSeparator = false;
} else if (i == lastPosition) {
showSeparator = false;
}
view.setBackgroundResource(R.drawable.drop_down_filter_item_background_selector);
mDropDownMenuLayout.addView(view, params);
if (showSeparator) {
LinearLayout.LayoutParams paramsForLine = new LinearLayout.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT, mContext.getResources().getDimensionPixelSize(R.dimen.top_menu_vertical_separator));
paramsForLine.leftMargin = mContext.getResources().getDimensionPixelSize(R.dimen.drop_down_menu_item_margin_left_right);
paramsForLine.rightMargin = paramsForLine.leftMargin;
mDropDownMenuLayout.addView(View.inflate(mContext,
R.layout.drop_down_menu_divider_layout, null), paramsForLine);
}
}
mDropDownMenuLayout.invalidate();
}
}
然后是具体实现类:
public class DropDownFilterDialogForTablet extends DropDownFilterDialog {
public DropDownFilterDialogForTablet(Context context) {
super(context);
mContext = context;
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drop_down_filter_dialog);
}
@Override
protected void onStart() {
super.onStart();
init();
}
public void hideDropDownFilter(boolean showAnimation) {
dismiss();
mDropdownClickListener.onDropdownHide();
}
public void init() {
super.init();
mDropDownMenuLayout.setBackgroundResource(R.drawable.dropdown_filters_background);
}
public void showDialog(boolean showAnimation, View banner) {
<strong> Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
int height = mContext.getResources().getDimensionPixelSize(R.dimen.drop_down_menu_item_margin_top_for_tablet);
if (banner == null) {
lp.y = height;
} else {
lp.y = height + banner.getMeasuredHeight();
}</strong>
show();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
hideDropDownFilter(true);
return true;
}
return false;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN
&& event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
hideDropDownFilter(true);
return true;
}
return super.dispatchKeyEvent(event);
}
}