android布局从屏幕推送视图
Posted
技术标签:
【中文标题】android布局从屏幕推送视图【英文标题】:android layout pushing views from the screen 【发布时间】:2013-01-26 05:49:52 【问题描述】:为了构建应用程序,我们有几个列表。 列表项存在问题,该列表项是自定义的,但非常简单。 格式为:
这表示一个包含 2 个文本视图和一个图像视图的列表项
请注意,标题和日期实际上是在彼此下方,并且图像在右侧,中心垂直作为属性。图像不应位于两个文本视图之间
我会先给出XML,然后再解释确切的问题。
XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_
android:layout_>
<LinearLayout
android:orientation="vertical"
android:layout_
android:layout_>
<TextView
android:textSize="16dip"
android:id="@+id/title"
android:layout_
android:layout_/>
<TextView
android:textSize="12dip"
android:id="@+id/date"
android:layout_
android:layout_/>
</LinearLayout>
<RelativeLayout
android:layout_
android:layout_
android:layout_marginRight="5dip" >
<ImageView
android:id="@+id/validationStateImg"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:layout_centerVertical="true" />
</RelativeLayout>
</LinearLayout>
问题: 从某种意义上说,这种布局完全按照 ascii 表示形式显示所有内容。 当文本变长时,无法正常工作。在文本很长但不足以占用 2 行的情况下,它只会使图像视图变小。
在其他情况下,它只是将 imageview 完全推离屏幕..
我需要的是,当日期或其他文本视图的长度太长时,不能换行。当然,它需要是一种可移植到各种屏幕尺寸的解决方案。
我不是 UI 艺术家,因此,如果我在某种意义上滥用布局,我表示歉意。
除了帮助,也欢迎提示和提示!
【问题讨论】:
【参考方案1】:我认为你最好的选择是一个简单的 RelativeLayout:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:padding="8dp"
>
<ImageView
android:id="@+id/validationStateImg"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:gravity="center_vertical"
/>
<TextView
android:id="@+id/title"
android:layout_
android:layout_
android:layout_toLeftOf="@id/validationStateImg"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textSize="16dp"
/>
<TextView
android:id="@+id/date"
android:layout_
android:layout_
android:layout_toLeftOf="@id/validationStateImg"
android:layout_alignParentLeft="true"
android:layout_below="@id/title"
/>
</RelativeLayout>
将 ImageView 对齐到父级的右侧,让 TextViews 占据其余的宽度,但与 ImageView 的左侧对齐。
【讨论】:
虽然我刚刚收到了解决我问题的回复,但我对此很好奇。至少对于学习曲线。如果文本太大,这是否也能确保文本不会推出图像? 是的,这个方法会给图片大小优先级。 ImageView 将足够宽以包含 100% 的图像(因此请记住,如果您在布局中放置 very 大图像,您将得到一些丑陋的结果),而且它将垂直填充RelativeLayout 的其余部分。重力属性将使图像停留在 ImageView 的垂直中心。只有在 ImageView 被放置后,TextViews 才会被放置。然后它们会展开以填充剩余空间,必要时采用多行,但绝不与图像重叠。 感谢您的解释。非常清楚。今天学到了一些新东西。这是非常优雅的,只有一种布局,完美的对齐方式。非常感谢。 curious-creature.org/2009/03/01/… 来自谷歌工程师。这篇文章是一份礼物。 @Avinazz 每次我看到好奇的生物.org 链接时,我都知道它是值得的。 :)【参考方案2】:希望这会有所帮助:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="horizontal" >
<LinearLayout
android:layout_weight = "1"
android:layout_
android:layout_
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_
android:layout_
android:text="dasdfasdfasdfasdfsadfsdf dsfasdfasd asdfadsf dfasdfads asdfasdf"
android:textSize="16dip" />
<TextView
android:id="@+id/date"
android:layout_
android:layout_
android:text="dasdfasdfasdfasdfsadfsdf"
android:textSize="12dip" />
</LinearLayout>
<RelativeLayout
android:layout_
android:layout_
android:gravity="center"
android:layout_marginRight="5dip" >
<ImageView
android:id="@+id/validationStateImg"
android:src="@drawable/ic_launcher"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:layout_centerVertical="true" />
</RelativeLayout>
【讨论】:
我还没有优化布局。您也可以使用单一的相对布局并获得所需的布局。 我的解决方案有帮助吗?如有任何问题,请详细告知我们。 kcoppock的解决方案是优化的一种。【参考方案3】:我认为在这种情况下你需要一个不同的布局,检查这个:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_
android:layout_>
<LinearLayout
android:orientation="vertical"
android:layout_
android:layout_weight="1"
android:gravity="center"
android:layout_>
<TextView
android:textSize="16dip"
android:id="@+id/title"
android:layout_
android:layout_/>
<TextView
android:textSize="12dip"
android:id="@+id/date"
android:layout_
android:layout_/>
</LinearLayout>
<ImageView
android:id="@+id/validationStateImg"
android:layout_
android:layout_
android:layout_gravity="center_vertical"/>
</LinearLayout>
【讨论】:
感谢您的回复。这个例子不是我要找的。如果我只希望这三个项目在彼此下方。两个文本应该在彼此下方,这两个文本右侧的图像,垂直居中对齐。 @Joey Roosing 哦,我现在明白了,这个图像示例好多了,我用新的 XML 更新了我的答案 非常感谢。我正在尝试这个。虽然使用这个得到了一些膨胀的错误。试图把它们整理出来。 @Joey Roosing 出现拼写错误LineareLayout
而不是LinearLayout
,现已修复。
不客气, 必须与线性布局中的weight
属性一起使用,以表明此布局将占据尽可能多的位置。检查this Android Docs 的链接,您会在那里找到有关权重的所有信息)【参考方案4】:
如果您不希望自己的图像缩小,那么您需要为其提供其父级提供的特定空间的特定比例。
具体来说,作为其父级的 LinearLayout 需要有一个 weight_sum,然后文本和图像都需要有一个 layout_weight。
重量加起来应该等于总和。权重不必是整数,layout_width 必须为 0 非常重要(并且非常反直觉)(假设他们两个并排坐着)......所以......
我将删除下面您需要重新添加的所有额外内容,只留下重要部分....
<LinearLayout weight_sum=2 layout_height=fill_parent>
<TextView layout_weight=2 layout_height=0dp/>
<ImageView layout_weight=2 layout_height=0dp />
<TextView layout_weight=2 layout_height=0dp/>
</LinearLayout>
这会将 LinearLayout 分成两半,左侧是文本(如果可以的话,它会换行),右侧是图像。您可以通过将总和设置为 3 并将边拆分为 2 和 1 来调整它,在这种情况下,文本将占屏幕的 2/3,图像占 1/3。或者将总和保留为 2,让左侧为 1.3,右侧为 0.7,以获得类似的效果。
【讨论】:
您好,谢谢您的回复。对于您的编辑,垂直布局不会做我想要的。因为图像应该在两个文本旁边,而不是在两者之间并且垂直居中对齐。你的回答还够吗?我还没试过。我要上传一张我需要的图片。以上是关于android布局从屏幕推送视图的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中禁用 SlidingDrawer 后面的布局?