android中的Fragment控件实现部分页面的切换

在andorid中,我们可以写两个页面,LoginActivity页面和RegisterActivity页面,然后把两个页面关联起来就可以实现登录和注册的切换了,但是这样的页面看起来不是很美观,那么,我们如何可以把页面做的更美观一点呢,在此,我们就可以通过Fragment来实现。

我们随便做一个登录页面来作为例子

由于我们注重于fragment的编写,所以我们的页面ui就写的潦草一点。

在主页面写个登录页面的主程序。

activity_main.xml

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

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_login.xml

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_nopwd.xml

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设计。我们来看一下效果。

1

这样,我们的fragment切换页面就完成了。

相关推荐
雨白8 小时前
Jetpack系列(二):Lifecycle与LiveData结合,打造响应式UI
android·android jetpack
kk爱闹10 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python
每次的天空11 小时前
Android-自定义View的实战学习总结
android·学习·kotlin·音视频
恋猫de小郭12 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
断剑重铸之日13 小时前
Android自定义相机开发(类似OCR扫描相机)
android
随心最为安13 小时前
Android Library Maven 发布完整流程指南
android
岁月玲珑13 小时前
【使用Android Studio调试手机app时候手机老掉线问题】
android·ide·android studio
还鮟17 小时前
CTF Web的数组巧用
android
小蜜蜂嗡嗡18 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi0019 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体