随着时间的慢慢增加,自己的事情也非常多,也逐渐忘记了自己所写的手机安全卫士的代码,这篇博客不讲别的,就是为了复习之前所写的各种逻辑代码,是自己更能加深一些掌握!这个APP我也会抽时间把他给完成。
第一个要回顾的知识点:APP的设置
一个APP必定有些设置,比如播放背景音乐啊,是否更新啊之类的,这就需要一个sharePreferences来进行存储,这一点是毋庸置疑的,但是那我们该如何去更好的利用这个存储组件呢?
这个知识点需要有两个类来构成,首先是一个功能类SPUtils和一个专门存放常量的Contant类。SPUtils里面全部是一些静态的方法供其他类来调用,Contant存放APP中可能用到的变量。具体的代码如下:
package com.example.yzg.intelligent.utils;
import android.content.Context;
import android.content.SharedPreferences;
import com.example.yzg.intelligent.constant.Constant;
/**
* Created by yzg on 2019/9/19.
*/
public class SPUtils {
/**
*传入上下文 为APP构造一个 设置的一些属性
* @param context
* @return
*/
public static SharedPreferences getSp(Context context){
//为APP创建一个名为Constant.CONFIG(常量)的sharedPreferences对象
SharedPreferences sharedPreferences = context.getSharedPreferences(Constant.CONFIG, Context.MODE_PRIVATE);
return sharedPreferences;
}
/**
* 向APP的设置里面添加值 比如是否更新
* @param context 传入一个上下文 为了调用这个类中的第一个方法
* @param key 传入的键值
* @param state 对应键值的对于错
*/
public static void putBoolean(Context context,String key,boolean state){
//根据传入的上下文创建对象
SharedPreferences sp = getSp(context);
//利用SharedPreferences对象的edit方法将所有的key和value写入SharedPreferences中
sp.edit().putBoolean(key,state).commit();
}
/**
* 查看config中key对应的值是多少
* @param context
* @param key
* @return
*/
public static boolean getBoolean(Context context,String key){
//传入上下文对象构造SharedPreferences
SharedPreferences sp = getSp(context);
//利用SharedPreferences的getBoolean方法获取key的值 如不存在key的值 返回flase
boolean aBoolean = sp.getBoolean(key,false);
return aBoolean;
}
/**
* 为config能够添加String配置方法
* @param context
* @param key
* @param value
*/
public static void putString(Context context,String key,String value){
SharedPreferences sp = getSp(context);
sp.edit().putString(key,value).commit();
}
/**
*
* @param context
* @param key
* @return
*/
public static String getString(Context context,String key){
SharedPreferences sp = getSp(context);
String value = sp.getString(key, null);
return value;
}
}
这个类中的第一个方法就是构建shareperferences对象,这样我们就能为APP存储各种键值对了,这个小小的知识点到这就结束了!
第二个知识点:activity的基本写法
具体见代码:
package com.example.yzg.intelligent.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;
import com.example.yzg.intelligent.R;
public class MainActivity extends AppCompatActivity {
//声明各个组件
//组件的命名规则 组件的缩写名+activity的钱半部分+组件的作用
TextView tv_main_title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//初始化组件 例如findVIewByID之类的
initView();
//为第一步的组件进行赋值
initData();
//为这个界面进行添加动画操作
initAnimation();
//为相应的组件进行添加动画
initEvent();
}
private void initView() {
setContentView(R.layout.activity_main);
tv_main_title = findViewById(R.id.tv_main_title);
}
private void initData() {
tv_main_title.setText("这是第一个界面");
}
private void initAnimation() {
}
private void initEvent() {
tv_main_title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"这是我的第一个界面",Toast.LENGTH_SHORT).show();
}
});
}
}
第三个知识点:如何自定义弹出框
Android系统自带了一个弹出框的用法如下:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("弹出框的标题")
.setIcon("弹出框的图标")
.setMessage("弹出框的文字")
.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.show();
那么如何自己编写自己的弹出框呢???
首先建立一个layout布局,在布局里面写入提示框需要的部件信息即可
然后建立相应的弹出框对象;
然后在activity中进行相应的部件初始化,对每个部件进行相应的动画或者事件的处理
最后将布局赋值给弹出框即可
具体的代码:
AlertDialog.Builder builder = new AlertDialog.Builder(HomeActivity.this);
//利用这个方法 将布局文件转换成View
View view = View.inflate(getApplicationContext(), R.layout.alter_set_password, null);
et_password = view.findViewById(R.id.et_password);
et_confirm_password = view.findViewById(R.id.et_confirm_password);
btn_confirm = view.findViewById(R.id.btn_confirm);
btn_cancle = view.findViewById(R.id.btn_cancle);
btn_cancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
show.dismiss();
}
});
btn_confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}});
//给这个弹出框自定义布局
builder.setView(view);
//设置弹出框对象 能够进行下一步弹出框的消失 这是一个关键点
show = builder.show();
View view = View.inflate(getApplicationContext(), R.layout.alter_set_password, null);
builder.setView(view);
show = builder.show();
这三句代码最重要!!!
第四个知识点:GridView的使用
在一个项目中gridview组件也是比较常用的而一类组件,具体的用法如此下:
首先写一个想呈现出来的布局;
然后进行编写adapter即可
class HomeAdapter extends BaseAdapter {
//返回有多少项目的个数
@Override
public int getCount() {
return names.length;
}
//利用position获得每个项目的对象 根据自 己的需要来使用这个方法
@Override
public Object getItem(int position) {
return null;
}
//利用position获得对应项目的ID 根据自己的需要来使用这个方法
@Override
public long getItemId(int position) {
return position;
}
//为每一项目的样式赋值
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(getApplicationContext(),R.layout.home_item,null);
ImageView imageView = view.findViewById(R.id.iv_home_item);
TextView name = view.findViewById(R.id.iv_home_item_name);
TextView desc = view.findViewById(R.id.iv_home_item_desc);
imageView.setImageResource(icons[position]);
name.setText(names[position]);
desc.setText(descs[position]);
//一定要写returnView 不写的话会报:Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
return view;
}
}
今天就先复习到这,明天接着复习!!!