android动态创建的微调器不滚动

问题描述 投票:0回答:1

我已经动态创建了一个布局,并通过片段中的代码而不是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);
            }
android spinner android-spinner
1个回答
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...
        }
© www.soinside.com 2019 - 2024. All rights reserved.