这个是我们社团的作业,本人大一,也是刚刚接触安卓,很多东西都很陌生,不懂得问我们的学长,学长觉得问题太简单了不予回答O__O "…然而很多细节困扰了我很久,去网上找方法也费了好多的冤枉时间,所以总结一下这次的经验,希望能为其他初学者省下时间

guyhub:https://github.com/Zzzia/Login/tree/master/app/src/main

首先布局实现用户界面

ezgif.com-resize.gif

作业要求大致布局就是这样了,一个登录界面,一个注册界面,还是很简单的,不多说了

小细节:

1.注意RelativeLayout和FrameLayout的配合使用

2.方块周围的阴影用

android:elevation="3dip"

3.之前把图片放在了drawable文件夹里,设置背景导致了停止运行,其解决方案为把图片放在mipmap-xxxhdpi这个文件夹下,测试1m一下的图片应该是没问题的,而drawable文件夹300k就boom了。

4.建立第二个activity后一定要记得在manifest里注册,代码:

android:allowBackup="true"

...

android:theme="@style/AppTheme">

//添加在这个位置,我添加了两个

5.按钮用TextView来构建,这样会好看一点,用这个代码会产生水波纹效果:

android:foreground="?attr/selectableItemBackground"

6.EditView可以使用代码达到提示效果:

android:hint="输入账号"

7.设置返回键

是不是有时候进入了注册界面后习惯性的点返回,想要回到主界面时,程序关闭了?用一下方法可以解决

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

/**

* 注意:

* super.onBackPressed()会自动调用finish()方法,关闭

* 当前Activity.

* 若要屏蔽Back键盘,注释该行代码即可

*/

@Override

public void onBackPressed() {

//这里是重点

super.onBackPressed();

System.out.println("按下了back键 onBackPressed()");

}

标题栏设置

这里说的是自带的默认标题栏,我在网上找了很多方法去设置,最后只得出这一套方案实现

隐藏标题栏:

getSupportActionBar().hide();

设置标题:

getSupportActionBar().setTitle("登录");

出现返回箭头:

空白activity默认有标题栏,在继承AppCompatActivity的Activity中,直接使用下面代码出现返回箭头

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

设置返回箭头:

@Override

public boolean onOptionsItemSelected(MenuItem item) {

if(item.getItemId() == android.R.id.home){

//...

//按下效果设置为返回

onBackPressed();

//...

return true;

}

return super.onOptionsItemSelected(item);

}

这里我设置按下效果是模拟返回键onBackPressed();

若要自定义设置标题栏,可以百度ToolBar使用教程

Activity跳转

有两种跳转方式

第一种是没有传回来信息的方式

Intent intent = new Intent();

//第一个是当前Activity,第二个是要跳转的Activity

intent.setClass(LoginActivity.this,MyActivity.class);

startActivity(intent);

LoginActivity.this.finish();

第二种(startActivityForResult)比较高级,可以实现业务逻辑,得到子页面传回来的信息,比如说这次我需要搜集用户注册的信息,然后把用户名在登录页面显示出来,以便用户直接输入密码登录。

在主页面里使用startActivityForResult(int requestCode, int resultCode, Intent data),同时重写onActivityResult(与onCreate同级),这里requestCode设置为1

在跳转页面里使用Intent,并putExtra传输数据,最后使用this.setResult(int requestCode,Intent intent)

主页面代码:

Intent intent = new Intent();

intent.setClass(MainActivity.this,LoginActivity.class);

MainActivity.this.startActivityForResult(intent,1);

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

...

switch(requestCode){

case (1):{...}

}

...

}

这里switch的是requestCode,也就是设置里输入的数字标志,用于多个页面的结果返回,例如,我要再从第三个页面接收返回信息:

MainActivity.this.startActivityForResult(intent,2);

可以添加case(2)来接收第三个页面的返回信息

跳转页面代码:

//设置regist按钮监听

regist.setOnClickListener(new TextView.OnClickListener(){

@Override

public void onClick(View view) {

//number psw 为 EditText

//psw = //(EditText)findViewById(R.id.Regist_password);

username = number.getText().toString();

password = psw.getText().toString();

}

Intent intent = new Intent();

intent.setClass(LoginActivity.this,MainActivity.class);

//将输入传递给主界面

intent.putExtra("username",username);

intent.putExtra("password",password);

//关键语句

LoginActivity.this.setResult(1,intent);

//传递完毕

LoginActivity.this.finish();

}

});

这里,顺序是先执行LoginActivity.this.setResult(1,intent);

然后执行LoginActivity.this.finish();

才能将信息返回,因此,finish是很重要的

文件读写,实现保存账号密码

这个我想了好久好久的,我刚刚入门比较辣鸡O__O "…最后也只能想出以txt保存,然后用集合来搜集数据的解决方式

首先是在注册页面搜集用户输入的数据并保存为txt文件

number = (EditText)findViewById(R.id.Regist_username);

psw = (EditText)findViewById(R.id.Regist_password);

regist = (TextView)findViewById(R.id.Regist_regist);

//注册按钮监听

regist.setOnClickListener(new TextView.OnClickListener(){

@Override

public void onClick(View view) {

username = number.getText().toString();

password = psw.getText().toString();

//判断输入是否为空

if(username.isEmpty()||password.isEmpty()||username.contains("#")){

Toast.makeText(LoginActivity.this, "用户名密码不能为空", Toast.LENGTH_SHORT).show();

}

else {

//若不为空,保存信息,传递信息,跳转页面

save();

//sava函数一定要看一下

Intent intent = new Intent();

intent.setClass(LoginActivity.this,MainActivity.class);

//将输入传递给主界面

intent.putExtra("username",username);

intent.putExtra("password",password);

LoginActivity.this.setResult(1,intent);

//传递完毕

LoginActivity.this.finish();

}

}

});

sava函数:

//用户信息保存

//将用户名和密码分别放入两个不同的txt文件中

public void save(){

String registfile = "registfile.txt";

String pswfile = "pswfile.txt";

try {

//以#号方式分割用户的信息

String space = "#";

FileOutputStream outputUsername = openFileOutput(registfile, Activity.MODE_APPEND);

FileOutputStream outputPsw = openFileOutput(pswfile, Activity.MODE_APPEND);

//保存数据并添加#号,以便一会儿用split()分割

String name = username+space;

String psw = password+space;

outputUsername.write(name.getBytes());

outputPsw.write(psw.getBytes());

outputPsw.flush();

outputUsername.flush();

outputPsw.close();

outputUsername.close();

//提示保存txt成功

Toast.makeText(this, "OK!", Toast.LENGTH_SHORT).show();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

MainActivity代码:

//在onCreate之前,我写了两组集合用于临时存放账号密码

//ArrayList ListUser = new ArrayList();

//ArrayList ListPassword = new ArrayList();

//登录按钮监听

login.setOnClickListener(new TextView.OnClickListener(){

@Override

public void onClick(View view) {

try{

FileInputStream inputUsername = openFileInput(registfile);

byte[] bytes = new byte[1024];

ByteArrayOutputStream userOutputStream = new ByteArrayOutputStream();

while(inputUsername.read(bytes)!=-1){

userOutputStream.write(bytes,0,bytes.length);

}

inputUsername.close();

userOutputStream.close();

String username = new String(userOutputStream.toByteArray());

System.out.println(username);

//读取密码

FileInputStream inputPassword = openFileInput(pswfile);

ByteArrayOutputStream pswOutputStream = new ByteArrayOutputStream();

while(inputPassword.read(bytes)!=-1){

pswOutputStream.write(bytes,0,bytes.length);

}

inputPassword.close();

pswOutputStream.close();

String password = new String(pswOutputStream.toByteArray());

//将账号密码写入List

String[] tokenName = username.split("#");

for(int i = 0;i

ListUser.add(tokenName[i]);

}

String[] tokenPsw = password.split("#");

for(int i = 0;i

ListPassword.add(tokenPsw[i]);

}

//写入完成

//账号密码匹配

String username1 = Euesrname.getText().toString();

String password1 = Epassword.getText().toString();

int i;

for(i=0;i

//先检查是否有输入的账号

if(ListUser.get(i).equals(username1)){

//匹配密码

if(ListPassword.get(i).equals(password1)){

Toast.makeText(MainActivity.this, "登录成功!", Toast.LENGTH_SHORT).show();

//跳转到登录成功后的界面

Intent intent = new Intent();

intent.setClass(MainActivity.this,MyActivity.class);

startActivity(intent);

MainActivity.this.finish();

}

else

Toast.makeText(MainActivity.this, "请检查密码是否正确", Toast.LENGTH_SHORT).show();

}

}

if(i==ListUser.size()-1){

Toast.makeText(MainActivity.this, "账号不存在", Toast.LENGTH_SHORT).show();

}

} catch (IOException e) {

e.printStackTrace();

}

}

});

到此也就结束了,能够实现图片上的功能了

在这次作业中,我添加了很多有趣的元素,与大家分享下

实现再次按下返回键结束程序

这种方案无疑是很人性友好的,不必弹出烦人的对话框,也不会手滑关掉,代码如下,添在onCreate后面

private long exitTime = 0;

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){

if((System.currentTimeMillis()-exitTime) > 2000){

Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();

exitTime = System.currentTimeMillis();

} else {

finish();

System.exit(0);

}

return true;

}

return super.onKeyDown(keyCode, event);

}

最简单的播放音乐方案

Mediaplayer = new MediaPlayer();

Mediaplayer = MediaPlayer.create(MyActivity.this, R.raw.bravesong);

Mediaplayer.start();

这东西可以后台,但是我并不知道后台时间长短,貌似各个安卓版本不一样?

停止播放的方法是

Mediaplayer.pause();

启动默认浏览器打开想要打开的网址

//设置跳转按钮启动浏览器

go_web.setOnClickListener(new TextView.OnClickListener() {

@Override

public void onClick(View view) {

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent);

MyActivity.this.onPause();

}

});

}

android自动登录简书,安卓实现用户登录界面相关推荐

  1. android qq 登陆 简书,使用QQ第三方登录

    一,首先导入jar包 image.png 配置: ··· compile files('libs/open_sdk_r5990_lite.jar') compile 'com.android.supp ...

  2. android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  3. Android点击按钮显示密码,Android 开发仿简书登录框可删除内容或显示密码框的内容...

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  4. [版本1.11.4已修复]简书安卓UI界面Bug:主界面消失

    Bug现象:如下图,在评论输入内容时,主界面消失,暴露出安卓桌面 Bug截图 简书安卓1.10.7正式版 简书安卓1.11.2正式版 简书安卓1.11.3公测版 以上App版本均存在相同的Bug 测试 ...

  5. 使用requests库用cookie登录简书账号

    Python网络爬虫与信息提取 使用python的requests库,就是跳过浏览器直接用脚本去访问服务器: 首先我们要知道服务器的url,然后先用浏览器模拟访问该url,获取浏览器的信息(user- ...

  6. android自动登录简书,Android开发之简单登录界面

    用户界面基础 Android系统的四大组件分别是活动(Activity).服务(Service).广播接收器(Broadcast Receiver).内容提供器(Content Provider). ...

  7. 高仿简书Android,高仿简书个人中心页面

    高仿简书个人中心页面 Demo下载地址: 先贴上效果图 1. 步骤 1.1 把APP的主题改为NoAction 1.2 引入Material Design 包 implementation 'com. ...

  8. 答简书安卓公测群里朋友的提问

    文/阿群1986 好的产品会自动地吸引热心用户参与到产品自身版本迭代和功能演化中来.简书同人人网.百度贴吧.天涯论坛.西祠胡同.新浪微博等等公共产品一样.都是由开发商为用户免费提供服务,并且无偿地持续 ...

  9. 简书的假想用户场景以及不同用户各自需要解决的烦恼

    简书专栏作者可能遇到的几种日常情景: 情景1:时政文章或热点争议话题,可能每天都收到上百条新的评论,令人头疼的是留言内容素质参差不齐,既有"好.支持.威武"之类无价值的溢美之词,也 ...

最新文章

  1. 为什么说康托尔知道聚宝盆的秘密?
  2. linux学习之路——ubuntu 16.04 开机开启数字小键盘解决方法
  3. 三十四、数据仓库的建模
  4. 2 image pil 转_pdf转图片,php语言和Java语言的两种方法
  5. [Java基础]生产者和消费者模式概述与案例分析
  6. 马云卸任阿里巴巴董事局主席;苹果承认违法中国劳动法;IntelliJ IDEA 2019.2.2 发布​ | 极客头条...
  7. NoSQL Manager for MongoDB 破解
  8. php pos 接收,PHP开发中php pos()函数的使用详解
  9. FeelYourSound MelodicFlow for Mac - 旋律制作神器
  10. Mongodb数据库安装
  11. 实现 Git 目录权限控制
  12. html图片的title,图片标签IMG内alt和title属性
  13. 神秘的蓝屏代码0xc000007e
  14. [转载]OFDM基本原理及系统框图
  15. Hadoop HDFS 基本命令
  16. Web前端-html页面-01(锚点、表单、个人简历)
  17. 【Matlab】求解微分方程{上}(通解和特解)
  18. 直播预告:对神经网络对抗鲁棒性正则化的认识 | AI TIME PhD
  19. CentOS7-查看IP
  20. 软阈值(Soft Thresholding)函数和硬阈值(Hard Thresholding)函数

热门文章

  1. 学习考察清华大学航院天行杯科创成果心得报告
  2. Andorid Skia
  3. linux 下反斜杠路径,Linux下反斜杠号\引发的思考
  4. Baymax (Android版的Siri)之百度语音识别SDK调用
  5. 论文阅读(17)---2022 CVPR SC2-PCR二阶相似性测度
  6. 《 V I M 教 程 》 —— 版本 1.5
  7. thinkbook 2022版 笔记本风扇噪音优化方案
  8. FPGA芯片选型和命名规则
  9. mysql数据库中针对敏感信息字段加密处理问题
  10. 计算机行业现状概论,计算机教学专业概论论文