web-dev-qa-db-ja.com

FrameLayoutの「Android:foreground」と「Android:foregroundGravity」は、その外観にどのように影響しますか?

FrameLayoutには、属性Android:foregroundAndroid:foregroundGravityAndroid: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>

私はグーグルで検索しましたが、これらの属性に関するヘルプが見つかりませんでした。参考にしたり、例を挙げたりできるリンクを提供してください。ありがとう

11

Android:foregroundは、Framelayoutがそのすべての子の上に描画する必要がある前景を指します

Android:foregroundGravityは、そのアセットがドローアブルの場合、そのアセットの重力を指します。つまり、あなたが使用している場合

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

次に、ドローアブルはそのすべての子の上に描画され、Framelayoutの中央に配置されます

Android:measureAllChildren :測定時にすべての子を測定するか、VISIBLEまたはINVISIBLE状態の子だけを測定するかを決定します。デフォルトはfalseです。つまり、これがfalseに設定されている場合、GONEの測定フェーズが実行されているときに、Framelayout状態のすべての要素は考慮されません。

それがあなたの質問に答えることを願っています。

14
Mayur Kaul

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に変更すると、トーストメッセージの出力フレームレイアウトの幅と高さが次のようになります。width= 0 height = 0

2
Hidayat Ullah