一手遮天 Android - view(布局类): FrameLayout 叠加布局

项目地址 https://github.com/webabcd/AndroidDemo
作者 webabcd

一手遮天 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>

项目地址 https://github.com/webabcd/AndroidDemo
作者 webabcd

posted @ 2021-05-31 12:33  webabcd  阅读(305)  评论(0编辑  收藏  举报