指定 cardview 的布局宽度以适合所有 phone 屏幕尺寸

specify layout width of cardview to fit all phone screen sizes

这里需要一些建议!

基本上,我希望我的卡片视图像第二张图片一样,但没有指定特定的宽度大小,因为指定特定的大小会导致布局看起来与其他 phone 中的不同。

我试过的:

1) 试过wrap_content,但卡片视图的大小会根据其中的内容而有所不同。有些会很长,直到它覆盖索引面板,然后有些会很短。另外,绝对不是 match_parent 因为索引面板会覆盖 cardview。

2) 为宽度指定一个特定的数字 (315dp)。它在我的实际 phone 上看起来很棒,但在其他模拟器上却不是。

3) 在我的卡片视图布局中添加了"android:layout_toStartOf="@+id/recycler_search",但是没有效果。


也许我可以使用我的 phone 进行演示,但那样效率不高,不是吗?

因此,有人知道我该如何克服这个问题吗?任何帮助是极大的赞赏!

这是我的代码:

卡片视图布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="315dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
app:cardCornerRadius="10dp"
app:cardBackgroundColor="#f5f0f0"
app:cardElevation="5dp">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_margin="5dp">


<LinearLayout
    android:orientation="vertical"
    android:layout_weight="9"
    android:layout_width="0dp"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/keyword"
        android:layout_marginLeft="10dp"
        android:gravity="center_vertical|start"
        android:textAllCaps="true"
        android:textStyle="bold"
        android:textColor="#000000"
        android:textSize="15dp"
        android:text="Baggage Management Interface Device 
        (BMID) Testing 123"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/codeHeader"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="5dp"
            android:gravity="center_vertical|start"
            android:textStyle="bold"
            android:textColor="#a8000000"
            android:text="Code:"
            android:textSize="13dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/acronym"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            android:gravity="center_vertical|start"
            android:textStyle="italic"
            android:textColor="#a8000000"
            android:text="GST"
            android:textSize="13dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <!--<LinearLayout-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_height="wrap_content">-->

        <!--<TextView-->
            <!--android:id="@+id/ruleHeader"-->
            <!--android:layout_marginLeft="10dp"-->
            <!--android:layout_marginTop="5dp"-->
            <!--android:gravity="center_vertical|start"-->
            <!--android:textStyle="bold"-->
            <!--android:textColor="#a8000000"-->
            <!--android:text="Desc:"-->
            <!--android:textSize="13dp"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content" />-->

        <!--<TextView-->
            <!--android:id="@+id/description"-->
            <!--android:layout_marginLeft="5dp"-->
            <!--android:layout_marginTop="5dp"-->
            <!--android:gravity="center_vertical|start"-->
            <!--android:textColor="#a8000000"-->
            <!--android:text="If none are set then 'GST' is 
            set to NULL"-->
            <!--android:textSize="13dp"-->
            <!--android:maxLines="2"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content" />-->

    <!--</LinearLayout>-->

    <!--<LinearLayout-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_height="wrap_content">-->

    <!--<TextView-->
        <!--android:id="@+id/relatedKeyword"-->
        <!--android:layout_marginLeft="10dp"-->
        <!--android:layout_marginTop="5dp"-->
        <!--android:gravity="center_vertical|start"-->
        <!--android:textColor="#a8000000"-->
        <!--android:text="Related Keyword:"-->
        <!--android:textSize="12sp"-->
        <!--android:textStyle="bold"-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_height="wrap_content" />-->

        <!--<TextView-->
            <!--android:id="@+id/relatedKeyword1"-->
            <!--android:clickable="true"-->
            <!--android:layout_marginLeft="5dp"-->
            <!--android:layout_marginTop="5dp"-->
            <!--android:textColor="#a8000000"-->
            <!--android:text="Keyword 1,"-->
            <!--android:textSize="12sp"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content"/>-->

        <!--<TextView-->
            <!--android:id="@+id/relatedKeyword2"-->
            <!--android:clickable="true"-->
            <!--android:layout_marginLeft="5dp"-->
            <!--android:layout_marginTop="5dp"-->
            <!--android:textColor="#a8000000"-->
            <!--android:text="Keyword 2,"-->
            <!--android:textSize="12sp"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content"/>-->

        <!--<TextView-->
            <!--android:id="@+id/relatedKeyword3"-->
            <!--android:clickable="true"-->
            <!--android:layout_marginLeft="5dp"-->
            <!--android:layout_marginTop="5dp"-->
            <!--android:textColor="#a8000000"-->
            <!--android:text="Keyword 3"-->
            <!--android:textSize="12sp"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content"/>-->

    <!--</LinearLayout>-->


    <TextView
        android:id="@+id/tv_rules_read_more"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:textStyle="bold"
        android:textSize="14sp"
        android:clickable="true"
        android:padding="5dp"
        android:textColor="@android:color/holo_blue_dark"
        android:text="@string/read_more"/>


</LinearLayout>
</LinearLayout>


主布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".KnowledgeActivity"
android:background="@drawable/bokeh10"
android:id="@+id/drawerLayout">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
    <ImageView
        android:id="@+id/drawable_header"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:src="@drawable/bg_login"/>

    <com.mancj.materialsearchbar.MaterialSearchBar
        android:id="@+id/search_bar"
        android:layout_alignParentTop="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:mt_speechMode="false"
        app:mt_hint="Search" />

<in.myinnos.alphabetsindexfastscrollrecycler.IndexFastScrollRecyclerView
        android:id="@+id/recycler_search"
        android:layout_below="@+id/search_bar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:setIndexBarColor="#ffffff"
        app:setIndexBarTextColor="#000000"/>

</RelativeLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/nvNavView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:menu="@menu/navigation_menu"
    android:layout_gravity="start">
</android.support.design.widget.NavigationView>


编辑:对于问为什么不 match_parent

的每个人

原来是这个样子!索引面板覆盖了卡片视图的某些部分。你可能会说这只是一点点,但我的卡片浏览量更多,标题更长。

有人发了解决方案,不知道为什么被删了!我遵循了他的解决方案,当我对我的代码做一些小改动时,我的问题神奇地解决了!

OP 的解决方案是遵循此 gitHub (https://github.com/intuit/sdp/tree/master/sdp-android/src/main/res) 并将 351dp 更改为 351sdp。

下面是我为解决我的问题而采取的步骤。

  1. 在值文件夹下创建一个新的值资源文件
  2. 将文件命名为 positive_sdp
  3. 完全按照 GitHub 中的内容进行操作。 positive_sdp 文件应该包含您想要的小部件、可绘制对象或任何东西的相关尺寸。所以在我的 positive_sdp xml 文件中,我有这些:
<dimen name="_315sdp">315.00dp</dimen>
<dimen name="_80sdp">80.00dp</dimen>
<dimen name="_250sdp">250.00dp</dimen>
  1. 我像往常一样保存了文件。
  2. 起初,我忘记将我的 351dp 更改为 'dimen/_27sdp',但是当我 运行 我的应用程序在 4 部不同的手机(2 部模拟器和 2 部实际手机)上时,我意识到我的卡片视图就在索引面板之前,就像我想要的那样。然而,在此之前,如果我在相同的 4 个模拟器上坚持 351dp 和 运行 我的应用程序,我的 cardview 的宽度无处不在!
  3. 总而言之,我相信我的问题通过创建 positive_sdp 文件得到了解决。

希望大家能从中受益!