Я заменил следующую строку
setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
на
setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, 0);
и установил высоту всплывающего окна, вызвав метод setHeight
.
Окончательный код указан ниже:
public SelectBucketMenu(Context context) {
super(context);
this.mContext = context;
setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setOutsideTouchable(true);
setFocusable(true);
//Need set windowlayout for API 19 otherwise window won't appear
setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, 0);
setHeight((int)mContext.getResources().getDimension(R.dimen.bucket_menu_height));
setupView();
}
Обновление Если вам нужно вычислить высоту всплывающего окна во время выполнения, вы можете найти эту идею в этом ответе . Тогда окончательный код может быть таким, как показано ниже:
public SelectBucketMenu(Context context) {
super(context);
this.mContext = context;
setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setOutsideTouchable(true);
setFocusable(true);
//Need set windowlayout for API 19 otherwise window won't appear
setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, 0);
setupView();
}
private void setupView(){
View view = LayoutInflater.from(mContext)
.inflate(R.layout.popupmenu_selectbucket, null);
ButterKnife.bind(this, view);
setContentView(view);
int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec. UNSPECIFIED);
view.measure(spec, spec);
setHeight(view.getMeasuredHeight());
}
Обновление 2 Следующий код бесполезен, вы можете удалить его.
setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, 0);