Android 개발 학습은 지속적으로 업데이트됩니다.

안드로이드 개발

단일 활동 인터페이스 내의 작업

컨트롤 1 TextView 컨트롤은

프런트 엔드의 html+css와 약간 비슷합니다.

Control 2Button 컨트롤 사용

1 우선 안드로이드의 키 형식에 대해

배경이나 기본 버튼 형식, 누른 후의 버튼 형식 등 버튼의
라벨을 Activity_main.xml 파일에 지정합니다.

<Button
        android:id="@+id/btn"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:background="@drawable/btn_selector"
        android:text="我是一个按钮"
        />

배경색의 경우 색상을 지정하거나 drowable 파일 아래에 선택기를 생성하고 버튼의 배경 이미지를 지정하는 등의 작업을 수행할 수 있습니다.
여기에 이미지 설명을 삽입하세요

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!--如果被按下的画,就显示这个图片-->
    <item android:drawable="@drawable/ic_baseline_elderly_24" android:state_pressed="true"/>
    <!--默认的就是显示这个图片-->
    <item android:drawable="@drawable/ic_baseline_emoji_people_24"/>
</selector>
2 버튼 모니터링 이벤트 바인딩

먼저 버튼 라벨에 번호를 매긴 다음 활동 클래스에서 버튼을 가져오고 버튼을 바인딩하여 이벤트를 들을 수 있습니다.

protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取事件的按键id
        Button btn = findViewById(R.id.btn);
        //对这个按键进行绑定,如单击事件
        btn.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    

            }
        });
        //绑定一个长按的一个监听事件
        btn.setOnLongClickListener(new View.OnLongClickListener() {
    
    
            @Override
            public boolean onLongClick(View v) {
    
    
                return false;
            }
        });
        //绑定一个触摸事件
        btn.setOnTouchListener(new View.OnTouchListener() {
    
    
            @Override
            public boolean onTouch(View v, MotionEvent event) {
    
    
                return false;
            }
        });

    }

두 번째 방법에서는 버튼 태그에 바인딩 onclick 이벤트를 직접 지정한 다음 기본 클래스에 동일한 이름의 메서드를 추가할 수 있습니다.

여기에 이미지 설명을 삽입하세요
여기에 이미지 설명을 삽입하세요

3 EditText 텍스트 상자 설정 제어

웹 양식에 로그인할 때의 텍스트 속성과 유사하게 일부 데이터를 입력할 수 있으며 사용되는 레이블은
"EditText" 입니다.
여기에 이미지 설명을 삽입하세요

컨트롤 4 이미지뷰

여기에 이미지 설명을 삽입하세요

가장 중요한 것은 사진의 확대/축소 방식인데
여기에 이미지 설명을 삽입하세요
, 사진의 크기가 이미지뷰의 크기와 일치하지 않는 경우가 많은데, 사진이 찌그러지거나 변형되는 것을 방지하기 위해 다음과 같은 자동 채우기 기능을 사용할 수 있는데, 사진 크기에 따라 해당 사진 프레임과 일치합니다.
여기에 이미지 설명을 삽입하세요

컨트롤 5ProgressBar 사용

이 컨트롤은 진행률, 새로 고쳐진 작은 원 또는 진행률 표시줄을 표시합니다. 다운로드 또는 페이지 로딩 과정을 표시할 수 있습니다.
여기에 이미지 설명을 삽입하세요
1 작은 원에 로드

<!--显示进度,此时是一个小圈圈一直转-->
    <ProgressBar
        android:id="@+id/pb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <!--来一个按钮来控制加载显示与消失-->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示或者隐形加载界面"
        android:onClick="pb1Change"/>

기본 시작 클래스에 리스너 이벤트 추가

public class MainActivity extends AppCompatActivity {
    
    

    private ProgressBar pb1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pb1 = findViewById(R.id.pb1);
    }




    public void jumpToAnother(View view) {
    
    
        startActivity(new Intent(this,MainActivity2.class));
    }

    //按键来控制进度条的显示和隐藏
    public void pb1Change(View view) {
    
    
        //如果此时是隐藏的,就显示出来
        if(pb1.getVisibility()==View.GONE){
    
    
            pb1.setVisibility(View.VISIBLE);
        }else{
    
    
            pb1.setVisibility(View.GONE);
        }
    }
}

2 진행 표시줄 형태로 로딩

스타일=“?android:attr/progressBarStyleHorizontal”

<!--以进度调的方式来显示-->
    <ProgressBar
        android:id="@+id/pb2"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:layout_width="300dp"
        android:layout_height="wrap_content"/>
<!--模拟进度调在增加-->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="每点击一下就增加10"
        android:onClick="pb2Add"/>

기본 시작 클래스에 로딩 프로세스 할당

/*模拟下载过程,每点击一下就增加10个单位*/
    public void pb2Add(View view) {
    
    
        int progress = pb2.getProgress();
        progress+=10;
        pb2.setProgress(progress);

    }

3 진행률 표시줄에 진행 상황이 부정확하게 표시되어 매번 작은 원처럼 로드됩니다.

<!--像小圈圈那样加载,但是不精确的显示-->
    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:max="100"
        android:indeterminate="true"/>

컨트롤 6 알림 알림

여기에 이미지 설명을 삽입하세요
여기에 이미지 설명을 삽입하세요다음은 알림 내용에 대한 몇 가지 형식을 설정하는 것입니다.
여기에 이미지 설명을 삽입하세요
1 먼저 알림 보내기 또는 취소 이벤트를 바인딩하는 두 개의 버튼을 만듭니다.

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送通知"
        android:background="@color/purple_200"
        android:onClick="sendNote"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="取消发送通知"
        android:textColor="@color/white"
        android:background="@color/black"
        android:onClick="cancelNote"/>

여기에 이미지 설명을 삽입하세요2 메인 클래스에서 먼저 알림 관리를 받은 후 알림을 받습니다.

여기에 이미지 설명을 삽입하세요

public class MainActivity extends AppCompatActivity {
    
    

    
    private NotificationManager manager;
    private Notification notification;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        

        //第一步先获取到通知管理对象
         manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

         //第二步,通过builder来链式的创建notification对象
        NotificationChannel channel = null;
        //是Android8版本之后推出的因此需要进行版本的判断
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
    
    
            //第一个参数就是id,第二个参数是通知的名字,可以随便设置,第三个参数是通知的等级,有很多的等级,具体可以参照本小节第二张图。
            channel = new NotificationChannel("hai", "测试通知", NotificationManager.IMPORTANCE_HIGH);
            manager.createNotificationChannel(channel);
        }

        //新建一个activity来点击通知时进行跳转到指定的界面或者app中
        Intent intent = new Intent(this, NotificationActivity.class);
        PendingIntent pendingIntend = PendingIntent.getActivity(this, 0, intent, 0);
//对通知的内容或者形式进行修饰
        notification = new NotificationCompat.Builder(this, "hai")
                .setContentTitle("正规通知(通知的姓名)")
                .setContentText("通知的内容,你的银行卡收入100元")
                //这里是通知的一个小图标的设定,不能是rgb图片
                .setSmallIcon(R.drawable.ic_baseline_person_24)
                //设置大图标的图片,但是因为是一个bitmap格式,所以需要将图片转成bitmap格式
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.yueyue))
                //设置小图标的颜色,
                .setColor(Color.parseColor("#ff0000"))
                //这个参数是指定点击到通知之后,跳转的界面或者app中,传入的是一个PendingIntent对象
                .setContentIntent(pendingIntend)
                //这个参数是当点击通知之后,就会将通知销毁
                .setAutoCancel(true)
                .build();

    }

    //发送通知的按钮
    public void sendNote(View view) {
    
    
        manager.notify(1,notification);
    }
    //点击次按钮可以将通知给取消掉,和setAutoCancel作用相同
    public void cancelNote(View view) {
    
    
        manager.cancel(1);
    }

그런 다음 점프 후 활동을 생성하고 목록에 등록하는 것입니다.
그런 다음 다음 인터페이스인 알림 보내기 버튼을 클릭합니다.

여기에 이미지 설명을 삽입하세요

Control 7Toolbar 페이지 상단의 탐색 모음

공통 속성 설정
여기에 이미지 설명을 삽입하세요

<androidx.appcompat.widget.Toolbar
        android:id="@+id/tb1"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/purple_200"
        app:navigationIcon="@drawable/ic_baseline_west_24"

        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="微信"
            android:layout_gravity="center"
            android:gravity="center"
            android:textSize="30dp"
            android:textColor="@color/white"

            />

    </androidx.appcompat.widget.Toolbar>

그런 다음 메인 클래스로 이동하여 탐색 모음에서 뒤로 및 앞으로 이벤트를 바인딩하고 작은 아이콘을 누르면 그에 따라 응답합니다.
여기에 이미지 설명을 삽입하세요

//先获取到标签,然后再对导航栏的监听事件进行绑定
Toolbar tb1 = findViewById(R.id.tb1);

        tb1.setNavigationOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                System.out.println("返回按钮被单机了");
            }
        });

8AlertDialog 알림 대화 상자 제어

일반적으로 알림은 상단에 표시되며 특정 내용을 보려면 아래로 당겨야 하며 이 AlertDialog 대화 상자는 잠금 화면 이후에 메시지가 나온 후의 인터페이스와 유사하게 알림 내용을 화면에 표시할 수 있습니다. AlertDialog 단순 속성 및 사용
여기에 이미지 설명을 삽입하세요
알림 상자에 표시할 레이아웃 정의

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <ImageView
        android:layout_width="300px"
        android:layout_height="200px"
        android:src="@drawable/yueyue" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="天气很好,你那边边天气怎么样啊"
        android:textSize="20dp"
        android:textColor="@color/black"
        />
</LinearLayout>
public void alertNode(View view) {
    
    
        //先获取到builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        //准备自定义一个布局,来给view作为参数,自定义一个布局
        View view1 = getLayoutInflater().inflate(R.layout.notification_mian, null);
        //然后通过builder进行链式的设计
        builder.setIcon(R.mipmap.ic_launcher)
                //设置通知对话框的主题
                .setTitle("通知对话框")
                //通知的内容
                .setMessage("今天是5月16号,你那边天气怎么样啊?")

                .setPositiveButton("确定按钮", new DialogInterface.OnClickListener() {
    
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
    
    
                        System.out.println("确定按钮被点击");
                    }
                })
                .setPositiveButton("取消按钮", new DialogInterface.OnClickListener() {
    
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
    
    
                        System.out.println("取消按钮被点击");
                    }
                })
                .setNeutralButton("中间按钮", new DialogInterface.OnClickListener() {
    
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
    
    
                        System.out.println("中间按钮被点击");
                    }
                })
                //传入自定义的布局
                .setView(view1)
                .create()
                .show();
    }

여기에 이미지 설명을 삽입하세요

8PopupWindow 제어 버튼을 클릭한 후 다른 활동으로 이동하지 않고 이 인터페이스에 창을 표시하며 해당 창은 새로운 레이아웃으로 간주될 수 있습니다.

사용 및 속성 소개
여기에 이미지 설명을 삽입하세요먼저 사용할 창에 대한 새 레이아웃을 만듭니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/ic_launcher"
    android:orientation="vertical">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/purple_200"

        android:text="按钮1" />
    <Button
        android:id="@+id/button2"
        android:layout_marginTop="20px"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/purple_200"
        android:text="按钮2" />
</LinearLayout>

여기에 이미지 설명을 삽입하세요

페이지에 버튼을 생성하고 버튼에 대한 청취 이벤트를 생성합니다. 버튼을 클릭하면 창이 표시됩니다.

public void showWindow(View view) {
    
    
        //获取到窗口的布局,作为对象传入到窗口中
        View windowView = getLayoutInflater().inflate(R.layout.window_view, null);
        //获取到窗口内部的按钮,并且为其创建监听事件
        Button bt1 = windowView.findViewById(R.id.button1);
        Button bt2 = windowView.findViewById(R.id.button2);
        
        //设置窗口内的布局和窗口的大小,最后一个参数是当点击空白处时,会退出弹出的window
        PopupWindow window = new PopupWindow(windowView, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);
        //k而已设置窗口的背景图
        window.setBackgroundDrawable(getResources().getDrawable(R.drawable.yueyue));
        //指定展示窗口的位置,显示在按钮的下方,或者其他的构造方法进行窗口的偏移
        window.showAsDropDown(view);
        //创建监听事件
        bt1.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                System.out.println("按钮1被点击");
                //当点击后,让其退出,可以调用dismiss方法来退出窗口
                window.dismiss();
                
            }
        });
        bt1.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                System.out.println("按钮2被点击");
                window.dismiss();
            }
        });

    }

공들여 나열한 것

기본 컨트롤을 이해한 후에는 페이지에서 요소의 배치와 형태를 지정하는 레이아웃을 이해해야 합니다.

레이아웃 1_LinearLayout

기본 기능
여기에 이미지 설명을 삽입하세요
여기에 이미지 설명을 삽입하세요

레이아웃 2 - RelativeLayout

주요 기능은 추가된 모듈의 위치를 ​​지정하는 것으로, 지정하지 않을 경우 기본적으로 왼쪽 상단에 위치하게 됩니다.
여기에 이미지 설명을 삽입하세요

여기에 이미지 설명을 삽입하세요여기에 이미지 설명을 삽입하세요
여기에 이미지 설명을 삽입하세요

레이아웃 3_FrameLayout

각각의 새 레이아웃은 이전 레이아웃 앞에 새 레이아웃을 배치합니다.
여기에 이미지 설명을 삽입하세요여기에 이미지 설명을 삽입하세요

4——TableLayout 양식 표시

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:collapseColumns="1"
    >
    <TableRow >
        <Button
            android:id="@+id/button01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮1" 
        ></Button>
        <Button
            android:id="@+id/button02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮2"      
        ></Button>
        <!-- android:text="按钮2" --> 
        <Button
            android:id="@+id/button03"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮3"      
        ></Button>
    </TableRow>

    <TableRow >
        <Button
            android:id="@+id/button04"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮4"      
        ></Button>
        <Button
            android:id="@+id/button05"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮5"      
        ></Button>
        <Button
            android:id="@+id/button06"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮6"      
        ></Button>
    </TableRow>

    <TableRow >
        <Button
            android:id="@+id/button07"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮7"      
        ></Button>
        <Button
            android:id="@+id/button08"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮8"      
        ></Button>
        <Button
            android:id="@+id/button09"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮9"      
        ></Button>
    </TableRow>    
</TableLayout>

GridLayout은 위의 표와 동일하지만 더 유연합니다.

여기에 이미지 설명을 삽입하세요

활동 간 이동

활동이 페이지라는 것을 일시적으로 이해하지만 여러 활동 페이지 간의 상호 점프를 구현하는 방법이 문제입니다.
1 먼저 액티비티 인터페이스를 생성합니다. 즉, 새 클래스를 생성하고 AppCompatActivity를 상속해야 합니다.

public class MainActivity2 extends AppCompatActivity {
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        //重写父类的方法
        super.onCreate(savedInstanceState);
    }
}

2 메인 클래스를 생성한 후 이 클래스에 대한 레이아웃, 즉 현재 인터페이스에 표시해야 하는 콘텐츠를 생성해야 합니다. 3 레이아웃을
여기에 이미지 설명을 삽입하세요생성한 후 메인 클래스에 레이아웃을 도입해야 합니다.

public class MainActivity2 extends AppCompatActivity {
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        //重写父类的方法
        super.onCreate(savedInstanceState);
        //引入布局
        setContentView(R.layout.activity_main2);
    }
}

4 새 액티비티를 생성한 후에는 AndroidManifest.xml이라는 목록에 구성 요소를 등록해야 합니다.
여기에 이미지 설명을 삽입하세요5 첫 번째 인터페이스에서 버튼을 생성하고 청취 이벤트를 버튼에 바인딩하고 클릭 시 두 번째 대상 인터페이스로 이동합니다.

<Button
        android:id="@+id/btn"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:background="@color/white"
        android:text="点我跳转到第二个activity"
        android:onClick="jumpToAnother"
        />

6메인 시작 클래스에서 청취 이벤트 생성

public void jumpToAnother(View view) {
    
    
//指定要跳转的界面
        startActivity(new Intent(this,MainActivity2.class));
    }

애니메이션: 프레임별 애니메이션, 트윈 애니메이션, 속성 애니메이션의 세 가지 유형이 있습니다.

프레임별 애니메이션은 컬렉션에 사진 그룹을 추가하는 데 사용되므로 사진을 빠르게 전환하여 애니메이션 효과를 얻을 수 있습니다.
여기에 이미지 설명을 삽입하세요
그런 다음 전체 선택기를 직접 그림으로 간주할 수 있으며 페이지에 배경 그림으로 직접 추가하여 동적 효과를 얻을 수 있습니다. 사용 시 선택기를 그림으로 사용하려면relativeLayout 태그를 사용해야 합니다. 그런 다음 메인 클래스에서 시작합니다.
여기에 이미지 설명을 삽입하세요

그런 다음 기본 시작 클래스에서 시작하세요.
여기에 이미지 설명을 삽입하세요

트윈 애니메이션: 구성 파일에 초기값과 종료값 및 변경 시간을 설정합니다.

Android는 자동으로 애니메이션을 완성합니다. 알파 투명도, 회전 회전, 크기 확대/축소 번역 번역 등 4가지 주요 속성이 있습니다. 사용하려면 먼저
해당 xml 파일을 만든 다음 기본 메서드에서 가져옵니다.
여기에 이미지 설명을 삽입하세요

첫 번째 유형의 알파 태그는 투명도 변경을 통해 동적 효과를 표시합니다.

여기에 이미지 설명을 삽입하세요

두 번째 유형의 회전 태그는 회전을 통해 동적 효과를 얻습니다.

여기에 이미지 설명을 삽입하세요

세 번째 유형의 scale 태그는 이미지의 크기를 조정하여 동적 효과를 얻습니다.

여기에 이미지 설명을 삽입하세요

네 번째 유형의 번역 태그는 번역을 통해 역동적인 효과를 얻습니다.

여기에 이미지 설명을 삽입하세요
기본 시작 클래스에서 애니메이션이 사용되는 방법. 먼저 청취 이벤트를 대상 사진에 바인딩하고 청취 이벤트를 사용하여 애니메이션을 시작합니다.

여기에 이미지 설명을 삽입하세요

3 속성 애니메이션: 메인 클래스에서 일부 속성 매개변수를 설정하여 표시 프로세스를 조정합니다.

여기에 이미지 설명을 삽입하세요
생성된 objectAnimator 객체에 대한 이벤트 모니터링 방법도 있으며, 동시에 애니메이션에 리스너를 바인딩하고 애니메이션 시작이나 종료 등의 이벤트가 발생할 때 어떤 일이 발생하는지 지정할 수 있습니다.
여기에 이미지 설명을 삽입하세요

ViewPage는 왼쪽과 오른쪽으로 슬라이딩하여 다양한 레이아웃 레이아웃 간을 전환합니다.

1 먼저 다른 레이아웃을 준비한 다음 활동 구성 파일의 ViewPage를 사용하여 다른 viewPage를 추가해야 함을 현재 인터페이스에 알립니다.

<androidx.viewpager.widget.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

2 메인 클래스의 모든 레이아웃 레이아웃을 가져와 컬렉션에 넣습니다.

LayoutInflater inflater = getLayoutInflater().from(this);
        View view1 = inflater.inflate(R.layout.layout1, null);
        View view2 = inflater.inflate(R.layout.layout2, null);
        View view3 = inflater.inflate(R.layout.layout3, null);
        ArrayList<View> view = new ArrayList<>();
        view.add(view1);
        view.add(view2);
        view.add(view3);
        MyAdapter myAdapter = new MyAdapter(view);

3 생성된 레이아웃을 전달하려면 PagerAdpater를 사용해야 합니다. 레이아웃이 2개 이상이므로 생성자로 컬렉션을 생성하여 레이아웃을 전달해야 합니다. PagerAdapter를 상속할 때 메서드를 다시 작성하고 다른 항목을 추가해야 합니다. 방법은 아래 그림과 같습니다.
여기에 이미지 설명을 삽입하세요

public class MyAdapter extends PagerAdapter {
    
    
    private List<View> list;
    public MyAdapter(List<View> list){
    
    
        this.list=list;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
    
    
        container.addView(list.get(position),0);
        return list.get(position);
    }

    @Override
    public int getCount() {
    
    
        return list.size();
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    
    
        return view==object;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
    
    
        container.removeView(list.get(position));
    }
}

드디어 둘을 묶는다

ViewPager vp = findViewById(R.id.vp);
        vp.setAdapter(myAdapter);

마지막으로 설정된 어댑터를 표시용 ViewPage로 설정합니다.

여기에 이미지 설명을 삽입하세요위 작업을 완료한 후 좌우로 슬라이딩하는 효과를 얻을 수 있습니다.

조각 사용

프래그먼트는 자체 수명 주기를 가질 수 있는 작은 활동으로 직관적으로 이해될 수 있으며, 프래그먼트는 표시를 위해 활동에 배치될 수 있으며 활동과 동일한 작업을 수행할 수 있습니다.

1 프래그먼트에 표시할 레이아웃을 만듭니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textv"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:textColor="@color/purple_200"
        android:text="今天是什么日子"
        android:layout_gravity="center"
        android:gravity="center"/>
    <Button
        android:id="@+id/lovewho"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="点我显示日期"/>

</LinearLayout>
2 프래그먼트 레이아웃을 생성한 후 프래그먼트 클래스를 생성하여 레이아웃의 일부 요소를 가져오고 레이아웃의 요소를 수정하고 가져옵니다.
public class BlankFragment1 extends Fragment {
    
    
    private View root;
    private TextView textView;
    private Button btn;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
    
        // Inflate the layout for this fragment
        if(root==null){
    
    
            root = inflater.inflate(R.layout.fragment1, container, false);

        }
        textView = root.findViewById(R.id.textv);

        btn =root.findViewById(R.id.lovewho);
        btn.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                textView.setText("2022年5月20日,是和爱的人在一起的日子");
            }
        });
        return root;
    }
}
3 표시해야 할 대상 액티비티에 프래그먼트 태그를 추가하고, 이 프래그먼트에 해당하는 클래스가 표시를 완료할 수 있는 경우에만
<fragment android:name="com.njupt.helloandroid.BlankFragment1"
        android:id="@+id/frag1"
        android:layout_width="match_parent"
        android:layout_height="80dp"/>

위의 내용은 조각의 정적 표시일 뿐입니다. 여러 조각 간에 전환하려는 경우

조각을 동적으로 전환해야 하며 단계는 다음과 같습니다.

먼저 표시하려는 활동에서 조각 레이아웃을 만듭니다. 프래그먼트 간을 전환해야 하기 때문에 더 많은 프래그먼트를 준비해야 하고, 표시해야 할 프래그먼트를 넣을 수 있도록 메인 액티비티에 공간을 열어 다음과 같이 메인 액티비티에 추가해야 합니다.

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@color/purple_500"
        android:id="@+id/fragmentch">//这个id就是在主程序中获取并且将其替换的标志
    </FrameLayout>

두 번째 부분은 메인 클래스에서 버튼의 모니터링 이벤트를 얻는 것인데, 버튼이 전환되면 다른 조각이 나타날 수 있습니다.

//准备对动态的fragment进行操作
        Button chang1 = findViewById(R.id.chang1);
        chang1.setOnClickListener(this);
        Button chang2 = findViewById(R.id.chang2);
        chang2.setOnClickListener(this);

        //准备两个fragment进行切换
    }
    @Override
    public void onClick(View v) {
    
    
        switch(v.getId()){
    
    
            case R.id.chang1:
                changeFragment(new BlankFragment());
                //传入不同的准备的fragment类即可关联到不同的fragment页面
            case R.id.chang2:
                changeFragment(new BlankFragment2());

        }

    }
    //将fragment看成一个事务
    public void changeFragment(Fragment fragment){
    
    
    //有一个fragment事务来控制事务的替换,删除和添加的操作
        FragmentManager fragManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragManager.beginTransaction();
        fragmentTransaction.replace(R.id.fragmentch,fragment);
        fragmentTransaction.addToBackStack(null);//这里是为了在返回时可以返回之前的那个fragment,
        fragmentTransaction.commit();

    }
Activity와 Fragment==Bundle 클래스 간의 통신을 구현하는 방법

데이터는 번들을 통해 저장되고, 데이터가 저장된 번들은 프래그먼트로 전달되고,
여기에 이미지 설명을 삽입하세요
여기에 이미지 설명을 삽입하세요
이후 프래그먼트는 전송된 데이터를 획득한다.
여기에 이미지 설명을 삽입하세요

조각 수명주기

여기에 이미지 설명을 삽입하세요

추천

출처blog.csdn.net/m0_56184347/article/details/124780828