FrameLayout 中的 'android:foreground' 和 'android:foregroundGravity' 如何影响其外观?
Posted
技术标签:
【中文标题】FrameLayout 中的 \'android:foreground\' 和 \'android:foregroundGravity\' 如何影响其外观?【英文标题】:How do 'android:foreground' and 'android:foregroundGravity' in FrameLayout affect its appearance?FrameLayout 中的 'android:foreground' 和 'android:foregroundGravity' 如何影响其外观? 【发布时间】:2016-05-03 13:18:34 【问题描述】:FrameLayout 具有属性android:foreground
、android:foregroundGravity
和android:measureAllChildren
。
我已经尝试过这些属性,但无法弄清楚它们如何影响布局的外观或它们的工作方式。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:foreground="@android:color/holo_blue_dark"
android:foregroundGravity="center"
android:measureAllChildren="true"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.framelayoutdemo.MainActivity" >
<TextView
android:layout_
android:layout_
android:text="@string/hello_world" />
<ImageView
android:layout_
android:layout_
android:src="@android:drawable/btn_dialog" />
</FrameLayout>
我在 Google 上搜索过,但找不到有关这些属性的帮助。 请给我一个链接,我可以参考或帮助我举个例子。 谢谢
【问题讨论】:
【参考方案1】:android:foreground
指向您的Framelayout
需要在其所有子级之上绘制的前景
android:foregroundGravity
指向该资产的重力,如果该资产是可绘制的。这意味着如果您使用的是
android:foreground="@android:drawable/bottom_bar"
然后你的drawable被绘制在它的所有子元素之上,它位于Framelayout
的中心
android:measureAllChildren :
确定测量时是测量所有孩子还是只测量处于VISIBLE
或INVISIBLE
状态的孩子。默认为假。这意味着,如果将其设置为 false,则在 Framelayout
的测量阶段进行时,不会考虑所有处于 GONE
状态的元素。
希望能回答你的问题。
【讨论】:
android:foreground
和android:foregroundGravity
的解释很完美,但我不知道如何使用android:measureAllChildren :
,或者为什么要使用。如果您可以为其工作提供示例,这将是一个很大的帮助。非常感谢。
android:measureAllChildren
肯定对这个布局没有影响。
@j__m 我认为android:measureAllChildren
仅用于ViewAnimator
和ViewSwitcher
【参考方案2】:
如果 measureallchildren 设置为“true”,那么即使视图可见性处于消失状态,它也会显示框架布局的实际宽度和高度。 例如
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myframe"
android:orientation="vertical" android:layout_
android:layout_
android:measureAllChildren="true"
>
<ImageView
android:layout_
android:layout_
android:visibility="gone"
android:src="@drawable/ic_launcher"/>
</FrameLayout>
下面是 MainActivity.java 的代码。如果我们使用 Toast 在屏幕上显示高度和宽度。
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.myframe_activity);
FrameLayout frame=(FrameLayout)findViewById(R.id.frame);
frame.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int width = frame.getMeasuredWidth();
int height = frame.getMeasuredHeight();
Toast.makeText(getApplicationContext()," height="+height,Toast.LENGTH_SHORT).show();
如果我们在模拟器中运行应用程序,Toast 消息形式的输出将如下所示: 宽度=72 高度=72
现在,如果我们将 measureAllChildren 的值更改为 false,那么 Toast 消息输出帧布局的宽度和高度将为: 宽度=0 高度=0
【讨论】:
以上是关于FrameLayout 中的 'android:foreground' 和 'android:foregroundGravity' 如何影响其外观?的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Android 中的 FrameLayout 上检测手势
FrameLayout 中的 'android:foreground' 和 'android:foregroundGravity' 如何影响其外观?
后堆栈中的配置更改片段现在正在共享 FrameLayout?
在 FrameLayout 中的自定义视图上以编程方式设置边距值