布局是一种可以放置很多控件的容器,它可以按照一定规律调整内部控件的位置,从而编写出精美的界面
1.LinearLayout布局:又称线性布局,它将所包含的控件在线性方向上依次排列,有垂直方向和水平方向两种。
2.RelativeLayout布局:又称相对布局,它可以通过相对定位的方式让控件出现在布局的任何位置。
3.FrameLayout布局:又称帧布局,这种布局没有方便的定位方式,所有的控件都会默认摆放在布局的左上角。
属性 | 作用 | 示例 |
---|---|---|
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用法
注意:线性布局的嵌套
//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>
属性 | 作用 |
---|---|
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 | 本元素的右边缘和某元素的的下边缘对齐 |
//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>
帧布局默认控件位置在左上角,控件先后顺序会影响覆盖关系,后创建的总在上面
属性 | 作用 |
---|---|
android:layout_gravity | 决定了一个控件在他的父容器当中的排列方式 |
android:layout_aliParentLeft | 在父容器当中的左侧 |
android:layout_alignParentRight | 右侧 |
android:layout_alignParentTop | 上方 |
android:layout_alignParentBottom | 下方 |
android:layout_centerInParent | 居中 |
//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);
}
});
}
}
方法:
第一步 在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"
/>
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 | 设置上内边距 |
创建一个drawable文件
生成如下文件
在activity_main.xml中的按钮添加背景为刚才创建的btnstyle2文件
再添加一个drawable文件
再创建一个drawable文件,样式不设定shape而是selector
更改activity_main中的按钮背景
效果如图,鼠标未按下时
按钮按住时
//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>
//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>
智能计算器的实现步骤
//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>
//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的图片充当背景
这种实现方法的缺陷为不能连续运算再等于,在两个运算数后必须按一下=号,不然连续操作只会保留后两个数
//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;
}
});
}
}