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>
私はグーグルで検索しましたが、これらの属性に関するヘルプが見つかりませんでした。参考にしたり、例を挙げたりできるリンクを提供してください。ありがとう
Android:foreground
は、Framelayout
がそのすべての子の上に描画する必要がある前景を指します
Android:foregroundGravity
は、そのアセットがドローアブルの場合、そのアセットの重力を指します。つまり、あなたが使用している場合
Android:foreground="@Android:drawable/bottom_bar"
次に、ドローアブルはそのすべての子の上に描画され、Framelayout
の中央に配置されます
Android:measureAllChildren :
測定時にすべての子を測定するか、VISIBLE
またはINVISIBLE
状態の子だけを測定するかを決定します。デフォルトはfalseです。つまり、これがfalseに設定されている場合、GONE
の測定フェーズが実行されているときに、Framelayout
状態のすべての要素は考慮されません。
それがあなたの質問に答えることを願っています。
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