我有这样的FrameLayout:
create
问题是按钮显示在顶部,而FrameLayout类概述告诉我们:"子视图是在堆栈中绘制的,最近添加的子项位于顶部"。
答案 0 :(得分:55)
Lollipop及更高版本的按钮具有默认高度 使他们总是画在上面。您可以通过覆盖来更改此设置 默认的StateListAnimator。
尝试将其放入按钮XML:
android:stateListAnimator="@null"
FrameLayout现在应该涵盖了 按钮。
答案 1 :(得分:13)
在Android 5.0(API 21)及更高版本中,您必须在视图中添加 android:elevation 。
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="changeColor"
android:text="new button"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="some text"
android:elevation="3dp"/>
答案 2 :(得分:2)
正如官方的android文档指出:
FrameLayout旨在屏蔽屏幕上要显示的区域 单个项目。通常,FrameLayout应该用于保存单个项目 子视图,因为它可能很难组织子视图 在没有孩子的情况下可以扩展到不同屏幕尺寸的方式 相互重叠。但是,您可以将多个子项添加到a FrameLayout并控制它们在FrameLayout中的位置 使用android:layout_gravity为每个孩子分配重力 属性。
如果您将Button
和Textview
放在RelativeLayout
内的FrameLayout
内,这样会更好:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="some text"/>
<Button
android:id="@+id/button1"
android:layout_below="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="changeColor"
android:text="new button"/>
<RelativeLayout>
</FrameLayout>
答案 3 :(得分:1)
FrameLayout应该用于保存single child view
,因为可能难以以不同屏幕尺寸的方式组织子视图,而儿童 不会相互重叠 即可。
您应该在 FrameLayout 中使用 LinearLayout 或 RelativeLayout 。 像这样
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="changeColor"
android:text="new button"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="some text"/>
</RelativeLayout>
</FrameLayout>
答案 4 :(得分:1)
将Button
放入FrameLayout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="new button" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="some text" />
</RelativeLayout>
答案 5 :(得分:1)
对于API&lt; 21你不能使用android:stateListAnimator =&#34; @ null&#34;或改变海拔。在我的例子中,我使用嵌入在约束布局中的2帧布局。 由于框架布局可以相互堆叠,因此无需更改文本视图的高程。
<android.support.constraint.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
>
<Button
android:id="@+id/my_daybutton"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/cal_button_background"
android:textColor="@color/colorPrimaryDark"
android:gravity="start|top"
android:paddingTop="2dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
/>
</FrameLayout>
<FrameLayout
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="bla"
android:textSize="9sp"
android:textColor="@android:color/holo_red_dark"
android:layout_gravity="bottom|end"
/>
</FrameLayout>
答案 6 :(得分:1)
显然 android:stateListAnimator =“ @ null” 仅适用于API = 21或更高版本, 因此,对于那些目标使用API <21的人来说,它对我有用:D
timespan,parse
答案 7 :(得分:0)
只需将高程 FrameLayout 或任何父级放在那里,您就可以像这样加载片段
android:elevation="@dimen/dimen_20"
<FrameLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dimen_0"
android:id="@+id/ready_to_scan"
app:layout_constraintTop_toTopOf="parent"
android:elevation="@dimen/dimen_20"
app:layout_constraintBottom_toBottomOf="parent"/>