实验一:类微信界面框架设计

170 阅读3分钟

1.实验目的:

即实验应完成的目标,如图

2.实验环境

Android studio4.0

gitee代码仓库(与as连接)

3.具体实验内容

(1)起始

在mainactivity.java中添加

requestWindowFeature(Window.FEATURE_NO_TITLE)

将初始界面清空

导入要用的图片

直接复制粘贴到drawable即可

对界面进行分析,容易看出这个界面可以大致分为三个部分,分别是上面的顶部文件,中间部分的文件和底部的文件,进行下面步骤

(2)顶部设计

在layout下创建top.xml,放入一个textview,修改文字大小,颜色及基本布局,为了让该文字在框中居中显示,需要先将orientation设置为vertical,然后在Code界面添加语句android:layout_gravity=“center_horizontal”之后WeChat就会在页面的正中上方显示,在code中添加android:textColor="#ffffff"将其设计成白色字体,添加android:background="#000000"以将背景设为黑色效果

<?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="65dp"
    android:gravity="center"
    android:background="#000000"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/app_name"
        android:textColor="#ffffff"
        android:textSize="20sp" />
</LinearLayout>

(3)底部设计

在layout下创建bottom.xml

放入一个linearlayout,然后放入imagebutton,导入对应图片,然后在下方空白处放一个textview。之后修改文字大小,颜色及基本布局,将textview复制粘贴4份后修改对应的图片,名字,code添加

android:layout_width=“0dp”

android:gravity=“center”

android:layout_weight=“1”

让其平铺并达成效果如图

(4)中间设计

主要是完成居中文本显示,故创建四个新的xml,修改文字大小,及基本布局,效果如图

写了一个之后其他的三个复制粘贴后轻微的修改即可。

<?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:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="这是微信聊天界面"
        android:textSize="30sp" />
</LinearLayout>

(4)编写****activity_main.xml文件

完成上中下统一

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include layout="@layout/top"/>

        <FrameLayout
            android:id="@+id/id_content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">

        </FrameLayout>

        <include layout="@layout/bottom"/>

    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

(5)创建Fragment

为四个xml配四个Fragment,将他们压缩到相应的容器中去,做一个子窗口

即在其return中写入要输出的界面文件名,四个文件是相似的。

return inflater.inflate(R.layout.tab02, container, false);

(6)编写主程序

要达成的效果:点击对应的要有相应,且响应的是正确的界面,图标的颜色会因点击发生变化,之前生成的界面也会在下一个点击之后隐藏起来,避免生成的界面发生重叠现象。

然后我们就可以就开始修改

package com.example.mywechat;

import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.LinearLayout;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

public class MainActivity extends AppCompatActivity  implements View.OnClickListener {
#建立全活动的点击监听
    private  LinearLayout mTabWeixin;
    private  LinearLayout mTabFrd;
    private  LinearLayout mTabAddress;
    private  LinearLayout mTabSetting;

    private  ImageButton mImgWeixin;
    private  ImageButton mImgFrd;
    private  ImageButton mImgAddress;
    private  ImageButton mImgSetting;

    private Fragment mTab01 = new weixinFragment();
    private Fragment mTab02 = new frdFragment();
    private Fragment mTab03 = new contactFragment();
    private Fragment mTab04 = new settingFragment();

    private FragmentManager fm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        initView();
        initFragment();
        initEvent();
        selectfragment(0);

    }

#将4个页面放到Framelayout中
    private void initFragment(){
        fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.add(R.id.id_content,mTab01);
        transaction.add(R.id.id_content,mTab02);
        transaction.add(R.id.id_content,mTab03);
        transaction.add(R.id.id_content,mTab04);
        transaction.commit();
    }

将button与图片联系起来,点击图片完成监听
    private  void initView(){
        mTabWeixin=(LinearLayout) findViewById(R.id.id_tab_weixin);
        mTabFrd=(LinearLayout) findViewById(R.id.id_tab_frd);
        mTabAddress=(LinearLayout) findViewById(R.id.id_tab_contact);
        mTabSetting=(LinearLayout) findViewById(R.id.id_tab_settings);

        mImgWeixin=(ImageButton)findViewById(R.id.id_tab_weixin_img);
        mImgFrd=(ImageButton)findViewById(R.id.id_tab_frd_img);
        mImgAddress=(ImageButton)findViewById(R.id.id_tab_contact_img);
        mImgSetting=(ImageButton)findViewById(R.id.id_tab_settings_img);
    }

#控制图片颜色的变换,点击对应图标时,图标变色
    private  void  selectfragment(int i){
        FragmentTransaction transaction=fm.beginTransaction();
        hidefragment(transaction);
        switch (i){
            case 0:
                transaction.show(mTab01);
                mImgWeixin.setImageResource(R.drawable.tab_weixin_pressed);
                break;
            case 1:
                transaction.show(mTab02);
                mImgFrd.setImageResource(R.drawable.tab_find_frd_pressed);
                break;
            case 2:
                transaction.show(mTab03);
                mImgAddress.setImageResource(R.drawable.tab_address_pressed);
                break;
            case 3:
                transaction.show(mTab04);
                mImgSetting.setImageResource(R.drawable.tab_settings_pressed);
                break;
            default:
                break;
        }
        transaction.commit();
    }

#点击对应的button之后再把对应的页面显示出来,所以需要一个hide功能的函数
#四个页面都在fragment中,如果不隐藏会造成显示内容的重叠,
#因此让其在显示一个界面之前将所有的界面都hide,
    private void hidefragment(FragmentTransaction transaction) {
        transaction.hide(mTab01);
        transaction.hide(mTab02);
        transaction.hide(mTab03);
        transaction.hide(mTab04);
    }

    private  void initEvent(){
        mTabWeixin.setOnClickListener(this);
        mTabFrd.setOnClickListener(this);
        mTabAddress.setOnClickListener(this);
        mTabSetting.setOnClickListener(this);
    }

#还需要一个函数来调用灰色的图片,以让点击过后的图片回复原色,这个函数的功能就是调出指定图片的位置
    @Override
    public void onClick(View v) {

        resetimg();

        switch (v.getId()) {
            case R.id.id_tab_weixin:
                selectfragment(0);
                break;
            case R.id.id_tab_frd:
                selectfragment(1);
                break;
            case R.id.id_tab_contact:
                selectfragment(2);
                break;
            case R.id.id_tab_settings:
                selectfragment(3);
                break;
            default:
                break;
        }

    }

    public  void  resetimg(){
        mImgWeixin.setImageResource(R.drawable.tab_weixin_normal);
        mImgFrd.setImageResource(R.drawable.tab_find_frd_normal);
        mImgAddress.setImageResource(R.drawable.tab_address_normal);
        mImgSetting.setImageResource(R.drawable.tab_settings_normal);

    }
}

主要步骤结束

代码仓库gitee.com/shezhenlong…