Android中的Fragment控件实现部分页面的切换
创作时间:
作者:
@小白创作中心
Android中的Fragment控件实现部分页面的切换
引用
CSDN
1.
https://m.blog.csdn.net/m0_74289031/article/details/139566887?spm=1001.2014.3001.5501
在Android开发中,Fragment是一种重要的UI组件,可以实现页面的动态切换和复用。本文将通过一个登录页面的例子,详细介绍如何使用Fragment实现页面切换。
在Android中,我们可以写两个页面,LoginActivity页面和RegisterActivity页面,然后把两个页面关联起来就可以实现登录和注册的切换了,但是这样的页面看起来不是很美观,那么,我们如何可以把页面做的更美观一点呢,在此,我们就可以通过Fragment来实现。
我们随便做一个登录页面来作为例子。由于我们注重于fragment的编写,所以我们的页面ui就写的潦草一点。
主页面布局(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity">
<RelativeLayout
android:id="@+id/rl_tab"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginStart="15dp"
android:layout_marginTop="36dp"
android:background="#E6E3E3">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="100dp">
<TextView
android:id="@+id/tv_no_pwd"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_marginLeft="400dp"
android:text="免密登录"
android:textColor="@drawable/selector_tab"
android:textSize="50dp" />
<TextView
android:id="@+id/tv_account"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_marginLeft="400dp"
android:layout_toRightOf="@id/tv_no_pwd"
android:text="密码登录"
android:textColor="@drawable/selector_tab"
android:textSize="50dp" />
</RelativeLayout>
</RelativeLayout>
<!--FrameLayout-->
<FrameLayout
android:id="@+id/fl_login"
android:layout_centerInParent="true"
android:layout_width="800dp"
android:layout_height="400dp"
android:layout_marginLeft="60dp"
android:layout_marginTop="350dp"
android:layout_marginRight="60dp" />
<Button
android:id="@+id/btnlogin"
android:layout_width="800dp"
android:layout_centerHorizontal="true"
android:layout_height="80dp"
android:layout_marginLeft="60dp"
android:layout_marginTop="800dp"
android:layout_marginRight="60dp"
android:backgroundTint="#44B6DC"
android:gravity="center"
android:text="@string/login"
android:textColor="#ffffff"
android:textSize="30sp" />
</RelativeLayout>
具体的ui设计可以根据自己的要求来写。
主页面逻辑(MainActivity.java)
package njitt.software.test;
import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.HashMap;
import njitt.software.test.fragment.LoginFragment;
import njitt.software.test.fragment.NopwdFragment;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private HashMap<String, Object> map;
private CheckBox cvCheckLogin;
private TextView registerUserAgreement;
private RelativeLayout rlMain;
private RelativeLayout rlBack;
private CardView cvAccountLogin;
private RelativeLayout rlLogin;
private TextView tvPhoneTakeIn;
private TextView tvRegister;
private TextView tv_no_pwd;
private TextView tv_account;
private FrameLayout flLogin;
private Button btnlogin;
private NopwdFragment nopwdFragment;
private LoginFragment loginFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
tv_no_pwd.performClick();
}
private void initView() {
flLogin = (FrameLayout) findViewById(R.id.fl_login);
rlMain = (RelativeLayout) findViewById(R.id.rl_main);
cvAccountLogin = (CardView) findViewById(R.id.cv_account_login);
rlLogin = (RelativeLayout) findViewById(R.id.rl_login);
flLogin = (FrameLayout) findViewById(R.id.fl_login);
btnlogin = (Button) findViewById(R.id.btnlogin);
flLogin = (FrameLayout) findViewById(R.id.fl_login);
tv_no_pwd = (TextView) findViewById(R.id.tv_no_pwd);
tv_account = (TextView)findViewById(R.id.tv_account);
tv_no_pwd.setOnClickListener(this);
tv_account.setOnClickListener(this);
}
private void setSelected() {
tv_no_pwd.setSelected(false);
tv_account.setSelected(false);
}
@Override
public void onClick(View view) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager
.beginTransaction();
hideAllFragment(transaction);
switch (view.getId()) {
case R.id.tv_no_pwd:
setSelected();
tv_no_pwd.setSelected(true);
tv_account.setSelected(false);
if (nopwdFragment == null) {
nopwdFragment = new NopwdFragment();
transaction.add(R.id.fl_login, nopwdFragment);
} else {
transaction.show(nopwdFragment);
}
break;
case R.id.tv_account:
setSelected();
tv_account.setSelected(true);
tv_no_pwd.setSelected(false);
if (loginFragment == null) {
loginFragment = new LoginFragment();
transaction.add(R.id.fl_login, loginFragment);
} else {
transaction.show(loginFragment);
}
break;
default:
break;
}
transaction.commit();
}
private void hideAllFragment(FragmentTransaction transaction) {
if (nopwdFragment != null) {
transaction.hide(nopwdFragment);
}
if (loginFragment != null) {
transaction.hide(loginFragment);
}
}
}
这是定义文字的默认选中为false。定义一个fragmentManager管理器。是否隐藏页面。写一个fragment包。在包里写两个fragment页面。
密码登录Fragment布局(fragment_login.xml)
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".fragment.LoginFragment">
<androidx.cardview.widget.CardView
android:layout_width="680dp"
android:layout_height="90dp"
>
<TextView
android:layout_width="54dp"
android:layout_height="37dp"
android:text="+86"
android:textSize="28dp"
android:layout_marginLeft="40dp"
android:layout_marginTop="27dp" />
<View
android:layout_width="2dp"
android:layout_height="50dp"
android:background="#ECEFF1"
android:layout_marginLeft="134dp"
android:layout_marginTop="20dp" />
<EditText
android:id="@+id/et_account"
android:layout_width="546dp"
android:layout_height="match_parent"
android:layout_marginLeft="174dp"
android:background="@null"
android:hint="请输入手机号码"
android:textSize="28dp"/>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="680dp"
android:layout_height="90dp"
android:layout_marginTop="130dp">
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="40dp"
android:background="@null"
android:hint="请输入密码"
android:textSize="28dp"
android:password="true"/>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/cv_check"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginTop="260dp"
>
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="37dp"
android:text="我已阅读并同意"
android:layout_marginTop="256dp"
android:layout_marginLeft="48dp"
android:textSize="28dp" />
<TextView
android:id="@+id/tv_user_secret"
android:layout_width="wrap_content"
android:layout_height="37dp"
android:text="《用户隐私政策》"
android:layout_marginTop="256dp"
android:textSize="28dp"
android:textColor="#1598C4"/>
</LinearLayout>
<TextView
android:id="@+id/tv_forget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="540dp"
android:text="忘记密码?"
android:textColor="#1598C4"
android:textSize="28dp"
android:onClick="to"
android:layout_marginTop="256dp" />
</FrameLayout>
因为我们只写fragment页面,所以我们就不写点击事件了。
免密登录Fragment布局(fragment_nopwd.xml)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment.NopwdFragment">
<androidx.cardview.widget.CardView
android:layout_width="680dp"
android:layout_height="90dp"
app:cardCornerRadius="12dp">
<TextView
android:layout_width="54dp"
android:layout_height="37dp"
android:text="+86"
android:textSize="28dp"
android:layout_marginLeft="40dp"
android:layout_marginTop="27dp" />
<View
android:layout_width="2dp"
android:layout_height="50dp"
android:background="#ECEFF1"
android:layout_marginLeft="134dp"
android:layout_marginTop="20dp" />
<EditText
android:id="@+id/et_phone_number"
android:layout_width="546dp"
android:layout_height="match_parent"
android:layout_marginLeft="174dp"
android:background="@null"
android:hint="请输入手机号码"
android:textSize="28dp"/>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="680dp"
android:layout_height="90dp"
app:cardCornerRadius="12dp"
android:layout_marginTop="130dp">
<EditText
android:id="@+id/et_verify"
android:layout_width="500dp"
android:layout_height="match_parent"
android:layout_marginLeft="40dp"
android:background="@null"
android:hint="请输入验证码"
android:textSize="28dp"/>
<TextView
android:id="@+id/tv_get_verification_code"
android:layout_width="140dp"
android:layout_height="37dp"
android:layout_marginLeft="500dp"
android:layout_marginTop="26dp"
android:text="获取验证码"
android:textSize="28dp"
android:textColor="#038BB9" />
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/cv_check"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginTop="260dp"
app:cardCornerRadius="8dp"
app:cardBackgroundColor="#1598C4"
>
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="37dp"
android:text="我已阅读并同意"
android:layout_marginTop="256dp"
android:layout_marginLeft="48dp"
android:textSize="28dp" />
<TextView
android:id="@+id/tv_user_secret"
android:layout_width="wrap_content"
android:layout_height="37dp"
android:text="《用户隐私政策》"
android:layout_marginTop="256dp"
android:textSize="28dp"
android:textColor="#1598C4"/>
</LinearLayout>
</FrameLayout>
这样,我们就完成了两个fragment页面的ui设计。我们来看一下效果。
这样,我们的fragment切换页面就完成了。
热门推荐
医生最喜欢做的合法副业!有些赚的比工资还高?
电动汽车驱动扭矩控制策略及Simulink建模方法详解
面对挫折的两个关键:分离能力和自我,保持成长信念
百度云盘如何清理内存
办公室灯光设计指南:从功能到美学的全方位考量
肺气虚寒性鼻炎吃什么中成药
茶室空间设计新趋势:传统与现代的完美融合
微积分在生活中的应用与思维启发:从捕鹿到瞬时速度的趣味探索
荨麻疹是什么造成的?全面解析荨麻疹的成因、类型、诊断与治疗
哈佛研究生申请全攻略:如何满足顶尖学府录取条件
基金投资中的风险调整收益
声卡音响故障排查指南:从硬件连接到专业维修
关于行政诉讼,你需要知道的法律知识
从“节日专属”到“日常悦己”——鲜花成为“卷”时代的精神解药
中年少女的幸福密码:8个生活特征,中3个以上证明你过得很好
100句绝美春日诗词,温柔又浪漫,最适合春天分享到朋友圈
大厨教您如何做一份完美的炒蛋
医保无自付如何合规报销?报销医保无自付有哪些规定?
如何合法地拿取被扣押的手机?
王者荣耀实名认证与健康系统:如何精准保护未成年人免受游戏沉迷?
全国爱肝日:脂肪肝发病率高达30%,运动比饮食更重要
去派出所拿手机还会被拘留么
“多了一扇窗户,就高出40万!”北京二手房涨价区域扩大,早卖房的业主后悔了
“先生大义”:一个词语背后的传统文化与现代价值
网络流量和流量监控与分析
复旦大学董晓丽研究员团队综述:路在何方之未来低温电池电解液
成达万高铁、渝厦高铁、隆黄铁路进度刷新
对人类构成威胁的动物
且行且珍“膝”!一文读懂“髌骨骨折”的诊断与治疗,超详细!
AI时代前瞻系列—从文本到图像:DALL-E与MidJourney的技术解读