Recyclerview在较小的屏幕设备上选择项目的背景图像太大

时间:2016-10-18 04:36:34

标签: android recyclerview-layout

我有// Save as single PDF and offer as download this.toPDF(pdf_layout, function(data) { this.download(data, this.defaults.formats.PDF.mimeType, "amcharts.pdf"); }); RecyclerView来显示项目。这些项目包含图片视图和CardView 一旦用户选择一个项目就会填充。一旦他们选择了一个项目,我将检索所选项目 item的背景和触发意图打开一个新的活动,我在其中动态创建一个布局 将所选项目的背景设置为布局的背景。这是我的适配器类 填充我的TextView,我在其中检索所选项目的背景。

RecyclerView

在下一个活动中,我按如下方式检索所选项目。

public class PersonsAdapter extends RecyclerView.Adapter<PersonsAdapter.MyViewHolder> {

        private List<Person> mpersonsList;


        public class MyViewHolder extends RecyclerView.ViewHolder {
            public TextView name .....;
            View v;
            Person p;

            public MyViewHolder(View view) {
                super(view);
                name = (TextView) view.findViewById(R.id.tvName);
                //and all other textviews....

                v = view;
                v.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //if (view.getId() == getAdapterPosition()) {
                            //int itemposition = mRecyclerView.indexOfChild(v);
                            Intent i = new Intent(context, SelectedTemplate.class);
                            startActivity(i);
                            theBackground = view.getBackground();//retrieve the background of the selected item
                        //}
                    }
                });
                List<Drawable> templatesList = new ArrayList<>();
            }
        }


        public PersonsAdapter(List<Person> personsList) {
            this.mpersonsList = personsList;
        }

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.person, parent, false);

            return new MyViewHolder(itemView);
        }

        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            Person person = mpersonsList.get(position);
            holder.name.setText(person.getName());
            //and other details of the item......

            holder.p = mpersonsList.get(position);

            if(position == 0){
                holder.v.setBackgroundResource(R.drawable.wavy_curves_onblack);
            } 
        //and other background images.....
        }

        @Override
        public int getItemCount() {
            return mpersonsList.size();
        }
    }

当我在模拟器或小于5.5英寸的设备中测试时,我看到非常大的背景(我可以永远滚动),我只能看到两个图像,但不能看到文本视图。在较大的设备(真实和模拟器)中,我得到了正确的大小背景。但是我没有看到文本视图就像较小的文本视图 设备。我看到了两张图片。

private void getSelectedTemplate() {
        LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = vi.inflate(R.layout.selected_template, null);

        // fill in any details dynamically here


        //insert into main view
        ViewGroup insertPoint = (ViewGroup) findViewById(R.id.selectedtemplatelayout);
        insertPoint.setBackground(TheTemplates.theBackground);
        insertPoint.addView(v, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        rl = (LinearLayout) findViewById(R.id.selectedtemplatelayout);
        image.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        image.getLayoutParams().height = (int) getResources().getDimension(R.dimen.image_height);
        image.getLayoutParams().width = (int) getResources().getDimension(R.dimen.image_width);



        name.setText("NAME");
        name.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        //add all other textviews dynamically.....

        rl.removeAllViews();
        rl.addView(image);
        rl.addView(name);
        //add all remaining textviews
    }

这是<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:focusable="true" android:focusableInTouchMode="true"><!--this two lines will hide the keyboard and make the NAME textview visible --> <android.support.v7.widget.Toolbar android:id="@+id/my_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/selectedtemplatelayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="4dp" android:orientation="vertical" > //this is the layout I would like to stuff all my textviews and images and //set the background of the selected item. </LinearLayout> </ScrollView> //another layout <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </ScrollView> </LinearLayout>

RecyclerView

我似乎无法弄清楚为什么会发生这种情况以及如何解决这个问题。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

创建像

这样的文件夹

移动:创建不同的值文件夹,如下所示:

values                     (For mdpi devices)
values-hdpi                (For hdpi devices)
values-xhdpi               (For xhdpi devices)
values-xxhdpi              (For xxhdpi devices)

平板电脑:创建不同的布局文件夹,如下所示:

layout-sw600dp             (For 7? to 9? Screen)
layout-sw720dp             (For 10? to above screen)

对于图片资源:创建4个可绘制文件夹:

drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-xxhdpi

如果你通过api处理它。使用不同的图像大小 imagesmall_link imagelarge_link imagexlarge_link

答案 1 :(得分:0)

我通过简单地将布局高度从wrap_content更改为有限大小(如300dp或其他东西)解决了尺寸问题,这似乎适用于所有屏幕尺寸。但是文本视图在所有奇怪的屏幕中都不可见。当我解决这个问题时,我会更新这个答案,所以它可能会帮助某个人。