안드로이드 개발
단일 활동 인터페이스 내의 작업
컨트롤 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 클래스 간의 통신을 구현하는 방법
데이터는 번들을 통해 저장되고, 데이터가 저장된 번들은 프래그먼트로 전달되고,
이후 프래그먼트는 전송된 데이터를 획득한다.