我有这个android布局:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:id="@+id/display_name_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/account_display_name"
..."/>
<ImageView
..."/>
</LinearLayout>
<LinearLayout
android:id="@+id/account_name_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:layout_marginBottom="1dp"
android:orientation="horizontal">
<TextView
android:id="@+id/account_name"
style="@style/AccountDataAccountName"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"/>
<ImageView
android:id="@+id/account_name_chevron"
android:layout_width="@dimen/account_menu_chevron_size"
android:layout_height="@dimen/account_menu_chevron_size"
android:layout_marginTop="@dimen/account_menu_chevron_top_margin"
android:layout_marginLeft="@dimen/account_menu_chevron_left_margin"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/close_and_recents"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="@dimen/account_menu_header_horizontal_margin"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/close_button"
android:layout_width="@dimen/account_menu_close_button_size"
android:layout_height="@dimen/account_menu_close_button_size"
android:layout_gravity="top|end"
android:padding="@dimen/account_menu_close_button_padding"
android:alpha="0"
android:visibility="gone"/>
但是当我以较大的字体和屏幕尺寸运行它时,
我看到图像脱离了线性布局。它被隐藏在红色圆圈图像的后面(同级FrameLayout
中的视图)。
怎么可能?
我没有设置负边距。
答案 0 :(得分:1)
因为在该LinearLayout中,您的account_name
文本视图首先占据了空间。因此,当您以大字体运行时,此textview会占用LinearLayout的(几乎)完整宽度。现在,布局将呈现下一个视图(图像视图),并将其放置在textView旁边。由于imageview具有固定的尺寸,因此会占用其空间,但会超出父级宽度,因此将不可见。
如果仍然不清楚,请告诉我。
更新
对于下一个问题,您可以将LinearLayout
更改为RelativeLayout
,如下所示:
<RelativeLayout
android:id="@+id/account_name_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginBottom="1dp">
<ImageView
android:id="@+id/account_name_chevron"
android:layout_width="@dimen/account_menu_chevron_size"
android:layout_height="@dimen/account_menu_chevron_size"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginTop="@dimen/account_menu_chevron_top_margin"
android:layout_marginLeft="@dimen/account_menu_chevron_left_margin"/>
<TextView
android:id="@+id/account_name"
style="@style/AccountDataAccountName"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:lines="1"
android:ellipsize="end"
android:layout_toLeftOf="@+id/account_name_chevron"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"/>
</RelativeLayout>
首先我们在布局的最右端绘制ImageView,然后从最左端到ImageView的开始绘制textView。对于“相对”布局,其属性如android:layout_toLeftOf
等。
Update2
根据您的要求尝试此代码。因此,基本上我们正在做的是;我们先绘制textView
,然后给它rightPadding
等于iconSize + iconLeftMargin
。因此,textView
现在将始终在其右侧保留用于图标的空间。现在我们用rightAlign
textView
图标,所以随着textView
增加其空间,图标将随之移动。一旦到达布局末端,图标仍将完全可见。
account_menu_chevron_size_plus_margin
这维等于iconSize + iconLeftMargin
<RelativeLayout
android:id="@+id/account_name_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginBottom="1dp">
<TextView
android:id="@+id/account_name"
style="@style/AccountDataAccountName"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:lines="1"
android:ellipsize="end"
android:paddingRight="@dimen/account_menu_chevron_size_plus_margin"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"/>
<ImageView
android:id="@+id/account_name_chevron"
android:layout_width="@dimen/account_menu_chevron_size"
android:layout_height="@dimen/account_menu_chevron_size"
android:layout_centerVertical="true"
android:layout_alignRight="@+id/account_name"
android:layout_marginTop="@dimen/account_menu_chevron_top_margin"
android:layout_marginLeft="@dimen/account_menu_chevron_left_margin"/>
</RelativeLayout>