我有以下xml代码。图像按钮未在textView下方对齐,边距为5dp。我想我在理解各种布局参数时犯了一个错误。 relativelayout是具有少量其他视图的线性布局的子视图。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="40">
<com.github.lzyzsd.circleprogress.DonutProgress
android:id="@+id/amain_dp"
android:layout_width="240dp"
android:layout_height="240dp"
android:layout_centerInParent="true" />
<TextView
android:id="@+id/amain_tv_currentsteps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:textSize="25sp" />
<ImageButton
android:id="@+id/amain_ib_whatsapp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:layout_centerHorizontal="true"
android:layout_below="@id/amain_tv_currentsteps"
android:background="@drawable/whatsapp_icon"/>
</RelativeLayout>
这是我得到的输出:
编辑:如果删除了layout_weight
参数并且提供了固定的layout_height
参数,则代码可以正常工作。但是想了解为什么上面的代码由于layout_weight
编辑:完整的xml代码:
<ScrollView
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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="in.jiyofit.basic_app.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/amain_tv_target"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="20dp"
android:layout_weight="10" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="40">
<com.github.lzyzsd.circleprogress.DonutProgress
android:id="@+id/amain_dp"
android:layout_width="240dp"
android:layout_height="240dp"
android:layout_centerInParent="true" />
<TextView
android:id="@+id/amain_tv_currentsteps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:textSize="25sp" />
<ImageButton
android:id="@+id/amain_ib_whatsapp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:layout_centerHorizontal="true"
android:layout_below="@id/amain_tv_currentsteps"
android:background="@drawable/whatsapp_icon"/>
</RelativeLayout>
<FrameLayout
android:id="@+id/amain_fl_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30"
android:layout_marginTop="20dp"/>
</LinearLayout>
答案 0 :(得分:1)
鉴于您的布局有以下方案:
<ScrollView>
<LinearLayout>
<TextView/>
<RelativeLayout/>
<FrameLayout/>
</LinearLayout>
</ScrollView>
在上面的层次结构中,所有LinearLayout
子项都有一个布局权重属性集,它基本上要求父级在父级内为其提供(layout_weight/weightSum) * parentHeight()
空间,LinearLayout
本身具有{ {1}}设置为lauout_height
,它基本上要求孩子告诉他们的高度,以便wrap_content
本身可以相应地扩展。这是一个循环依赖,因此布局工具无法确定位置。
在这种情况下,您有两个选择:
1 - 移除LinearLayout
并将ScrollView
高度设置为Linearlayout's
。布局的每个子元素都会相应地拉伸以正确占用屏幕空间。您的布局将如下所示:
match_parent
2 - 由于您有<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="80">
<TextView
android:id="@+id/amain_tv_target"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="20dp"
android:layout_weight="10"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="40">
<com.github.lzyzsd.circleprogress.DonutProgress
android:id="@+id/amain_dp"
android:layout_width="240dp"
android:layout_height="240dp"
android:layout_centerInParent="true"/>
<TextView
android:id="@+id/amain_tv_currentsteps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:textSize="25sp"/>
<ImageButton
android:id="@+id/amain_ib_whatsapp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_below="@id/amain_tv_currentsteps"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"/>
</RelativeLayout>
<FrameLayout
android:id="@+id/amain_fl_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:layout_weight="30"/>
</LinearLayout>
,因此您可以为ScrollView
的每个孩子提供绝对高度,并让LinearLayout
身高为LinearLayout
。对于不同的屏幕,wrap_content
会相应地适当缩放您的布局。您的布局可能如下所示:
ScrollView
根据经验,在向其子项提供<ScrollView
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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="80">
<TextView
android:id="@+id/amain_tv_target"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="20dp"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="400dp">
<com.github.lzyzsd.circleprogress.DonutProgress
android:id="@+id/amain_dp"
android:layout_width="240dp"
android:layout_height="240dp"
android:layout_centerInParent="true"/>
<TextView
android:id="@+id/amain_tv_currentsteps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:textSize="25sp"/>
<ImageButton
android:id="@+id/amain_ib_whatsapp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_below="@id/amain_tv_currentsteps"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"/>
</RelativeLayout>
<FrameLayout
android:id="@+id/amain_fl_container"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginTop="20dp"/>
</LinearLayout>
</ScrollView>
属性之前,请确保LinearLayout
的高度/宽度(如果可确定)。希望这会有所帮助。
答案 1 :(得分:0)
你需要使用+ 像这样:
android:layout_below="@+id/amain_tv_currentsteps"
答案 2 :(得分:0)
在你的顶部RelativeLayout
给它一个大小0dp会产生问题,因为它(rel的高度为0)你的图像视图低于它。
android:layout_height="match_parent"