Как "андроид: передний план" и "андроид: foregroundGravity" в FrameLayout влияют на его внешний вид?

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>

У меня есть googled, но я не могу найти помощь с этими атрибутами. Пожалуйста, предоставьте мне ссылку, на которую я могу ссылаться или помочь мне с примером. Благодаря

Ответ 1

android:foreground указывает на передний план, который ваш Framelayout должен рисовать поверх всех своих дочерних элементов

android:foregroundGravity указывает на серьезность этого актива, если этот актив является приемлемым. Это означает, что если вы используете

android:foreground="@android:drawable/bottom_bar"

Затем ваш drawable нарисован поверх всех его детей и расположен в центре Framelayout

android:measureAllChildren : Определяет, следует ли измерять все дети или только те, которые находятся в состоянии VISIBLE или INVISIBLE при измерении. По умолчанию false. Это означает, что если он установлен в значение false, то все элементы в состоянии GONE не принимаются во внимание при фазе измерения Framelayout.

Надеюсь, что ответит на ваш вопрос.

Ответ 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_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. если мы используем тост, чтобы отобразить высоту и ширину на экране.

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 будет таким: width = 72 height = 72

Теперь, если мы изменим значение measureAllChildren на false, то ширина и высота структуры выходного кадра сообщения Toast будут: width = 0 height = 0