web-dev-qa-db-fra.com

Comment «Android: premier plan» et «Android: premier plan» dans FrameLayout affectent-ils son apparence?

FrameLayout a les attributs Android:foreground, Android:foregroundGravity et Android:measureAllChildren. J'ai essayé ces attributs, mais je n'ai pas pu comprendre comment ils affectent l'apparence de la mise en page ou comment ils fonctionnent.

<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>

J'ai googlé, mais je n'ai pas pu trouver d'aide avec ces attributs. Veuillez me fournir un lien auquel je peux me référer ou m'aider avec un exemple. Merci

11
SimplyProgrammer

Android:foreground pointe au premier plan que votre Framelayout doit dessiner par-dessus tous ses enfants

Android:foregroundGravity indique la gravité de cet actif, si cet actif est un drawable. Cela signifie que si vous utilisez

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

Ensuite, votre dessinable est dessiné au-dessus de tous ses enfants et il est positionné au centre du Framelayout

Android:measureAllChildren : Détermine s'il faut mesurer tous les enfants ou uniquement ceux à l'état VISIBLE ou INVISIBLE lors de la mesure. Par défaut, false. Cela signifie que s'il est défini sur false, tous les éléments à l'état GONE ne sont pas pris en compte lorsque la phase de mesure de Framelayout se déroule.

J'espère que cela répond à votre question.

14
Mayur Kaul

Si mesureallchildren est défini sur "true", il affichera la largeur et la hauteur réelles de la disposition du cadre, même si la visibilité des vues est à l'état disparu. Par exemple

<?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>

Voici le code de MainActivity.Java. si nous utilisons Toast pour afficher la hauteur et la largeur à l'écran.

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();

    }

}

si nous exécutons l'application dans l'émulateur, la sortie sous forme de message Toast sera comme ceci: largeur = 72 hauteur = 72

Maintenant, si nous changeons la valeur de measureAllChildren en false, la largeur et la hauteur de la mise en page du cadre de sortie du message Toast seront: largeur = 0 hauteur = 0

2
Hidayat Ullah