简体   繁体   English

在相对布局中居中水平 RecyclerView

[英]center horizontal RecyclerView in RelativeLayout

I am trying to set my horizontal RecyclerView in center of RelativeLayout.我试图在相对布局的中心设置我的水平 RecyclerView。 But some of list items get center as I want and some of them are not set to center.但是有些列表项会根据我的需要居中,而其中一些未设置为居中。 It looks like this.它看起来像这样。 在此处输入图片说明

My XML is looking like this我的 XML 看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:background="?attr/colorPrimaryDark"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:textColor="?attr/TextColor"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/toolbar"
        android:text="=: Change Your Font :="
        android:textStyle="bold"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:textSize="@dimen/appName"
        android:id="@+id/title"
        android:padding="@dimen/lblTime" />

    <LinearLayout
        android:background="?attr/TextColor"
        android:orientation="vertical"
        android:layout_below="@+id/title"
        android:layout_above="@+id/dialog_dismiss"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginTop="2dp"
            android:layout_weight="7">


            <TextView
                android:scrollbars="vertical"
                android:id="@+id/font_text_quote"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:autoLink="web"
                android:linksClickable="true"
                android:gravity="center"
                android:layout_centerVertical="true"
                android:padding="10dp"
                android:text="@string/sample"
                android:textColor="?attr/colorPrimaryDark"
                android:textSize="@dimen/newMainText"
                android:textStyle="bold" />
        </RelativeLayout>

        <RelativeLayout
            android:layout_gravity="center"
            android:background="?attr/colorPrimary"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginTop="2dp"
            android:layout_weight="1">

        <android.support.v7.widget.RecyclerView
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:id="@+id/hsv_font_bartextview"
            android:layout_width="match_parent"
            android:layout_height="@dimen/toolbar"
            android:layout_gravity="center"
            android:visibility="visible" />
        </RelativeLayout>

    </LinearLayout>




    <TextView
        android:id="@+id/dialog_dismiss"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/toolbar"
        android:text="Dismiss"
        android:textStyle="bold"
        android:textColor="?attr/TextColor"
        android:padding="@dimen/lblTime"
        android:textSize="@dimen/appName"
        android:gravity="center"
        android:layout_marginEnd="@dimen/lblTime"
        android:layout_marginRight="@dimen/lblTime"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"/>

</RelativeLayout>

My Child Item XML is like this我的子项 XML 是这样的

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    style="@style/SelectableItemBackground"
    android:gravity="center"
    android:orientation="vertical"
    >
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/cardView"
    android:layout_gravity="center_vertical"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginStart="10dp">


    <TextView
        android:id="@+id/textView"
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:layout_gravity="center_vertical"
        android:background="?attr/TextColor"
        android:gravity="center"
        android:text="hello"
        android:textColor="?attr/colorPrimaryDark"
        android:textSize="21sp"
        android:visibility="visible" />

</android.support.v7.widget.CardView>
    </LinearLayout>

My Java Code for it is like below我的 Java 代码如下

private void showGotoPageDialog() {

        Typeface font = Typeface.createFromAsset(SettingsActivity.this.getAssets(), constant.font);
        final Dialog mDialog = new Dialog(SettingsActivity.this);
        mDialog.setContentView(R.layout.font_dialogue);
        mDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        LinearLayoutManager layoutManager
                = new LinearLayoutManager(SettingsActivity.this, LinearLayoutManager.HORIZONTAL, false);
        hsv_font_bartextview= mDialog.findViewById(R.id.hsv_font_bartextview);
        hsv_font_bartextview.setLayoutManager(layoutManager);

        final TextView font_text_quote;
        TextAdapterTextview textAdaptertextview = new TextAdapterTextview(SettingsActivity.this, Globle.getFontArray());
        hsv_font_bartextview.setAdapter(textAdaptertextview);

        font_text_quote= mDialog.findViewById(R.id.font_text_quote);
        font_text_quote.setTypeface(font);
        textAdaptertextview.setOnClickLIstner(new OnTClickLIstner() {
            @Override
            public void onClick(View v, String image, int position) {
                constant.font=image;
                Typeface newfont = Typeface.createFromAsset(SettingsActivity.this.getAssets(), constant.font);
                font_text_quote.setTypeface(newfont);

            }
        });

        mDialog.show();
        TextView dismiss = (TextView) mDialog.findViewById(R.id.dialog_dismiss);
        dismiss.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mDialog.dismiss();
                Intent intent = new Intent(SettingsActivity.this, HomeActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            }
        });
    }

}

Adapter Java codes适配器 Java 代码

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

    public OnTClickLIstner onClickLIstner;
    Activity activity;
    private ArrayList<String> dataSet;

    public TextAdapterTextview(Activity activity, ArrayList<String> data) {
        this.dataSet = data;
        this.activity = activity;
    }

    public void setOnClickLIstner(OnTClickLIstner onClickLIstner) {
        this.onClickLIstner = onClickLIstner;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent,
                                           int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.text_view_raw_text, parent, false);
        //view.setOnClickListener(MainActivity.myOnClickListener);

        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int listPosition) {
        holder.textView.setText(Globle.getfontnames().get(listPosition));
        holder.textView.setTypeface(Typeface.createFromAsset(activity.getAssets(), dataSet.get(listPosition)));
    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        TextView textView;

        public MyViewHolder(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.textView);
            itemView.setOnClickListener(this);
        }


        @Override
        public void onClick(View v) {
            if (onClickLIstner != null) {
                onClickLIstner.onClick(v, dataSet.get(getAdapterPosition()), getAdapterPosition());
            }
        }
    }
}

You can see that the first two items put in center as well last two items also in center, but the third one is on top instead of center.您可以看到前两项位于中心,最后两项也位于中心,但第三项位于顶部而不是中心。 Let me know if someone have idea to correct it.如果有人有更正的想法,请告诉我。

EDIT its setting in center correct when I scroll items and tap on item.当我滚动项目并点击项目时,将其设置在正确的中心编辑

Thanks谢谢

change android:layout_height="@dimen/toolbar"更改 android:layout_height="@dimen/toolbar"

to android:layout_height="match_parent"到 android:layout_height="match_parent"

<android.support.v7.widget.RecyclerView
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:id="@+id/hsv_font_bartextview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:visibility="visible" />

this should be fixing the problem.这应该解决问题。

对于RelativeLayout,重力属性通过以下方式设置:

android:layout_centerInParent="true"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM