FrameLayout 中的 'android:foreground' 和 'android:foregroundGravity' 如何影响其外观?
How do 'android:foreground' and 'android:foregroundGravity' in FrameLayout affect its appearance?
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_width="match_parent"
android:layout_height="match_parent"
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_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/btn_dialog" />
</FrameLayout>
我用谷歌搜索,但找不到有关这些属性的帮助。
请给我一个 link 我可以参考或帮助我举个例子。
谢谢
android:foreground
指向您的 Framelayout
需要在其所有 children
之上绘制的前景
android:foregroundGravity
指向该资产的重力,如果该资产是可绘制的。这意味着如果您使用
android:foreground="@android:drawable/bottom_bar"
然后您的可绘制对象将绘制在其所有 children 之上,并且位于 Framelayout
的中心
android:measureAllChildren :
决定测量时是测量所有children还是只测量处于VISIBLE
或INVISIBLE
状态的。默认为假。这意味着,如果将其设置为 false,则在 Framelayout
的测量阶段进行时,不会考虑处于 GONE
状态的所有元素。
希望这能回答您的问题。
如果 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_width="wrap_content"
android:layout_height="wrap_content"
android:measureAllChildren="true"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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(),"width="+width+" height="+height,Toast.LENGTH_SHORT).show();
}
}
如果我们运行模拟器中的应用程序以Toast消息的形式输出将是这样的:
宽=72 高=72
现在,如果我们将 measureAllChildren 的值更改为 false,则 Toast 消息输出框架布局的宽度和高度将为:
宽度=0 高度=0
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_width="match_parent"
android:layout_height="match_parent"
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_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/btn_dialog" />
</FrameLayout>
我用谷歌搜索,但找不到有关这些属性的帮助。 请给我一个 link 我可以参考或帮助我举个例子。 谢谢
android:foreground
指向您的 Framelayout
需要在其所有 children
android:foregroundGravity
指向该资产的重力,如果该资产是可绘制的。这意味着如果您使用
android:foreground="@android:drawable/bottom_bar"
然后您的可绘制对象将绘制在其所有 children 之上,并且位于 Framelayout
android:measureAllChildren :
决定测量时是测量所有children还是只测量处于VISIBLE
或INVISIBLE
状态的。默认为假。这意味着,如果将其设置为 false,则在 Framelayout
的测量阶段进行时,不会考虑处于 GONE
状态的所有元素。
希望这能回答您的问题。
如果 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_width="wrap_content"
android:layout_height="wrap_content"
android:measureAllChildren="true"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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(),"width="+width+" height="+height,Toast.LENGTH_SHORT).show();
}
}
如果我们运行模拟器中的应用程序以Toast消息的形式输出将是这样的: 宽=72 高=72
现在,如果我们将 measureAllChildren 的值更改为 false,则 Toast 消息输出框架布局的宽度和高度将为: 宽度=0 高度=0