一手遮天 Android - view(布局类): FrameLayout 叠加布局
一手遮天 Android - view(布局类): FrameLayout 叠加布局
示例如下:
/view/layout/FrameLayoutDemo1.java
/**
* FrameLayout - 叠加布局控件
*/
package com.webabcd.androiddemo.view.layout;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.webabcd.androiddemo.R;
public class FrameLayoutDemo1 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_layout_framelayoutdemo1);
// 演示如何在 java 中控制 FrameLayout 布局,仅代码演示,没有对应的显示效果
sample1();
// 用于演示如何在 java 中设置 gravity 和 layout_gravity
sample2();
}
private void sample1() {
FrameLayout frameLayout = new FrameLayout(this);
// 对应 xml 中的 foreground
frameLayout.setForeground(this.getResources().getDrawable(R.drawable.img_sample_son));
// 对应 xml 中的 foregroundGravity
frameLayout.setForegroundGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM);
}
private void sample2() {
TextView textView1 = findViewById(R.id.textView1);
// 在 java 中设置 gravity
textView1.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
// 在 java 中设置 layout_gravity
FrameLayout.LayoutParams fl = new FrameLayout.LayoutParams(textView1.getLayoutParams());
fl.gravity = Gravity.LEFT | Gravity.BOTTOM;
textView1.setLayoutParams(fl);
}
}
/layout/activity_view_layout_framelayoutdemo1.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
FrameLayout - 叠加布局控件(就是把控件按照定义的顺序,从后到前依次排列)
foreground - 前景图片(永远处于最前面)
foregroundGravity - 前景图片的显示位置
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="@drawable/img_sample_son"
android:foregroundGravity="center_horizontal|left">
<!--
默认 FrameLayout 中的子元素会按照定义的顺序,从后到前依次排列
elevation 是用于定义阴影大小的,其也可以用于定义 FrameLayout 中的子元素的权重,权重越大显示越靠前
-->
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@color/red"
android:elevation="100dp"/>
<TextView
android:layout_width="140dp"
android:layout_height="140dp"
android:background="@color/green"/>
<TextView
android:layout_width="120dp"
android:layout_height="120dp"
android:background="@color/blue"/>
<!--
android:layout_gravity - 设置当前元素相对于父的对齐方式(对于本例来说就是设置 TextView 相对于 FrameLayout 的对齐方式)
android:gravity - 设置当前元素的子相对于当前元素的对齐方式(对于本例来说就是设置 text 相对于 TextView 的对齐方式)
-->
<TextView
android:layout_width="120dp"
android:layout_height="120dp"
android:background="@color/orange"
android:layout_gravity="bottom|right"
android:gravity="center_horizontal|top"
android:text="webabcd"/>
<!--
用于演示如何在 java 中设置 gravity 和 layout_gravity
-->
<TextView
android:id="@+id/textView1"
android:layout_width="120dp"
android:layout_height="120dp"
android:background="@color/yellow"
android:text="webabcd"/>
</FrameLayout>