Priya
Priya

Reputation: 1632

center horizontal RecyclerView in RelativeLayout

I am trying to set my horizontal RecyclerView in center of RelativeLayout. But some of list items get center as I want and some of them are not set to center. It looks like this. enter image description here

My XML is looking like this

<?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 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

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

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

Upvotes: 1

Views: 2084

Answers (2)

Amjad Omari
Amjad Omari

Reputation: 1112

change android:layout_height="@dimen/toolbar"

to 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.

Upvotes: 1

Marcos Vasconcelos
Marcos Vasconcelos

Reputation: 18276

For RelativeLayout the gravity attribute is set by:

android:layout_centerInParent="true"

Upvotes: 0

Related Questions