赞
踩
实验内容:
实现好友列表界面,相应ListView中OnItemClick的点击事件。
实验步骤:
首先先新建一个项目。
1.登录页面:
(1)新建一个LoginActivity.kt文件,并在res目录的layout文件夹中创建activity_login.xml文件。有关登录页面的实现效果都在这两个文件中体现。
(2)先将布局方式改成RelativeLayout布局,如果想在页面中添加背景,可以添加android:background这个属性。
- <?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=".LoginActivity">
-
- </RelativeLayout>
(3)添加文字和样式:设置TextView和EditText的id、宽度(layout_width)、高度(layout_height)、字体大小(textSize)、文本(text)、文字的对齐方式(gravity)、控件的对齐方式(layout_gravity)等。
- <?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=".LoginActivity">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/big_login"
- android:textSize="40dp"
- android:text="登录"
- android:gravity="center"
- android:layout_gravity="center_vertical"
- android:layout_margin="30dp" />
-
- <!-- 手机号-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:theme="@style/Layoutstyle">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/text_name"
- android:text="手机号码:"
- android:textSize="22dp" />
- <EditText
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/username"
- android:layout_marginLeft="0dp"
- android:hint="请输入手机号"
- android:textColor="@color/black"
- android:gravity="center_vertical"
- android:textSize="25dp"/>
-
- </LinearLayout>
-
- <!-- 密码-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:theme="@style/Layoutstyle">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/text_pwd"
- android:text="密\u3000\u3000码:"
- android:textSize="22dp"/>
-
- <EditText
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/pwd"
- android:hint="请输入密码"
- android:textColor="@color/black"
- android:gravity="center_vertical"
- android:inputType="textPassword"
- android:textSize="22dp"
- android:layout_marginLeft="0dp" />
- </LinearLayout>
- <!-- 登录-->
- <Button
- android:layout_width="200dp"
- android:layout_height="wrap_content"
- android:id="@+id/login"
- android:text="登录"
- android:textSize="25dp"
- android:gravity="center"
- android:layout_gravity="center"/>
-
- <!-- 还未注册,去注册-->
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/register"
- android:text="还未注册?去注册"
- android:textSize="18dp"
- android:gravity="center"
- android:layout_gravity="center" />
- </LinearLayout>
- </RelativeLayout>
在上面这个xml文件中,我在res/values/themes.xml中把具有公共属性的样式写在一起,便于多次使用相同属性时可以减少工作量,以提高代码的复用率。使用时添加android:theme="@style/Layoutstyle"这个属性即可。
- <!-- LinearLayout-->
- <style name="Layoutstyle" parent="Theme.AppCompat.Light">
- <item name="android:layout_marginRight">30dp</item>
- <item name="android:layout_marginLeft">30dp</item>
- <item name="android:layout_marginBottom">20dp</item>
- <item name="android:orientation">horizontal</item>
- <item name="android:gravity">center</item>
- <item name="android:layout_gravity">center_vertical</item>
- </style>
可以在xml文件的右上角的位置,查看当前文件的页面布局样式:
(4)在LoginActivity.kt文件中要继承AppCompatActivity这个方法:
首先先定义控件id,然后在登录按钮添加点击事件,判断所输入的内容不能为空,如果输入预设置的手机号码和密码都正确,方可跳转到主页。点击“还未注册?去注册”文字,也可以跳到注册页面(前提是需要有RegisterActivity.kt和activity_register.xml),不然会报错。
- class LoginActivity:AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_login)
- val username:EditText=findViewById(R.id.username)
- val pwd:EditText=findViewById(R.id.pwd)
-
- // 验证,点击登录
- val login:Button=findViewById(R.id.login)
- login.setOnClickListener{
-
- val str_name=username.text.toString()
- val str_pwd=pwd.text.toString()
- // 判断输入是否正确
- if (str_name.isEmpty()){
- username.setError("手机号不能为空")
- }
- if (str_pwd.isEmpty()){
- pwd.setError("密码不能为空")
- }
-
- // 登录成功,进入主页
- if (str_name.equals("13456789028") && str_pwd.equals("123")){
- val intent=Intent(this,MainActivity::class.java)
- startActivity(intent)
- }
- }
-
- // 还未注册?去注册
- val register:TextView=findViewById(R.id.register)
- register.setOnClickListener{
- val intent=Intent(this,RegisterActivity::class.java)
- startActivity(intent)
- }
-
- }
- }
如果在运行时出现闪退的问题,其中有一种可能是,AndroidManifest.xml中没有对已创建的kt文件进行注册,只需要对Activity文件添加注册即可:<activity android:name=".LoginActivity" android:exported="false"></activity>
运行完成后的效果图如下:
为此,简单的登录界面就实现了。
2.注册页面:
注册的实现逻辑和登录的差不多,只是注册页面所需要的功能控件多一点,相应的业务处理逻辑也相对多一点。
(1)编写activity_register.xml文件的内容:
在注册页面,我实现了8种控件:图片(ImageView)、文本框(TextView)、可编辑文本(EditText)、单选按钮(RadioGroup)、下拉框(Spinner)、自动完成文本框(AutoCompleteTextView)、复选框(CheckBox)、按钮(Button)
- <?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=".RegisterActivity">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- 头像图片-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:gravity="center">
- <ImageView
- android:id="@+id/avatar_img"
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:src="@drawable/avatar"
- android:layout_centerInParent="true"
- android:layout_gravity="center"
- android:layout_margin="30dp"/>
- </LinearLayout>
-
- <!-- 用户名-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:theme="@style/Layoutstyle">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/text_name"
- android:text="手机号码:"
- android:textSize="22dp" />
-
- <EditText
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/username"
- android:hint="请输入手机号"
- android:gravity="center_vertical"
- android:textSize="22dp"
- android:layout_marginLeft="0dp"
- android:textColor="@color/black"/>
- </LinearLayout>
-
- <!-- 密码-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:theme="@style/Layoutstyle">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/text_pwd"
- android:text="密\u3000\u3000码:"
- android:textSize="22dp"/>
-
- <EditText
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/pwd"
- android:hint="请输入密码"
- android:gravity="center_vertical"
- android:textSize="22dp"
- android:layout_marginLeft="0dp"
- android:inputType="textPassword"
- android:textColor="@color/black"/>
- </LinearLayout>
-
- <!-- 确认密码-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:theme="@style/Layoutstyle" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/text_confirm_pwd"
- android:text="确认密码:"
- android:textSize="22dp" />
-
- <EditText
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/confirm_pwd"
- android:hint="请确认密码"
- android:gravity="center_vertical"
- android:textSize="22dp"
- android:layout_marginLeft="0dp"
- android:inputType="textPassword"
- android:textColor="@color/black" />
- </LinearLayout>
-
- <!-- 性别-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginRight="30dp"
- android:layout_marginBottom="20dp"
- android:layout_marginLeft="30dp"
- android:orientation="horizontal"
- android:gravity="center_vertical">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/sex"
- android:text="性\u3000\u3000别:"
- android:textSize="22dp" />
- <!-- 单选按钮:男-->
- <RadioGroup
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_marginLeft="30dp">
- <RadioButton
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/male_sex"
- android:text="男"
- android:checked="true"
- android:textSize="22dp"
- android:layout_marginRight="20dp" />
- <!-- 单选按钮:女-->
- <RadioButton
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/female_sex"
- android:text="女"
- android:textSize="22dp" />
- </RadioGroup>
- </LinearLayout>
-
- <!-- 所在城市-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginRight="30dp"
- android:layout_marginBottom="20dp"
- android:layout_marginLeft="30dp"
- android:orientation="horizontal"
- android:gravity="center_vertical">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="所在城市:"
- android:textSize="22dp" />
-
- <Spinner
- android:id="@+id/sp_city"
- android:layout_width="160dp"
- android:layout_height="wrap_content"
- android:textAlignment="center"
- android:theme="@style/spinner"
- />
- </LinearLayout>
-
- <!-- 毕业院校-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginRight="30dp"
- android:layout_marginBottom="20dp"
- android:layout_marginLeft="30dp"
- android:orientation="horizontal"
- android:gravity="center_vertical">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="毕业院校:"
- android:textSize="22dp" />
-
- <AutoCompleteTextView
- android:id="@+id/actv_uni"
- android:layout_width="200dp"
- android:layout_height="wrap_content"
- android:textColor="@color/black" />
- </LinearLayout>
-
- <!-- 复选框:勾选协议-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginRight="30dp"
- android:layout_marginBottom="20dp"
- android:layout_marginLeft="30dp"
- android:orientation="horizontal"
- android:gravity="center_vertical">
- <CheckBox
- android:id="@+id/check_read"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="已阅读协议"
- android:textSize="26dp"
- android:inputType="number"
- />
- </LinearLayout>
- <!-- 注册-->
- <Button
- android:layout_width="200dp"
- android:layout_height="wrap_content"
- android:id="@+id/register"
- android:text="注册"
- android:textSize="25dp"
- android:gravity="center"
- android:layout_gravity="center"/>
-
- <!-- 已有账号,请登录-->
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/login"
- android:text="已有账号,请登录"
- android:textSize="18dp"
- android:gravity="center"
- android:layout_gravity="center" />
-
- </LinearLayout>
- </RelativeLayout>
在RegisterActivity.kt文件中对各个控件进行逻辑处理.
- class RegisterActivity: AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_register)
- val username:EditText=findViewById(R.id.username)
- val pwd:EditText=findViewById(R.id.pwd)
- val confirm_pwd:EditText=findViewById(R.id.confirm_pwd)
- val check_read:CheckBox=findViewById(R.id.check_read)
-
- //spinner
- val sp_city: Spinner = findViewById(R.id.sp_city)
- val sp_data = arrayOf("佛山", "广州", "深圳", "汕头", "清远", "云浮", "东莞","珠海","江门","中山","河源","湛江","茂名","揭阳")
- val sp_adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, sp_data)
- sp_city.adapter = sp_adapter
-
- //AutoComleteTextView
- val act_uni: AutoCompleteTextView = findViewById(R.id.actv_uni)
- val actv_data = arrayOf("暨南大学","广东海洋大学", "广东工业大学", "广东财经大学","广东医科大学")
-
- val act_adapter= ArrayAdapter(this,android.R.layout.simple_list_item_1,actv_data)
- act_uni.setAdapter(act_adapter)
-
- // 验证,点击注册
- val register:TextView=findViewById(R.id.register)
- register.setOnClickListener{
-
- val str_name=username.text.toString()
- val str_pwd=pwd.text.toString()
- val str_confirm_pwd=confirm_pwd.text.toString()
- val str_check_read=check_read.text.toString()
-
- // 手机号校验
- val username_regex:Regex= "[1][34578]\\d{9}".toRegex()
- // 密码校验:密码为6~16位数字,英文,符号至少两种组合的字符
- val pwd_regex:Regex="^(?![0-9]+$)(?![a-zA-Z]+$)(?!([^(0-9a-zA-Z)]|[\\(\\)])+$)([^(0-9a-zA-Z)]|[\\(\\)]|[a-zA-Z]|[0-9]){6,16}$".toRegex()
-
- // 判断输入是否正确
- if (str_name.isEmpty()){
- username.setError("手机号不能为空")
- } else if (str_name.matches(username_regex)){
-
- }else{
- username.setError("请输入正确的手机号")
- }
- if (str_pwd.isEmpty()){
- pwd.setError("密码不能为空")
- }else if (str_pwd.matches(pwd_regex)){
-
- }else{
- pwd.setError("密码为6~16位数字,英文,符号至少两种组合的字符")
- }
- if (str_confirm_pwd.isEmpty()){
- confirm_pwd.setError("确认密码不能为空")
- }
- if (!str_confirm_pwd.equals(str_pwd)){
- confirm_pwd.setError("两次密码必须保持一致")
- }
- }
-
- // 点击登录,跳转到登录页面
- val login:TextView=findViewById(R.id.login)
- login.setOnClickListener{
- val intent=Intent(this, LoginActivity::class.java)
- startActivity(intent)
- }
- }
- }
运行完成后的效果图如下:
为此,注册界面也实现了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。