Android - 正在发生但未显示的视图
Posted
技术标签:
【中文标题】Android - 正在发生但未显示的视图【英文标题】:Android - A View taking place but doesn't show up 【发布时间】:2013-09-23 22:31:52 【问题描述】:这是 XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="@android:color/transparent" >
<LinearLayout
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/weightLossIndicator"
android:paddingLeft="15dp"
android:paddingRight="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/weightValueTextView"
android:layout_
android:layout_
android:paddingTop="10dp"
android:textColor="@android:color/black"
android:textSize="30sp"
android:textStyle="normal" />
<TextView
android:id="@+id/weightDateTextView"
android:layout_
android:layout_
android:textColor="@android:color/black"
android:textSize="20sp" />
<TextView
android:id="@+id/weightDifferenceTextView"
android:layout_
android:layout_
android:paddingBottom="10dp"
android:textColor="@android:color/black"
android:textSize="20sp" />
</LinearLayout>
<ImageView
android:id="@+id/weightLossIndicator"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:background="@color/change_green"/>
<View
android:id="@+id/separator"
android:layout_
android:layout_
android:layout_alignParentBottom="true"
android:layout_below="@+id/weightLossIndicator"
android:layout_marginLeft="15dp"
android:background="@color/dark_blue" />
</RelativeLayout>
视图weightLossIndicator
不会出现在设备和模拟器上,尽管它会影响布局上的其他元素(它们的位置)。背景颜色是不透明的,并且确实出现在图形布局中。
更新:
我尝试将 ImageView 的固定高度设置为 40 dp,然后猜猜看,它出现了!使用match_parent
有问题,但我不知道是什么。我也不得不说,我使用这个 XML 作为ListView
行布局。
【问题讨论】:
父布局是什么布局?请发布完整的 XML 文件。理想情况下,您可以为 LinearLAyout 分配一个 Id,并在 weightLossIndicator 视图中提及 android:layout_below 这个相邻的线性布局。 您是否将当前的 XML 封装在RelativeLayout
中?
@WordPressDeveloper 是的。
从您的 separator
中删除 android:layout_below="@+id/weightLossIndicator"
。添加到weightLossIndicator
这个属性:android:layout_above="@+id/separator"
@SherifelKhatib 也不起作用。刚试过。
【参考方案1】:
<View
android:id="@+id/separator"
android:layout_
android:layout_
android:layout_alignParentBottom="true"
android:background="@color/dark_blue" />
<ImageView
android:id="@+id/weightLossIndicator"
android:layout_
android:layout_
android:layout_above="@+id/separator"
android:layout_alignParentRight="true"
android:background="@color/change_green" />
<LinearLayout
android:layout_
android:layout_
android:layout_above="@+id/separator"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/weightLossIndicator"
android:orientation="vertical"
android:paddingLeft="15dp"
android:paddingRight="10dp" >
<TextView
android:id="@+id/weightValueTextView"
android:layout_
android:layout_
android:paddingTop="10dp"
android:textColor="@android:color/black"
android:textSize="30sp"
android:textStyle="normal" />
<TextView
android:id="@+id/weightDateTextView"
android:layout_
android:layout_
android:textColor="@android:color/black"
android:textSize="20sp" />
<TextView
android:id="@+id/weightDifferenceTextView"
android:layout_
android:layout_
android:paddingBottom="10dp"
android:textColor="@android:color/black"
android:textSize="20sp" />
</LinearLayout>
【讨论】:
粘贴到相对布局中它可以工作:)。请在图表中提供确切的布局要求 只是我们的好奇,它比我的 XML 有什么不同? 引用已更改【参考方案2】:你应该使用
<LinearLayout
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/weightLossIndicator"
android:paddingLeft="15dp"
android:paddingRight="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/weightValueTextView"
android:text="valueText"
android:layout_
android:layout_
android:paddingTop="10dp"
android:textColor="@android:color/black"
android:textSize="30sp"
android:textStyle="normal" />
<TextView
android:id="@+id/weightDateTextView"
android:text="dateText"
android:layout_
android:layout_
android:textColor="@android:color/black"
android:textSize="20sp" />
<TextView
android:id="@+id/weightDifferenceTextView"
android:text="differencetext"
android:layout_
android:layout_
android:paddingBottom="10dp"
android:textColor="@android:color/black"
android:textSize="20sp" />
</LinearLayout>
<ImageView
android:id="@+id/weightLossIndicator"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:layout_marginBottom="3dp"
android:background="#00FF00"/>
<View
android:id="@+id/separator"
android:layout_
android:layout_
android:layout_alignParentBottom="true"
android:layout_marginLeft="15dp"
android:background="#0000FF" />
【讨论】:
谢谢,我的问题没有直接关系,但您的回答帮助了我。只有我的前两个控件出现了——我开始认为其他控件被渲染到屏幕外,但无法证明这一点。无论如何,我的主布局上缺少 android:orientation="vertical" 。我在你的例子中看到了这一点。添加后,一切都显示出来了。再次感谢。【参考方案3】:尝试将您的 WeightLossIndicator LinearLayout 的 LayoutWeight
分配给 android:layout_weight="1"
编辑:
实际上,我注意到你有一个兄弟视图。取决于您想要如何布局视图(可能是 50%/%50),然后您可以同时应用线性布局和 ImageView 以使用 android:layout_weight="1"
再次编辑
如 cmets 所示,这种情况仅适用于包含在 LinearLayout 中的子布局。
【讨论】:
我相信如果父布局是LinearLayout而不是相对布局是有效的【参考方案4】:我一定遗漏了一些明显的东西,只需复制并粘贴您的 xml,将文本分配给 TextViews
,并确认出现 weightValueTextView
。你期待的结果是这样的吗? (忽略颜色,我硬编码了它的值)
我猜您正在以编程方式设置适当的文本值;来自Activity
的 sn-p 会很有用,以防万一您不小心做了不应该做的其他事情。
【讨论】:
嗯,这正是我想要的。还是行不通。但是你会在 ListView 中使用它吗?【参考方案5】:// try this
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="@android:color/transparent">
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:paddingLeft="15dp"
android:paddingRight="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/weightValueTextView"
android:layout_
android:layout_
android:paddingTop="10dp"
android:textColor="@android:color/black"
android:textSize="30sp"
android:textStyle="normal" />
<TextView
android:id="@+id/weightDateTextView"
android:layout_
android:layout_
android:textColor="@android:color/black"
android:textSize="20sp" />
<TextView
android:id="@+id/weightDifferenceTextView"
android:layout_
android:layout_
android:paddingBottom="10dp"
android:textColor="@android:color/black"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:layout_marginLeft="15dp"
android:orientation="vertical">
<ImageView
android:id="@+id/weightLossIndicator"
android:layout_
android:layout_
android:layout_weight="1"
android:background="@color/change_green"/>
<View
android:id="@+id/separator"
android:layout_
android:layout_
android:background="@color/change_green" />
</LinearLayout>
</LinearLayout>
【讨论】:
好吧,分隔符不会占据整个宽度。实际上,建议不要将子视图宽度设置为 match_parent 而其父宽度为 wrap_content。【参考方案6】:我会先尝试使用带有大显示屏的不同 avd。 setvisible true 这个属性在代码中设置为 false 吗?相对布局很棘手,一旦你使用其他设备让它看起来不错,它很可能不会像你想要的那样显示。还有 android:src ="@drawable/mypic" 并确保你在可绘制文件夹中有一张图片
【讨论】:
【参考方案7】:根据布局文件(BTW错过了容器布局),我看到你想要实现这个:
AB AB 交流
其中 A 是 LinearLayout(没有 id),B 是 weightLossIndicator,C 是分隔符。
这对吗?
如果是这样,你应该将C设置为右下对齐,并将B放在它上面,然后才决定如何处理A。
另外,如果 B 仍然无法占用空间,请尝试改用 ImageView。
【讨论】:
以上是关于Android - 正在发生但未显示的视图的主要内容,如果未能解决你的问题,请参考以下文章
Java/Android:如何在不切断边缘视图的情况下显示一系列图像视图?