【问题标题】:/FIXED\ Android - TextView don't show below another TextView/FIXED\ Android - TextView 不显示在另一个 TextView 下方
【发布时间】:2019-04-11 06:20:25
【问题描述】:

我在 CardView 中有一些 TextView,但是当我尝试将我的 TextView“text_lieu”设置在 TextView“text_nom”下方时,没有发生任何事情,他们感到困惑。你能帮我吗 ?

这里是我的 xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
card_view:cardCornerRadius="10dp"
android:orientation="vertical"
card_view:cardElevation="10dp"
android:layout_margin="10dp">

    <TextView
        android:id="@+id/text_nom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:layout_gravity="start"
        android:padding="20dp" />
    <TextView
        android:id="@+id/text_heure"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:padding="20dp" />
    <TextView
        android:id="@+id/text_lieu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:layout_below="@+id/text_nom"/>

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

【问题讨论】:

  • 用垂直方向将它们包裹在一个 LinearView 中。
  • 我已经这样做了,但是我的 TextView "text_heure" 转到了中线,但我希望它位于第一行的末尾。就像第一行开头的“text_nom”,第一行结尾的“text_heure”和第二行开头的“text_lieu”。
  • 看看我的答案.... 使用线性布局,您可以将视图放在您想要的位置。例如,如果您希望视图 1 位于底部……您将在线性布局中按该顺序查看 V2、V3、V1。再次,看看我的回答...
  • 哦,我明白了,它很好用,感谢您的快速回答。你知道如果里面没有文字,我该怎么做才能让“Text_lieu”不可见吗?因为没有文字的时候,cardview太大了

标签: android xml android-studio textview cardview


【解决方案1】:

android:layout_below 仅在RelativeLayout 中有效。
您可以像这样将您的意见放在RelativeLayout 中:

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/text_nom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:padding="20dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/text_heure"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:padding="20dp" />

        <TextView
            android:id="@+id/text_lieu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/text_nom"
            android:padding="20dp" />
    </RelativeLayout>

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

编辑

if (myTextView3.getText().toString().trim().isEmpty())
    myTextView3.setVisibility(View.GONE);
else
    myTextView3.setVisibility(View.VISIBLE);

【讨论】:

  • 它有效,谢谢!我有最后一个问题,如果没有文本,我怎样才能使“Text_lieu”不可见,因为现在没有“text_lieu”文本时我的卡片视图太大了
  • 通过代码你可以做到:text_lieu.setVisibility(View.GONE);
  • 我需要在 if() 中放置什么?这是 myTextView3 image.noelshack.com/fichiers/2018/45/3/1541617842-capture.png
  • 我猜是myTextView3
  • 是的,但我不知道设置不可见性的条件是什么
【解决方案2】:

将文本视图包装在 LinearLayout 中。你可以调整它们,你不需要layout_belowLinearLayout 会为您解决这个问题。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
card_view:cardCornerRadius="10dp"
android:orientation="vertical"
card_view:cardElevation="10dp"
android:layout_margin="10dp">

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:orientation="vertical">
    <TextView
        android:id="@+id/text_nom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:padding="20dp" />
    <TextView
        android:id="@+id/text_lieu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp"/>

    <TextView
        android:id="@+id/text_heure"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp" />
</LinearLayout>
</android.support.v7.widget.CardView>

【讨论】:

    【解决方案3】:

    CardView 基本上扩展了FrameLayout。这意味着视图被放置在彼此之上,而不是像LinearLayout 那样以线性方式放置。为此,您需要将TextViews 放入LinearLayout 中的CardView

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    card_view:cardCornerRadius="10dp"
    android:orientation="vertical"
    card_view:cardElevation="10dp"
    android:layout_margin="10dp">
    
    <LinearLayout
       android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
    <TextView
        android:id="@+id/text_nom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:layout_gravity="start"
        android:padding="20dp" />
    <TextView
        android:id="@+id/text_heure"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:padding="20dp" />
    <TextView
        android:id="@+id/text_lieu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:layout_below="@+id/text_nom"/>
       </LinearLayout>
    </android.support.v7.widget.CardView>
    

    注意线性布局中vertical 的方向。

    如果您想保持 FrameLayout 样式,其中的项目具有属性android:layout_gravity,您可以将其设置为bottom 以将项目放置在底部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-22
      • 2013-04-26
      • 2016-08-25
      • 2018-01-10
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多