我动态创建了一个布局,并通过片段而不是xml文件中的代码向其中添加了微调器和滑动布局。
一切正常,除了微调器不会滚动。
微调器的onItemSelected方法可以正常工作。
这是Fragment的onCreate方法中的代码。
微调器的canScrollVertically(-1)和canScrollVertically(1)方法返回false。有一个主要的相对布局,其中包含两个项目。旋转器,然后是位于其下方的滑动布局。滑动布局包含gridview。
parentLayout=new RelativeLayout(getContext());
ViewGroup.LayoutParams lp=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
parentLayout.setLayoutParams(lp);
swipeView = new SwipeRefreshLayout(getContext());
swipeView.setRefreshing(true);
swipeView.addView(gallery);
mediaFolderSpinner = new Spinner(getContext());
mediaFolderSpinner.setId(MEDIA_FOLDER_SPINNER_ID);
spinnerArray = new ArrayList<String>();
spinnerArray.add("All media");
selectedFolder = spinnerArray.get(0);
populateMediaFolders();
spinnerArrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, spinnerArray)
{
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
/*return super.getView(position, convertView, parent);*/
TextView lbl = (TextView) super.getView(position, convertView, parent);
lbl.setText(getItem(position));
lbl.setWidth(500);
lbl.setHeight(75);
lbl.setGravity(Gravity.START);
int paddingSidePixels = FileUtil.getPixelsFromDp(5);
lbl.setPadding(paddingSidePixels, lbl.getPaddingTop(), lbl.getPaddingRight(), lbl.getPaddingBottom());
lbl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.black));
lbl.setTextColor(ContextCompat.getColor(getContext(), R.color.white));
return lbl;
}
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
/*return super.getDropDownView(position, convertView, parent);*/
TextView lbl = (TextView) super.getView(position, convertView, parent);
lbl.setText(getItem(position));
lbl.setWidth(500);
lbl.setHeight(75);
lbl.setGravity(Gravity.START);
int paddingSidePixels = FileUtil.getPixelsFromDp(5);
lbl.setPadding(paddingSidePixels, lbl.getPaddingTop(), lbl.getPaddingRight(), lbl.getPaddingBottom());
lbl.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.black));
lbl.setTextColor(ContextCompat.getColor(getContext(), R.color.white));
return lbl;
}
};
mediaFolderSpinner.setAdapter(spinnerArrayAdapter);
mediaFolderSpinner.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.black));
mediaFolderSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selectedFolder = spinnerArrayAdapter.getItem(position);
galleryAdaptor.createGrid();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
parentLayout.addView(mediaFolderSpinner);
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) mediaFolderSpinner.getLayoutParams();
int marginPixels = FileUtil.getPixelsFromDp(5);
rlp.setMargins(rlp.leftMargin, marginPixels, rlp.rightMargin, marginPixels);
mediaFolderSpinner.setLayoutParams(rlp);
parentLayout.addView(swipeView);
if(TYPE == TYPE_IMAGE_VIDEO_MAIN) {
mediaFolderSpinner.setVisibility(View.VISIBLE);
RelativeLayout.LayoutParams swipeLp = (RelativeLayout.LayoutParams) swipeView.getLayoutParams();
swipeLp.addRule(RelativeLayout.BELOW, MEDIA_FOLDER_SPINNER_ID);
swipeView.setLayoutParams(swipeLp);
}
else{
mediaFolderSpinner.setVisibility(View.GONE);
}
答案 0 :(得分:0)
try {
Field popup = Spinner.class.getDeclaredField("mPopup");
popup.setAccessible(true);
// Get private mPopup member variable and try cast to ListPopupWindow
android.widget.ListPopupWindow popupWindow = (android.widget.ListPopupWindow) popup.get(mediaFolderSpinner);
//int height = 500; //Default 500px
int height = RelativeLayout.LayoutParams.WRAP_CONTENT;
if(CreatorActivity.creator.getmActivity().isPortrait()) {
DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
height = displayMetrics.heightPixels;
/*if (Const.NAVBAR_HEIGHT > 0) {
height = height - Const.NAVBAR_HEIGHT;
}*/
}
popupWindow.setHeight(height);
/*popupWindow.setHeight(500);*/
}
catch (NoClassDefFoundError | ClassCastException | NoSuchFieldException | IllegalAccessException e) {
// silently fail...
}