Android学习--03(UI布局+线性布局+相对布局+帧布局+智能计算器)

1布局

1.1 简介

布局是一种可以放置很多控件的容器,它可以按照一定规律调整内部控件的位置,从而编写出精美的界面
1.LinearLayout布局:又称线性布局,它将所包含的控件在线性方向上依次排列,有垂直方向和水平方向两种。
2.RelativeLayout布局:又称相对布局,它可以通过相对定位的方式让控件出现在布局的任何位置。
3.FrameLayout布局:又称帧布局,这种布局没有方便的定位方式,所有的控件都会默认摆放在布局的左上角。

1. 2 LinearLayout布局(线性布局)

1.2.1重要属性

属性 作用 示例
android:orientation 指定控件排列方向 vertical:垂直方向 horizontal:水平方向
android:layout_gravity 指定控件在布局中的对齐方式 top:顶端对齐,bottom:底端对齐,center_vertical:垂直居中,left:左对齐,right:左对齐,center_horizontal:水平居中
android:layout_weight 允许控件使用比例方式指定控件的大小 参考案例

android:orientation用法
在这里插入图片描述在这里插入图片描述如图所示,布局方式为水平分布时,改变控件的垂直属性为top顶 ,bottom底,center_vertical垂直居中
android:layout_gravity用法
在这里插入图片描述如图所示,布局方式为垂直分布时,改变控件的垂直属性为left左 ,right右,center_horizontal水平居中
在这里插入图片描述
在这里插入图片描述android:layout_weight用法
在这里插入图片描述

1.2.2 作业实操

注意:线性布局的嵌套

1.2.2.1 效果演示

在这里插入图片描述

1.2.2.2 布局源码

//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="用户登录"
        android:layout_gravity="center"
        android:textSize="35dp"
        android:layout_marginTop="100dp"
        android:textColor="#000000"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="100dp">

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:layout_weight="1"

            android:text="用户名:"/>
        <EditText
            android:id="@+id/editText_1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="4"
            android:hint="请输入用户名"
            android:textSize="20dp"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="20dp">

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="20dp"
            android:text="密码:"/>
        <EditText
            android:id="@+id/editText_2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="4"
            android:hint="请输入密码"
            android:textSize="20dp"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="20dp"
        android:layout_gravity="right">
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="记住密码"
            android:textSize="15dp"
            android:layout_gravity="right"
            />


    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="20dp">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="20dp"
            android:text="取消"/>

        <Button
            android:id="@+id/button_2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="20dp"
            android:text="登陆"/>

    </LinearLayout>

</LinearLayout>


1.3RelativeLayout布局(相对布局)

  • 相对布局有两种方式:
    1.控件相对于父容器进行定位
    2.控件相对于控件进行定位

1.3.1 重要属性

属性 作用
android:layout_centerInParent=“true” 相对于父容器位置居中
android:layout_alignParentLeft=“true” 相对于父容器居左
android:layout_alignParentTop=“true” 相对于父容器居上
android:layout_alignParentRight=“true” 相对于父容器居右
android:layout_alignParentBottom=“true” 相对于父容器居下
属性 作用
android:layout_above="@+id/button_0" 相对于控件button_0的上方
android:layout_toLeftOf="@+id/button_0" 相对于控件button_0的左方
android:layout_toRightOf="@+id/button_0" 相对于控件button_0的右方
android:layout_below="@+id/button_0" 相对于控件button_0的下方
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
android:layout_alignLeft 本元素的右边缘和某元素的的左边缘对齐
android:layout_alignTop 本元素的右边缘和某元素的的上边缘对齐
android:layout_alignBottom 本元素的右边缘和某元素的的下边缘对齐
  • 相对于父容器
    在这里插入图片描述在这里插入图片描述
  • 相对于控件
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

1.3.2 作业实操

1.3.2.1 效果演示

在这里插入图片描述

1.3.2.2布局源码

//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">
    <Button
        android:id="@+id/button_0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"

        android:textSize="20dp"
        android:text="按钮0"/>
        <Button
            android:id="@+id/button_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:text="按钮1"
            android:layout_above="@+id/button_0"
            android:layout_toLeftOf="@+id/button_0"/>

        <Button
            android:id="@+id/button_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/button_0"
            android:layout_toRightOf="@+id/button_0"
            android:textSize="20dp"
            android:text="按钮2"/>
    <Button
        android:id="@+id/button_3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button_0"
        android:layout_toLeftOf="@+id/button_0"
        android:textSize="20dp"
        android:text="按钮2"/>
    <Button
        android:id="@+id/button_4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/button_0"
        android:layout_below="@+id/button_0"
        android:textSize="20dp"
        android:text="按钮2"/>
</RelativeLayout>

1.4FrameLayout布局(帧布局)

帧布局默认控件位置在左上角,控件先后顺序会影响覆盖关系,后创建的总在上面
在这里插入图片描述在这里插入图片描述

1.4.1 常用属性

属性 作用
android:layout_gravity 决定了一个控件在他的父容器当中的排列方式
android:layout_aliParentLeft 在父容器当中的左侧
android:layout_alignParentRight 右侧
android:layout_alignParentTop 上方
android:layout_alignParentBottom 下方
android:layout_centerInParent 居中

1.5 作业实操

1.5.1 效果演示

1.5.2 项目源码(有两种写法生成同一样式页面)

效果图
在这里插入图片描述
布局代码如下

//activity_main.xml第一种写法
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:src="@drawable/ditu"/>
    <Button
        android:id="@+id/button_0"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/xiangshang"
        android:layout_centerInParent="true"
    />
    <Button
        android:id="@+id/button_1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/xiangshang"
        android:layout_above="@+id/button_0"
        android:layout_centerInParent="true"

        /> <Button
    android:id="@+id/button_2"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/xiangzuo"
    android:layout_toLeftOf="@+id/button_1"
    android:layout_below="@id/button_1"
   
    /> <Button
    android:id="@+id/button_3"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/xiangyou"
    android:layout_toRightOf="@+id/button_1"
    android:layout_below="@id/button_1"
    /> <Button
    android:id="@+id/button_4"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/xiangxia"
    android:layout_below="@id/button_0"
    android:layout_centerInParent="true"
    />


</RelativeLayout>


//activity_main.xml第二种写法
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ditu"/>
    <Button
        android:id="@+id/button_0"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@mipmap/ic_launcher"
        android:layout_centerInParent="true"
    />
    <Button
        android:id="@+id/button_1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/xiangshang"
        android:layout_above="@+id/button_0"
        android:layout_alignLeft="@id/button_0"

        /> <Button
    android:id="@+id/button_2"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/xiangzuo"
    android:layout_toLeftOf="@+id/button_0"
    android:layout_alignTop="@id/button_0"

    /> <Button
    android:id="@+id/button_3"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/xiangyou"
    android:layout_toRightOf="@+id/button_0"
    android:layout_alignTop="@id/button_0"

    /> <Button
    android:id="@+id/button_4"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:background="@drawable/xiangxia"
    android:layout_below="@+id/button_0"
    android:layout_alignLeft="@id/button_0"

    />


</RelativeLayout>


第二页效果如下
在这里插入图片描述
在这里插入图片描述布局代码如下

//activity_sacond.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".SecondActivity">


    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:background="@drawable/guidao">
        <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
            android:background="@drawable/diaochan"
            android:layout_gravity="center"

        />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="adimin"
            android:layout_gravity="center"
            android:layout_marginTop="60dp"
            android:textColor="#E91E63"
            android:textSize="20dp"
            android:textStyle="bold"/>

    </FrameLayout>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="个人中心"
    android:textColor="#000000"
    android:layout_gravity="center"
    android:textSize="30dp"
    android:textStyle="bold"
    />
    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="#E91A1A"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="设置"
        android:textColor="#000000"
        android:layout_gravity="left"
        android:textSize="30dp"

        />
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000"/>
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="修改密码"
    android:textColor="#000000"
    android:layout_gravity="left"
    android:textSize="30dp"

    />
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000"/>
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="作品详情"
    android:textColor="#000000"
    android:layout_gravity="left"
    android:textSize="30dp"
    />
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000"/>
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="注销"
    android:textColor="#000000"
    android:layout_gravity="left"
    android:textSize="30dp"
    />
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000"/>

</LinearLayout>

跳转页面代码实现

//MainActivity.java
package com.example.linearlayout;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button btn_1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_1=findViewById(R.id.button_0);
        btn_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });
    }
}

2 Style设计

2.1 简介

方法:
第一步 在drawable文件夹下创建样式的xml文件
第二步 布局文件中设置控件的background属性为该样式文件来实现效果
1.drawable文件夹下的btnstyle1.xml文件

<shape <mins:android="http://schemas.android.com/apk/res/android">  //shape表示形状
< solid android:color="#ff8724" />  //solid表示实心填充
< stroke android:color="#000000" android:width="10dp" />   //表示描边,有一个颜色和宽度
<corners android:radius="100dp"/>  //设置圆角
</ shape>

2.布局文件中按钮控件的属性设置

< Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="嘿嘿"
android:textSize="60sp"
android:textColor="#ffffff"
android:textStyle="bold"
android:background="@drawable/btnstyle1"
android:layout_margin="20dp"
android:padding="5dp"
/>

在这里插入图片描述
Margins指外边距,Padding指内边距

2.2 xml属性

XML属性 描述
android:layout_margin 设置上下左右外边距
android:layout_marginBottom 设置底外边距
android:layout_marginLeft 设置左外边距
android:layout_marginRight 设置右外边距
android:layout_marginTop 设置顶外边距
android:padding 设置上下左右内边距
android:paddingBottom 设置底内边距
android:paddingLeft 设置左内边距
android:paddingRight 设置右内边距
android:paddingTop 设置上内边距

2.3 操作演示

在这里插入图片描述
创建一个drawable文件
在这里插入图片描述在这里插入图片描述生成如下文件
在这里插入图片描述在这里插入图片描述在activity_main.xml中的按钮添加背景为刚才创建的btnstyle2文件
在这里插入图片描述
再添加一个drawable文件在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述再创建一个drawable文件,样式不设定shape而是selector
在这里插入图片描述更改activity_main中的按钮背景
在这里插入图片描述效果如图,鼠标未按下时
在这里插入图片描述
按钮按住时
在这里插入图片描述

2.4 案例源码

文件所在路径
在这里插入图片描述

//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开始游戏"
        android:textSize="40dp"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:layout_margin="20dp"
        android:background="@drawable/btns12"
        android:padding="5dp"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开始游戏"
        android:textSize="40dp"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:layout_margin="20dp"
        android:background="@drawable/btnstyle2"
        android:padding="5dp"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开始游戏"
        android:textSize="40dp"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:layout_margin="20dp"
        android:background="@drawable/btnstyle3"
        android:padding="5dp"/>

</LinearLayout>
//btnstyle1.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ff8724"/>
    <stroke android:color="#000000" android:width="10dp"/>
</shape>

//btnstyle2.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#2196F3"/>
    <stroke android:color="#3F51B5" android:width="10dp"/>
</shape>
//btnstyle3.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#2196F3"/>
    <stroke android:color="#3F51B5" android:width="10dp"/>
    <corners android:radius="100dp"/>
</shape>
//btns12.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btnstyle1"
    android:state_pressed="false"/>
    <item android:drawable="@drawable/btnstyle2"
        android:state_pressed="true"/>

</selector>

2.5 案例 2

在这里插入图片描述

2.5.1 效果展示

在这里插入图片描述

2.5.2 源码

//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开始游戏"
        android:textSize="40dp"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:layout_margin="20dp"
        android:background="@drawable/btns12"
        android:padding="5dp"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="40dp"
        android:hint="请输入"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:layout_margin="30dp"
        android:background="@drawable/editstyle1"
        android:padding="10dp"/>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="4">

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="好"
    android:textSize="60dp"
    android:textColor="#ffffff"
    android:textStyle="bold"
    android:layout_margin="10dp"
    android:background="@drawable/btnstyle3"
    android:padding="5dp"
        android:layout_weight="1"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="好"
        android:textSize="60dp"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:layout_margin="10dp"
        android:background="@drawable/btnstyle3"
        android:padding="5dp"
        android:layout_weight="1"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="学"
        android:textSize="60dp"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:layout_margin="10dp"
        android:background="@drawable/btnstyle3"
        android:padding="5dp"
        android:layout_weight="1"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="习"
        android:textSize="60dp"
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:layout_margin="10dp"
        android:background="@drawable/btnstyle3"
        android:padding="5dp"
        android:layout_weight="1"/>
</LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="4">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="天"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle3"
            android:padding="5dp"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="天"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle3"
            android:padding="5dp"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="向"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle3"
            android:padding="5dp"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="上"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle3"
            android:padding="5dp"
            android:layout_weight="1"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="3">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle4"
            android:padding="5dp"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="学"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle4"
            android:padding="5dp"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="习"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle4"
            android:padding="5dp"
            android:layout_weight="1"/>


    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="3">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle4"
            android:padding="5dp"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="快"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle4"
            android:padding="5dp"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="乐"
            android:textSize="60dp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:layout_margin="10dp"
            android:background="@drawable/btnstyle4"
            android:padding="5dp"
            android:layout_weight="1"/>
</LinearLayout>

</LinearLayout>

在这里插入图片描述

//btnstyle1.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffcccc"/>
    <stroke android:color="#ff9990" android:width="10dp"/>
</shape>
//btnstyle2.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ff6699"/>
    <stroke android:color="#ff0099a" android:width="10dp"/>
</shape>
//btnstyle3.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ff6699"/>
    <stroke android:color="#ff0099" android:width="10dp"/>
    <corners android:radius="1000dp"/>
</shape>
//btnstyle4.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#2196F3"/>
    <stroke android:color="#3F51B5" android:width="10dp"/>
    <corners android:radius="1000dp"/>
</shape>
//editstyle1.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff"/>
    <stroke android:color="#000000" android:width="5dp"/>

</shape>
//btns12.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btnstyle1"
    android:state_pressed="false"/>
    <item android:drawable="@drawable/btnstyle2"
        android:state_pressed="true"/>

</selector>

3 智能计算器

智能计算器的实现步骤

  • 建一个新的工程,命名为DAIJSQ
  • 在drawable文件夹下创建样式文件
  • 完成布局界面中的代码设计
  • 给按钮起一个id号
  • 定义对象并添加4个对象
  • 书写数字(0-9)按钮的代码
  • 书写运算符号(+、-、*、/)按钮的代码
  • 书写等号(=)按钮的代码
  • 书写清除(C)按钮的代码

3.1 页面布局

页面效果
在这里插入图片描述

//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    android:background="@drawable/unicorn"
    tools:context=".MainActivity">


    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="40dp"
        android:textStyle="bold"
        android:gravity="right"
        android:hint="0"

        android:textColor="#cc33ff"

       android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="40dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="40dp"
        android:weightSum="4"
>
        <Button
            android:id="@+id/button_7"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="7"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_8"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="8"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_9"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="9"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_jia"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="+"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="40dp"
        android:weightSum="4"
        >
        <Button
            android:id="@+id/button_4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="4"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="5"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_6"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="6"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_jian"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="-"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="40dp"
        android:weightSum="4"
        >
        <Button
            android:id="@+id/button_1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="1"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="2"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="3"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_cheng"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="*"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="4"
        android:layout_marginTop="40dp">
        <Button
            android:id="@+id/button_qing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="C"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_0"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="0"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_deng"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="="
            android:background="@drawable/btn12"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/button_chu"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="60dp"
            android:text="/"
            android:background="@drawable/btn12"
            android:layout_weight="1"/>

    </LinearLayout>
</LinearLayout>

3.2 控件样式

在这里插入图片描述

//editstyle.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#fff8dc"/>
    <stroke android:color="#ffd39b" android:width="5dp"/>
</shape>

在这里插入图片描述

//btnstyle1.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffcccc"/>
    <stroke android:color="#ff9990" android:width="5dp"/>
    <corners android:radius="1000dp"/>
</shape>

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffccff"/>
    <stroke android:color="#ff66ff" android:width="5dp"/>
    <corners android:radius="1000dp"/>
</shape>

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btnstyle1" android:state_pressed="false"/>
    <item android:drawable="@drawable/btnstyle2" android:state_pressed="true"/>
</selector>

记得drawable目录下还有一张unicorn.jpg的图片充当背景

3.3 按钮代码的实现

这种实现方法的缺陷为不能连续运算再等于,在两个运算数后必须按一下=号,不然连续操作只会保留后两个数

//MainActivity.java
package com.example.daijsq;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    //第一步:定义对象
    TextView txt_result;
    Button btn_7,btn_8,btn_9,btn_jia;
    Button btn_4,btn_5,btn_6,btn_jian;
    Button btn_1,btn_2,btn_3,btn_cheng;
    Button btn_qing,btn_0,btn_deng,btn_chu;
    double num1 = 0,num2 = 0;//声明两个参数,接收数据
    double result=0;//运算结果
    Boolean isClickdeng = false; //判断是否单击了=号
    String op ="%" ;//操作符+-*/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //第二步:绑定控件
        txt_result=findViewById(R.id.editText1);
        btn_7=findViewById(R.id.button_7);btn_8=findViewById(R.id.button_8);btn_9=findViewById(R.id.button_9);btn_jia=findViewById(R.id.button_jia);
        btn_4=findViewById(R.id.button_4);btn_5=findViewById(R.id.button_5);btn_6=findViewById(R.id.button_6);btn_jian=findViewById(R.id.button_jian);
        btn_1=findViewById(R.id.button_1);btn_2=findViewById(R.id.button_2);btn_3=findViewById(R.id.button_3);btn_cheng=findViewById(R.id.button_cheng);
        btn_qing=findViewById(R.id.button_qing);btn_0=findViewById(R.id.button_0);btn_deng=findViewById(R.id.button_deng);btn_chu=findViewById(R.id.button_chu);
        //按钮的单击事件
        btn_7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;
                }
                txt_result.setText(txt_result.getText().toString()+"7");
            }
        });
        btn_8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;
                }
                txt_result.setText(txt_result.getText().toString()+"8");
            }
        });
        btn_9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;

                }
                txt_result.setText(txt_result.getText().toString()+"9");
            }
        });
        btn_jia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str1 = txt_result.getText().toString();//获取输入框的内容
                if(str1.equals("")){
                    return; //如果为空,返回
                }
                num1=Double.parseDouble(str1);//字符串类型转为double类型
                txt_result.setText("");
                op="+";
                isClickdeng=false;
            }
        });
        btn_4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;
                    txt_result.setText(txt_result.getText().toString()+"4");
                }
            }
        });
        btn_5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;
                }
                txt_result.setText(txt_result.getText().toString()+"5");
            }
        });
        btn_6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;
                }
                txt_result.setText(txt_result.getText().toString()+"6");
            }
        });
        btn_jian.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str1 = txt_result.getText().toString();//获取输入框的内容
                if(str1.equals("")){
                    return; //如果为空,返回
                }
                num1=Double.parseDouble(str1);//字符串类型转为double类型
                txt_result.setText("");
                op="-";
                isClickdeng=false;
            }
        });
        btn_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;
                }
                txt_result.setText(txt_result.getText().toString()+"1");
            }
        });
        btn_2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;
                }
                txt_result.setText(txt_result.getText().toString()+"2");
            }
        });
        btn_3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;
                }
                txt_result.setText(txt_result.getText().toString()+"3");
            }
        });
        btn_cheng.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str1 = txt_result.getText().toString();//获取输入框的内容
                if(str1.equals("")){
                    return; //如果为空,返回
                }
                num1=Double.parseDouble(str1);//字符串类型转为double类型
                txt_result.setText("");
                op="*";
                isClickdeng=false;
            }
        });
        btn_0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isClickdeng){//说明刚单击了=号,上一个运算刚结束
                    txt_result.setText("");//重新计算,文本框清空
                    isClickdeng=false;
                }
                txt_result.setText(txt_result.getText().toString()+"0");
            }
        });
        btn_qing.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txt_result.setText("");
            }
        });
        btn_chu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str1 = txt_result.getText().toString();
                if(str1.equals("")){
                    return;
                }
                num1=Double.parseDouble(str1);//字符串类型转为double类型
                txt_result.setText("");
                op="/";
                isClickdeng=false;
            }
        });
        btn_deng.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str2 = txt_result.getText().toString();
                if(str2.equals("")){
                    return;
                }
                num2 = Double.parseDouble(str2);
                txt_result.setText("");
                switch(op){
                    case"+":result=num1+num2;break;
                    case"-":result=num1-num2;break;
                    case"*":result=num1*num2;break;
                    case"/":result=num1/num2;break;
                    case"%":result=num2;break;
                    default:result=0.0;break;
                }
                txt_result.setText(result+"");
                op="%";
                isClickdeng=true;
            }
        });

    }
}

猜你喜欢

转载自blog.csdn.net/qq_24990383/article/details/106298165