android - 在 RelativeLayout 中水平居中 RecyclerView

标签 android android-layout android-recyclerview

我正在尝试将我的水平 RecyclerView 设置在 RelativeLayout 的中心。但是有些列表项如我所愿地居中,有些则没有设置为居中。看起来像这样。 enter image description here

我的 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>

我的子项 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>

我的 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);
            }
        });
    }

}

适配器 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());
            }
        }
    }
}

您可以看到前两项放在中心,最后两项也放在中心,但第三项在顶部而不是中心。如果有人想更正它,请告诉我。

编辑 当我滚动项目并点击项目时,它在中心的设置是正确的。

谢谢

最佳答案

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

到 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" />

这应该可以解决问题。

关于android - 在 RelativeLayout 中水平居中 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46570484/

相关文章:

Android WebView 获取内容高度()不返回正确的值

android - 如何使(矩阵?)转换永久成为 RecyclerView

android - 如何将布局元素高度定义为屏幕高度

android - 如何在RecyclerView中为TextView设置自定义字体?

android - 如何在不替换项目的情况下在一个 Recyclerview 中添加两个自定义行?

java - "Transform variable into final one element array"。 RecyclerView 滚动监听器出现错误

java - 查询 Facebook 时停止工作线程

android - 根据屏幕密度和屏幕大小以编程方式增加文本大小

android - Unity 2018.3 android dex合并问题

android - 如何更改 TextInputLayout 上的 EditText 行/字段颜色(调用 setError 时)?