2016-01-26 18 views
8

FrameLayout ha gli attributi android:foreground, android:foregroundGravity e android:measureAllChildren. Ho provato questi attributi, ma non sono riuscito a capire come influiscono sull'aspetto del layout o sul loro funzionamento.In che modo "android: foreground" e "android: foregroundGravity" in FrameLayout influiscono sul suo aspetto?

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

Ho cercato su Google, ma non sono riuscito a trovare un aiuto con questi attributi. Per favore forniscimi un link a cui posso riferirmi o aiutarmi con un esempio. Grazie

risposta

7

android:foreground punti in primo piano che le vostre esigenze Framelayout per disegnare in cima a tutti i suoi figli

android:foregroundGravity punti alla gravità di tale attività, se tale attività è un disegnabile. Ciò significa che se si utilizza

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

Allora la vostra drawable viene disegnata in cima a tutti i suoi figli e si è posizionato al centro del Framelayout

android:measureAllChildren : determina se misurare tutti i bambini o solo quelli in VISIBLE o INVISIBLE stato durante la misurazione. Il valore predefinito è falso. Ciò significa che, se è impostato su false, tutti gli elementi nello stato GONE non vengono presi in considerazione quando la fase di misura dello Framelayout è in corso.

Spero che risponda alla tua domanda.

+0

Spiegazione per 'android: foreground' e' android: foregroundGravity' is p eretto, ma non ho avuto modo di usare 'android: measureAllChildren:', o perché usarlo. Sarà di grande aiuto se è possibile fornire ed esempio per il suo funzionamento. Molte grazie. – SimplyProgrammer

+0

'android: measureAllChildren' non ha alcun effetto su questo layout. –

1

Se measureallchildren è impostato su "true", allora mostrerà la larghezza e l'altezza effettive del layout del frame anche se la visibilità delle viste è nello stato passato. Ad esempio

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

seguito è il codice di MainActivity.java. se usiamo Toast per visualizzare altezza e larghezza sullo schermo.

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

 
    } 
 

 
}

se corriamo l'App nell'emulatore l'uscita sotto forma di messaggio di Toast sarà così: width = 72 height = 72

Ora, se si cambia la valore di measureAllChildren su false quindi Toast messaggio output frame larghezza e altezza saranno: width = 0 height = 0