相对布局搞砸了如何固定它的位置

Posted

技术标签:

【中文标题】相对布局搞砸了如何固定它的位置【英文标题】:Relative layout messed up how fixed its position 【发布时间】:2019-09-15 04:04:42 【问题描述】:

您好朋友,我创建了具有文本和媒体控制器按钮的相对布局,当我开始播放歌曲时它弄乱了我的布局请告诉我它的位置是如何固定的,我的布局的代码和图片请帮助修复它我不知道如何解决这个问题修复相对布局位置我正在创建 mp3 播放器,我正面临这个问题,请帮助我

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mediacontroller"
    android:layout_
    android:layout_
    android:background="@color/colorPrimary"
    android:layout_gravity="bottom"
    android:padding="4dp">

    <TextView
        android:id="@+id/song_title"
        android:layout_
        android:layout_
        android:layout_alignParentStart="true"
        android:layout_marginStart="24dp"
        android:layout_marginEnd="10dp"
        android:layout_toStartOf="@+id/buttonBackward"
        android:ellipsize="end"
        android:maxLines="1"
        android:padding="2dp"
        android:text="Song Name - [details]"
        android:textColor="@android:color/white"
        android:textSize="12sp"
        android:textStyle="bold"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="24dp"
        android:layout_marginRight="10dp"
        android:layout_toLeftOf="@+id/buttonBackward" />

    <TextView
        android:id="@+id/song_artist"
        android:layout_
        android:layout_
        android:layout_below="@id/song_title"
        android:layout_alignParentStart="true"
        android:layout_marginStart="24dp"
        android:layout_marginEnd="10dp"
        android:layout_toStartOf="@+id/buttonBackward"
        android:padding="2dp"
        android:text="Singer Name"
        android:textColor="@android:color/white"
        android:textSize="12sp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="24dp"
        android:layout_marginRight="10dp"
        android:layout_toLeftOf="@+id/buttonBackward" />

    <ImageView
        android:id="@+id/buttonForward"
        android:layout_
        android:layout_
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="8dp"
        android:gravity="center"
  android:src="@drawable/ic_skip_next_black_24dp"
        android:textColor="@android:color/white"
        android:layout_alignParentRight="true"
        android:layout_marginRight="8dp" />

    <ImageView
        android:id="@+id/play_button_main"
        android:layout_
        android:layout_
        android:layout_centerVertical="true"
        android:layout_marginEnd="8dp"
        android:layout_toStartOf="@id/buttonForward"
      android:src="@drawable/play_button"
        android:visibility="visible"
        android:gravity="center"

        android:textColor="@android:color/white"
        android:layout_marginRight="8dp"
        android:layout_toLeftOf="@id/buttonForward" />
    <ImageView
        android:id="@+id/pausebtn"
        android:layout_
        android:visibility="gone"
        android:layout_
        android:layout_centerVertical="true"
        android:layout_marginEnd="8dp"
        android:layout_toStartOf="@id/buttonForward"
        android:src="@drawable/pause_button"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:layout_marginRight="8dp"
        android:layout_toLeftOf="@id/buttonForward" />


    <ImageView
        android:id="@+id/buttonBackward"
        android:layout_
        android:layout_
        android:layout_centerVertical="true"
        android:layout_marginEnd="8dp"
        android:layout_toStartOf="@id/play_button_main"
   android:src="@drawable/ic_prev"
        android:gravity="center"
        android:text="B"
        android:textColor="@android:color/white"
        android:layout_marginRight="8dp"
        android:layout_toLeftOf="@id/pausebtn" />

</RelativeLayout>

【问题讨论】:

嗨,也许尝试使用水平方向的LinearLayout 将按钮控件包裹在右下角?这将使按钮彼此对齐。 对于buttonBackward,有2个属性冲突(或至少不一致):android:layout_toStartOf="@id/play_button_main"android:layout_toLeftOf="@id/pausebtn" 【参考方案1】:

最好的解决方案是在单击此按钮时将播放按钮的可见性更改为android:visibility="invisible",或者根据其他视图位置设置播放和暂停按钮位置,当buttonBackward 基于@ 的位置时没有相反(像现在) 987654323@和pausebtn

【讨论】:

【参考方案2】:

我发现将一个按钮设置为消失而另一个按钮设置为可见这一事实有点棘手,特别是考虑到约束限制以及其他按钮也与它们相关的事实。

buttonBackward 的最后一行似乎是问题所在。 使用invisible 代替gone 作为播放和暂停按钮。

理想情况下,如果您坚持使用gone,那么我将使用一个包装器(即 FrameLayout),其中两个按钮将存在,所有空间约束都与包装器有关,而不是按钮本身。

【讨论】:

谢谢你的回答也对,但我只能接受一个答案

以上是关于相对布局搞砸了如何固定它的位置的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 子类布局在禁用自动布局的故事板中搞砸了

格式与布局

布局管理(绝对&相对水平垂直格栅表单)

当我结合 UIPanGestureRecognizer 和自动布局时,我的 UIViews 搞砸了

格式与布局

盒子模型和布局