主要见课件的中级控件
bundle内部存放的数据结构是Map
焦点变更监听器
-
Ø 编辑框点击两次后才会触发点击事件,因为第一次点击只触发焦点变更事件,第二次点击 才触发点击事件。
-
Ø 若要判断是否切换编辑框输入,应当监听焦点变更事件,而非监听点击事件。
-
Ø 调用编辑框对象的setOnFocusChangeListener方法,即可在光标切换之时(获得光标和
androidx.appcompat.widget.AppCompatButton来解决按钮默认或者是颜色默认的问题
button_test1 <Switch>: Touch target size too small:
人们可以点击、触摸或以其他方式交互的任何屏幕元素都应该足够大,以便进行可靠的交互。考虑确保这些元素的宽度和高度至少为 48dp。
正确的修复方法是将 minHeight 或 minWith 添加到组件中
::什么意思?
lamada表达式
selector的item的状态表示如果放在第二行会无法识别,一定要放第一行!!!!
Toast.makeText(this,"请输入11位的手机号",Toast.LENGTH_LONG).show();
^
方法 Toast.makeText(Context,CharSequence,int)不适用
(参数不匹配; <匿名OnFocusChangeListener>无法转换为Context)
方法 Toast.makeText(Context,int,int)不适用
(参数不匹配; <匿名OnFocusChangeListener>无法转换为Context)
上面那段代码是段错误的代码。报错的地方就是Intent intent = new Intent(this,NextActivity.class);这个地方。为什么了?因为在匿名内部类中,如果外部类(MainActivity)没有实现对应的事件监听器接口(比如这里的OnClickListener),是不能随便使用this的。因为我们是直接new的匿名内部类,这样就会把这个this当做是OnClickListener。所以才会报错。
这种情况的解决办法就是用MainActivity.this代替this!
注:如果外部类(MainActivity)实现对应的事件监听器接口(比如这里的OnClickListener):public class MainActivity extends Activity implements OnClickListener{ ……….. }。那么这就是属于使用Activity本身作为事件监听器类的范畴,这我已在别的博客文章里做了专门的介绍,可移步前看。
TextUtils.isEmpty(phone)
v.getWindowToken()
java.lang.ClassCastException: androidx.emoji2.text.SpannableBuilder cannot be cast to android.view.View
at com.example.day04__androidstudy.Intermediate_controls.TextWatcherActivity$1.afterTextChanged(TextWatcherActivity.java:40)
editable中存放格式text的内容
关闭键盘:
InputMethodManager systemService = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE);
systemService.hideSoftInputFromWindow(v.getWindowToken(), 0);
datePicker.getMonth()
的取值是0——11,因此输出的时候需要+1
找回密码demo:
checkBox3.setVisibility(View.VISIBLE);来设置checkbox是否可见
defValue 是在 prefs 文件中没有匹配键时返回的值
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="gender" value="false" />
<string name="name">yang</string>
<string name="Tel">1234566</string>
<int name="age" value="21" />
</map>
Order by ASC升序、DESC降序
利用单例模式获取数据库帮助器的唯一实例:
public static UserDBHelper getInstance (Context context){
}
构造方法:
private UserDBHelper(Context context){
super(context,DB_NAME,null,DB_VERSION);
}
nullColumnHack(插入的值为空时,要让sql知道插到那一列)
private SQLiteDatabase mRDB = null;
private SQLiteDatabase mWDB = null;
public SQLiteDatabase openReadLink(){
if (mRDB == null || !mRDB.isOpen())
mRDB = mHelper.getReadableDatabase();
return mRDB;
}
public SQLiteDatabase openWriteLink(){
if (mWDB == null || !mWDB.isOpen())
mWDB = mHelper.getWritableDatabase();
return mWDB;
}
public void closeLink(){
if (mRDB != null && mRDB.isOpen()){
mRDB.close();
mRDB = null;
}
if (mWDB != null && mWDB.isOpen()){
mWDB.close();
mWDB = null;
}
}
Path: /storage/emulated/0/Android/data/com.example.day06__androidstudy/files/Download/1690336191443.txt
Android 13(API 33)读写SD卡权限的调整适配
在Android13前读取SDcard 的内容只需要一个权限:
android.permission.READ_EXTERNAL_STORAGE
但是在Android 13以后这个权限被细化成了三个:
public static final String READ_MEDIA_AUDIO = "android.permission.READ_MEDIA_AUDIO";
public static final String READ_MEDIA_IMAGES = "android.permission.READ_MEDIA_IMAGES";
public static final String READ_MEDIA_VIDEO = "android.permission.READ_MEDIA_VIDEO";
如果是升级Android13之前就已经具有读写SDK的权限,那么升级到13之后,自己具有上述三个权限。
如果是升级Android13之后新装的应用,并且targetSDK小于33,则申请READ_EXTERNAL_STORAGE权限时,会自动转化为对上述三个权限的申请,权限申请框只一个如果是升级Android13之后新装的应用,并且targetSDK大于等于33,则申请READ_EXTERNAL_STORAGE权限时会自动拒绝(同理WRITE_EXTERNAL_STORAGE也是一样)。必须申请上面三个权限才可以。
The `<activity>` element must be a direct child of the <application> element
<activity> 元素必须是 <application> 元素的直接子元素
反复尝试后发现是命名错误:
1,图片命名规则与变量相同,只能以下划线和字母为开头
2,图片命名a. .jpg,前面一个点是图片名,即图片名为a.,格式后缀为.jpg,windows下可接受 . 作为命名,而res中则是非法命名。
fileOutputStream.flush();//写完之后一定刷新!!!
屏幕旋转相当于重新开启一个Activity
Application的生命周期
1、onCreate() 程序创建的时候执行
2、onTerminate()程序终止的时候执行
在模拟环境下执行。当终止应用程序对象时调用,不保证一定被调用,
当程序是被内核终止以便为其他应用程序释放资源,那么将不会提醒,
并且不调用应用程序Application对象的onTerminate方法而直接终止进程。
3、onLowMemory() 低内存的时候执行
好的应用程序一般会在这个方法里面释放一些不必要的资源来应付当后台程序已经终止,
前台应用程序内存还不够时的情况。
4、onConfigurationChanged(Configuration newConfig) 配置改变时触发这个方法。
5、onTrimMemory(int level)程序在进行内存清理时执行
Application的应用和生命周期
Application的应用和生命周期_application level应用系统-优快云博客
_id是为了保障移植性
bitmap.recycle():回收位图对象
//外部存储的私有空间:
//app删除后就没有了
//Path: /storage/emulated/0/Android/data/com.example.day06__androidstudy/files/Download/1690336191443.txt
// directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString();
//外部存储的公共空间:
//app删除后还有
// Path: /storage/emulated/0/Download/1690336826568.txt
directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
//内部存储私有空间:
//Path: /data/user/0/com.example.day06__androidstudy/files/1690337211790.txt
//删除后包没有了
//directory = getFilesDir().toString();