android学习总结

Android studio使用说明(红字表示需要重点学习的)
第一章,开发环境的配置与软件安装,运行中出错的解决方案 6
第二章,项目的创建方法(2种) 7
方法一 7
方法二 9
第三章,layout中各个控件的作用(只整理了已学的控件) 22
部分属性解析 22
View 23
TextView 23
Edittext 23
Button 23
RadioButton 23
Radiogroup 23
CheckBox 23
ImageView 24
ListView 24
GridView 25
RecyclerView 25
RecyclerView核心方法 26
创建布局管理器 27
LinearLayoutManager 27
GridLayoutManager 28
StaggeredGridLayoutManager 28
创建adapter 29
RecyclerView.Adapter<RecyclerView.ViewHolder>类自带的方法介绍 29
自带的方法一 29
自带的方法二 29
自带的方法三 29
自带的方法四 29
说明: 30
创建adapter的第一步 30
创建adapter的第二步 31
创建addItemDecoration 31
RecyclerView显示列表 31
RecyclerView显示网格 31
RecyclerView显示瀑布流 31
RecyclerView添加自定义分割线 31
RecyclerView设置点击事件 32
自定义MyDecoration实现RecyclerView.ItemDecoration中的方法解析 32
WebView 32
显示应用内置的html文件 32
显示网页 33
运行JS代码 33
STEP1:在onCreate方法中的设置 33
STEP2:新建类继承已有的类实现其中的方法,来实现运行JS代码,设置标题为网页标题,返回键返回到上一页而不是退出,使得点击新的连接后网页继续在WebView中打开而不是跳转使用别的浏览器等 33
Toast 35
Dialog 35
ProgressBar 36
ProgressDialog 36
CustomDialog 36
PopWindow 36
Fragment 36
Viewpager2 36
Tab 37
第四章,第三方库的使用(只整理了使用方法和已学的) 38
pl.droidsonroids.gif.GifImageView显示gif 38
使用前 38
使用方法 38
Glide显示网络图片 38
使用前 39
使用方法 40
ViewPager显示滑动页面(也属于RecyclerView) 41
使用前 41
使用方法 41
RecyclerView显示各类视图 41
使用前 41
使用方法 41
第五章,布局的方式及对应属性(只整理了已学的布局方式) 42
约束布局androidx.constraintlayout.widget.ConstraintLayout 42
线性布局LinearLayout 42
相对布局RelativeLayout 42
滚动布局ScrollView 42
第六章,其他问题 43
在用Class类来合并相似代码时报错解决方法: 43
更改文件夹名字后运行报错解决方法 43
如何复制项目 44
点击按钮闪退,页面空白,报错等 44
设置每个界面标题栏上面显示的名字 44
取消标题栏: 44
设置横竖屏: 45
设置默认启动的Activity 45
Activity之间跳转的方法 45
显式跳转 45
显式跳转1 45
显式跳转2 46
显式跳转3 46
显式跳转4 46
显式跳转5 46
隐式跳转 46
直接返回指定的Activity不会重复显示之前的(去除掉栈内Activity) 47
跳转到其他App 47
方法一: 47
方法二: 48
方法三: 48
Activity之间传数据的方法 48
事件监听 48
事件监听的方法 49
通过内部类实现 49
通过匿名内部类实现 49
通过事件源所在的类实现 49
通过外部类实现 49
Layout文件中onClick属性(针对点击事件)实现 49
给同一事件添加多个同种类型的监听器会怎样 49
防止recyclerview嵌套的recyclerview显示不全 49
防止recyclerview嵌套的recyclerview不能滑动 50
recyclerview细节定义 50
资源文件的创建与引用 51
文字资源文件 51
色彩资源文件 51
按压效果资源文件 51
选中效果资源文件 51
图片资源文件 52
drawableRight等方法引用图片 52
src引用图片 52
细节效果 53
设置TextView中/下划线 53
设置中划线 53
设置下划线 53
第一种,IAVA设置下划线 53
第二种,HTML设置下划线(会更改原先TextView中的text内容) 53
TextView跑马灯效果代码 53
Button设置圆角 54
Button设置描边效果 54
Button设置按压效果 55
弹出消息(几乎所有控件都可以设置弹出消息) 55
方法一 55
方法二 56
方法三 56
EditText监听输入 56
RadioButton设置按压,选中效果 57
新版AS的特性 57
获取当前activity的context的方法 57
AndroidManifest说明 58
声明自定义的activity的java类文件 58
设置启动activity(第一个显示的activity) 58
设置整个应用的主题和每个activity的主题 58
设置整个应用的名字 58
设置整个应用的桌面显示图标和在其它界面的显示图标 58
设置每个activity的名字 58
设置activity的启动方式(启动模式) 58
默认标准模式standard 59
Task栈顶复用模式singleTop 59
Task栈内复用模式singleTask 59
全局复用模式singleInstance 59
AndroidManifest各个属性解析 58
APK无法安装的解决方法 58
模块未指定的解决方法 59

第一章,开发环境的配置与软件安装,运行中出错的解决方案
见https://blog.csdn.net/weixin_43390435/article/details/114411947?spm=1001.2014.3001.5501

第二章,项目的创建方法(2种)
方法一
创建一个非中文名的项目(文件-New-新建项目)
编程语言选java
查看方式选project,如图
假定项目名称为new
在app-src-main-java-com.example.new中可找到主函数.MainActivity
其对应的布局文件
在MainActivity对应的layout文件中更改布局文件
在app-src-main-res-layout中可找到activity_main.xml
在activity_main.xml设置布局(即更改MainActivity的界面外观)
布局方式可选择下面一种:
默认布局androidx.constraintlayout.widget.ConstraintLayout
线性布局LinearLayout
相对布局RelativeLayout
创建需要的控件并设置属性
相对布局RelativeLayout需要设置android.id
使用androad.Layout_below来设置控件相对位置
MainActivity.java如何书写?
声明控件(即更改MainActivity中控件作用)
private 控件类型 控件名字;
示例:private Button 任意英文名字;
找到控件:任意英文名字=findViewById(R.id.a); a为你想要找到的控件的id,注意一定是在对应函数的布局文件中声明的而不是在其他函数布局文件中声明的,如果是在其他函数布局文件中声明的,编译后程序就会闪退
类型转换:任意英文名字=(Button)findViewById(R.id.a);注意这里不是新加一行而是在上面基础上改变
设置事件:任意英文名字.事件(new View.事件() {
这里会自动生成括号,
输入
Intent intent=new Intent(MainActivity.this,RedioButtionActivity.class);
}
设置事件示例:
任意英文名字.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,new.class);
startActivity(intent);//若无此行且控件是按钮,则按了也没用
}
});
MainActivity.java的示例

方法二
创建新项目,名字为eglistview(随便)
创建好后,在java-com.example.eglistview里新建一个包,即在
com.example.eglistview文件夹上右键,新建。包,如图,命名为listview

包名listview

在新建的listview包上右键-新建-JAVAClass-英文名字(这里名为listviewActivity)-superclass填入android.app.Activity-确定
在public class 英文名字extends Activity {
}
中写入oncreat会自动弹出提示,选择图中选中的选项

会自动变成如下界面

在layout里新建如图

命名为activity_listview

然后回到listviewActivity.java中
在super.onCreate(savedInstanceState);下输入
setContentView(R.layout.activity_listview);

然后在AndroidManifest.xml里声明,如图

下方输入

就是对新建类的声明
然后在MainActivity的layout中设置一个通往listView的按钮
打开MainActivity的布局文件,方式改为LinearLayout
并在MainActivity.java中
声明变量
private Button 通往listview;
寻找变量+类型转换
通往listview=(Button)findViewById(R.id.a);
设置点击事件
通往listview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,listviewActivity.class);
startActivity(intent);
}
});
使得按钮通往listView.java

然后设置listView的layout文件.xml
将布局改为LinerLayout
点,代码,重新格式化代码,系统会自动写好适合的初始代码

设置一个ListView

在listViewActivity.java中
声明变量
private ListView 使用listview;
寻找变量+类型转换
使用listview=(ListView)findViewById(R.id.a1);
设置点击事件
使用listview.setAdapter();
但是由于Listview的特殊性,在使用Adapter之前需要写一个Adapter
需要在app-main-java-com.example.listview-listview文件夹里创建新的类,新的类信息如下

创建后如图

重写一下它的方法,鼠标和光标移动到下面选中的蓝色代码上

按住Ctrl同时左键单击,会打开如图所示文件

同样,在其中也可以按住Ctrl同时左键单击
ListAdapter,和SpinnerAdapter
并在SpinnerAdapter用同样方法查看Adapter的源码
这些不重要,我们回到MyListAdaptor.java中

点前面红色灯泡会出现如图所示

点确定,自动变成如下样子

其中getCount()是列表元素个数,通过其中的return 0;进行更改,比如改为return 10;但是实际开发过程中,return后的数是不固定的
在其中写入代码如图,要添加两个private和一个public

在下面之前自动生成的几个函数中,public View getView定义列表长什么样子
其实Adaptor就是一个告诉你每一行/每一个网格长什么样子的适配器
在layout中新建LinerLayout型布局文件layout_lis_item.xml
先,代码-重新格式化代码
并设置
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“horizontal”
android:paddingLeft=“15dp”
android:paddingRight=“15dp”
android:paddingTop=“15dp”
android:paddingBottom=“15dp”
创建一个

在main-res-values-color.xml里可以增加自定义的颜色,下面是七色代码
#F43636
#F49836
#FFEB3B
#8BC34A
#009688
#03A9F4
#9C27B0
然后在layout_lis_item.xml里创建一个LinearLayout
并在其中镶嵌一个TextView
并且颜色已在main-res-values-color.xml中声明过





别忘了
在build.gradle加入依赖,否则显示网络图片的代码会飘红
repositories {
google()
jcenter()
}
implementation ‘com.github.bumptech.glide:glide:4.12.0’
annotationProcessor ‘com.github.bumptech.glide:compiler:4.12.0’
在AndroidManifest.xml里加网络权限,否则编译后无法加载图片

在AndroidManifest.xml里声明新加入的活动

在MyListAdaptor.java中更改列表长度返回值否则不报错不显示列表
public int getCount() {
return 10;
}
好了,这样ListView就可以运行成功了
ListView内容的显示全靠MyListAdaptor,在那里更改其内容显示
接着在listviewActivity.java里设置列表的点击和长按事件,如图中最后两个函数就是设置listview中的点击和长按事件的·
实战中可能会要求点击列表中某个项可以通向某个界面,把点击/长按事件更换就行了

上述的第二种创建项目的方法,适用于项目组件中需要ListView的
GridView与ListView很像,会在第三章,Layout中各个控件的作用做详细说明
理论上,与·ListView相近的都可以用这个方法

第三章,layout中各个控件的作用(只整理了已学的控件)
部分属性解析
match_parent大小等于父控件
wrap_content大小等于内容
android:layout_margin距离四周(上下左右)的边距
android:layout_marginTop距离上方的边距
android:gravity设置内部元素摆放的位置(居中,左对齐,右对齐等)
center_horizontal在水平方向居中(horizontal是水平的意思)
center_vertical在垂直方向居中(vertical是垂直的意思)
center在水平,垂直方向都居中
android:layout_weight=“1"设置子控件大小所占权重,比如设置第一个权重为1,第二个为2,实际效果是第一个占三分之一的面积,第二个占三分之二的面积,但是,这个权重是平分父控件剩下的部分的,所以与每个子控件初始所占大小android:layout_width等属性有关
android:layout_alignParentButton与父控件底部对齐(RelativeLayout的属性)
android:maxLines=“1"设置显示文字的最大行数为1
android:ellipsize=“end"如果文字没有显示完全,则在末尾加入省略号
android:drawableRight=”@drawable/c"在TextView里使用,可以在文字的右边放一个图片,图片不能太大否则会显示不了文字,避免使用ImageView
android:scaleType=”fitXY”可以设置图片在ImageView中的摆放形式,fitXY是在XY方向充满
android:button=”@drawable/checkbox_checked"可以设置自定义的button样式,值为@null可以使得button消失,可以设置成纯色,图片,也可以自己创建资源文件在其中设置根据选中的状态来更改图片,android:background=”@drawable/checkbox_checked"也是一样,或者说可以引用资源文件的属性都差不多
android:textAllCaps=“false"关闭Button上的text默认英文字母大写
View
显示一个视图,是Android中所有控件的基类
TextView
显示文本
Edittext
显示文本编辑框,暗示性文本
Button
显示按钮
RadioButton
显示一个一次性的,不能取消的单选按钮
Radiogroup
显示多个不能取消但可以更改的单选按钮
CheckBox
显示多个可以取消且可以更改的多选按钮
ImageView
显示图片
ListView
显示列表视图
在名为item_listview.xml的layout文件里设置每项的共同布局,在listadapter.java里的getView里设置每项的不同内容,在liatview.java里设置与点击位置有关的点击事件
在layout里新建一个ListView,除了基本属性外,可设置以下属性
android:divider=”@color/colorI"设置每行间距颜色
android:dividerHeight=“1dp"设置每行间距宽度
android:listSelector=”@drawable/listview_pressed"设置按压,选中效果
listadapter.java每个函数作用
getCount()有几行
getView(int position, View convertView, ViewGroup parent)设置每项的样子
在listadapter.java里需要加入以下内容
private Context mContext;
private LayoutInflater mLayoutIndlater;
public listadapter(Context context){
this.mContext=context;
mLayoutIndlater=LayoutInflater.from(context);
}
static class ViewHolder{
public ImageView pic_grid;
public TextView context_grid;
}//用来后续控制各项内部的控件,其它不变,根据在item_listview.xml中设置的控件而改变ViewHolder中的内容
在更改adapter后需要重新运行两次代码,改变才会生效
GridView
显示网格视图
在名为item_gridview.xml的layout文件里设置每项的共同布局,在gridadapter.java里的getView里设置每项的不同内容,在gridview.java里设置与点击位置有关的点击事件
在layout里新建一个GridView,除了基本属性外,可设置以下属性
android:numColumns=“5” 设置每行的网格数为5(最少5个)
android:horizontalSpacing="10dp"设置水平间距10dp
android:verticalSpacing="10dp"设置竖直间距10dp
gridadapter每个函数作用
getCount()设置格子总数
View getView(int position, View convertView, ViewGroup parent)设置每项的样子
private Context mContext;
private LayoutInflater mLayoutIndlater;
public gridadapter(Context context){
this.mContext=context;
mLayoutIndlater=LayoutInflater.from(context);
}
static class ViewHolder{
public ImageView pic_grid;
public TextView context_grid;
}//用来后续控制各项内部的控件,其它不变,根据在item_gridview.xml中设置的控件而改变ViewHolder中的内容
在更改adapter后需要重新运行两次代码,改变才会生效
RecyclerView
自定义视图
需要引入包,build.gradle的dependence里加入
implementation ‘com.android.support:design:25.3.1’
在java-com.example.egrecyclerview下新建一个包,名为recyclerview
在包内新建一个class,名为LinerAdapter
在public class LinerAdapter后加入
extends RecyclerView.Adapter然后点红色灯泡,就会自动生成相应代码,如下图

RecyclerView后续待补充
补充:
RecyclerView核心方法
在layout的xml文件里创建recyclerview控件,设置java文件对应的布局文件,声明控件,找到控件等都不再赘述
RecyclerView核心方法包括:
创建RecyclerView.java文件并在AndroidManifest.xml里声明,创建对应布局文件RecyclerView.xm(或者直接创建一个空activity继承Activity类,也可以,这样免去了声明和单独创建布局文件,继承Activity类是为了去掉应用上面的栏,也可以在AndroidManifest.xml里通过改变主题来去除)
在RecyclerView.java对应的布局RecyclerView.xml文件中创建RecyclerView控件
在RecyclerView.java中链接布局RecyclerView.xml文件
在RecyclerView.java中声明,找到RecyclerView控件
在RecyclerView.java设置布局管理器setLayoutManager(可控制总体布局的样式)
创建adapter.java,创建item.xml(每个子项的布局文件)
在item.xml中创建子项的控件,子项内部元素排列方式(在这里不需要设置子项的内容,但可以设置子项的通用内容,如果所有子项都有一个一样的文字“x”或一样的背景图片,则在这里设置,否则在adapter里根据子项的位置position来设置,也可以设置不同的viewholder)
在adapter.java中链接布局item.xml文件
在adapter.java中声明布局文件中的控件(即子项的通用控件)
在adapter.java中设置控件对应内容(根据position不同设置不同的内容,或不同的viewholder)
在RecyclerView.java设置adapter
在RecyclerView.java设置点击事件(根据不同位置点击返回的position值的不同来判定点击的子项位置,从而设置不同的事件)
在RecyclerView.java设置addItemDecoration(设置子项之间的间距大小,颜色等效果)
布局属性微调,使得显示更完美,可以设置各个布局文件中的各个控件的宽度和高度,来使得显示尽可能完美
创建布局管理器
布局管理器可以设置recyclerview的样式,根据不同的管理器以及管理器的参数,可以实现不同的样式,管理器类型及其对应可实现的布局样式,属性介绍如下:
LinearLayoutManager
布局样式:线性布局,用于显示横向或纵向的列表样式布局
实现方法:
list_recyclerview.setLayoutManager(new LinearLayoutManager(listrecyclerview.this));
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
属性介绍:
list_recyclerview.setLayoutManager(new LinearLayoutManager(listrecyclerview.this));中:
list_recyclerview指向本activity的布局文件中的recyclerview控件
listrecyclerview.this的listrecyclerview是本activity的名字
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);可以改变布局方向为水平滚动,默认是竖直滚动
Item的总个数在adapter的·getItemCount中设置
GridLayoutManager
布局样式:网格布局,用于显示网格样式布局
实现方法:
GridLayoutManager gridLayoutManager=new GridLayoutManager(gridrecyclerview.this,3);
gridLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
grid_recyclerview.setLayoutManager(gridLayoutManager);
属性介绍:
grid_recyclerview.setLayoutManager(new GridLayoutManager(gridrecyclerview.this,3));中:
grid_recyclerview指向本activity的布局文件中的recyclerview控件
gridrecyclerview.this的gridrecyclerview是本activity的名字,后面的3代表每行有几个网格
gridLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);可以设置布局方向为水平滚动,默认是竖直滚动
注意,如果设置水平滚动,那么item的根布局linearlayout的android:layout_width=“wrap_content”
竖直滚动则为android:layout_width=“match_parent”
每个子布局之间的分割线通过自定义内部类后,调用grid_recyclerview.addItemDecoration来实现
Item的总个数在adapter的·getItemCount中设置
StaggeredGridLayoutManager
布局样式:瀑布流布局,用于根据item的位置显示不同内容的类似网格样式布局
实现方法:
pu_recyclerview.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
属性介绍:
VERTICAL代表设置滚动方向为竖直滚动
数字2代表纵向分为两列
Item的总个数在adapter的·getItemCount中设置
创建adapter
布局管理器规定布局类型,adapter设置布局内每个子布局的样式
首先通过新建一个类(不需要在AndroidManifest.xml里声明)继承RecyclerView.Adapter<RecyclerView.ViewHolder>类,点击红色灯泡导入来实现其中的方法,默认自带的方法如下:
RecyclerView.Adapter<RecyclerView.ViewHolder>类自带的方法介绍
自带的方法一
class LinearViewHolder2 extends RecyclerView.ViewHolder用于创建一个新的holder,名字叫LinearViewHolder2在其中声明holder的子布局文件中具有的控件,并通过id找到控件(导入方法后,默认自带一个LinearViewHolder)
自带的方法二
onCreateViewHolder设置每个holder对应的布局文件
自带的方法三
onBindViewHolder设置每个holder对应的布局文件的每个控件中填充的内容
自带的方法四
getItemCount设置子项的总数
说明:
采用一个holder,只能跟据位置position的值改变布局内容,而不能改变固定的布局样式
采用多个holder,可以跟据位置position的值设置不同的holder,给每个holder设置不同的布局样式,再跟据position的值改变不同布局样式对应的内容
即:
创建adapter的第一步
创建不同的holder以及对应的布局文件(作为recyclerview的子布局)
class LinearViewHolder1 extends RecyclerView.ViewHolder{
TextView textView11,textView12;
ImageView imageView;
public LinearViewHolder1(@NonNull View itemView) {
super(itemView);
textView11=itemView.findViewById(R.id.holder1recycler_textview1);
textView12=itemView.findViewById(R.id.holder1recycler_textview2);
imageView=itemView.findViewById(R.id.holder1recycler_imageview);
}
}
class LinearViewHolder2 extends RecyclerView.ViewHolder{
TextView textView21,textView22;
ImageView imageView;
public LinearViewHolder2(@NonNull View itemView) {
super(itemView);
textView21=itemView.findViewById(R.id.holder2recycler_textview1);
textView22=itemView.findViewById(R.id.holder2recycler_textview2);
imageView=itemView.findViewById(R.id.holder2recycler_imageview);
}
}
创建adapter的第二步
重写getItemViewType方法,跟据不同的位置position或数据返回不同的值>>在onCreateViewHolder里利用if(viewType==0)来判断viewType的值进而确定对应的位置position>>在onCreateViewHolder里设置每个viewType(即每个position)返回的holder>>设置holder的布局文件的填充内容
创建addItemDecoration
用于细化子布局之间的显示样式细节
使用方法及参数说明如下:
RecyclerView显示列表
RecyclerView显示网格
RecyclerView显示瀑布流
RecyclerView添加自定义分割线
分割线颜色是recyclerview的背景颜色,通过android:backgroud设置,分割线的位置,宽度通过outRect.set属性设置
mRvHor.addItemDecoration(new MyDecoration());
class MyDecoration extends RecyclerView.ItemDecoration{

public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    super.getItemOffsets(outRect, view, parent, state);
    outRect.set(0,0,”1dp”,0);
}//添加1dp的分割线,在valies的dimera.xml设置分割线高度

}

RecyclerView设置点击事件
自定义MyDecoration实现RecyclerView.ItemDecoration中的方法解析
RecyclerView.ItemDecoration中的方法说明如下
onDraw在子项绘制之前先绘制一些内容
onDrawOver在子项绘制完成后再在它上面绘制一些内容
getItemOffsets在子项周边设置一些内容

WebView
显示网页窗口
首先在AndroidManifest.xml中声明Activity并设置网络权限

显示应用内置的html文件
加载本地的html不需要开启JS支持
需要在main文件夹下右键选择new>>Folder>>assetsFolder来新建一个assets文件夹,将html文件放入其中,在文件夹中的文件不会被编译
使用
webView.loadUrl(“file:///android_asset/a.html”);
来加载内置的的a.html文件,注意,a.html放入到的新建的文件夹名字叫assets
但是加载时地址是file:///android_asset/a.html,比assets文件夹少了一个s,如果写错了就不能加载出来了
显示网页
可以实现Native和JavaScript相互调用
显示网页的关键代码:
网页视图=(WebView)findViewById(R.id.wv);
网页视图.getSettings().setJavaScriptEnabled(true); //开启JS支持
网页视图.loadUrl(“https://m.baidu.com”);
运行JS代码
通过loadUrl和evaluateJavascript的方法都可以直接运行JS代码,以实现各种JS的效果
STEP1:在onCreate方法中的设置
webView2.getSettings().setJavaScriptEnabled(true);//使得支持JS
webView2.setWebViewClient(new mywebviewclient());//运行mywebviewclient中的JS代码,设置网页加载开始,完成时候弹出提示框
webView2.setWebChromeClient(new myWebChromeClient());//设置标题为网页的标题
STEP2:新建类继承已有的类实现其中的方法,来实现运行JS代码,设置标题为网页标题,返回键返回到上一页而不是退出,使得点击新的连接后网页继续在WebView中打开而不是跳转使用别的浏览器等
class mywebviewclient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
} //使得在webview中继续加载链接
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d(“webview”, “started”);
webView2.loadUrl(“javascript:alert(‘网页加载开始,通过loadUrl执行javascript来弹出提示框,也可以执行其它js代码’)”);
webView2.evaluateJavascript(“javascript:alert(‘网页加载开始,通过evaluateJavascript执行javascript来弹出提示框,也可以执行其它js代码’)”,null);
}//获取日志,IS加载网页开始和结束的对话框
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d(“webview”, “finished”);
webView2.loadUrl(“javascript:alert(‘网页完毕开始,通过loadUrl执行javascript来弹出提示框,也可以执行其它js代码’)”);
webView2.evaluateJavascript(“javascript:alert(‘网页加载完毕,通过evaluateJavascript执行javascript来弹出提示框,也可以执行其它js代码’)”,null);
}
}
class myWebChromeClient extends android.webkit.WebChromeClient{
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}//加载进度条
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
setTitle(title);
}//显示标题
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK && webView2.canGoBack()){
webView2.goBack();
return true;
}//使得按返回时返回上一页而不是推出浏览器
return super.onKeyDown(keyCode, event);
}

Toast
用于弹出悬浮消息,可定义弹出位置,弹出大小,弹出内容可以为文字和图片,在layout里设置弹出的样式,在JAVA里设置弹出
注意
使用
Toast.makeText(EventActivity.this, “需要弹出的消息”, Toast.LENGTH_SHORT).show();
可以使得按钮每次按下都能弹出消息
但是用自定义的类
ToastUtil.showMsg(EventActivity.this, “需要弹出的消息”);
虽然能取消延迟显示,但是只能弹出一次消息,弹完后再点就没反应了
Dialog
用于弹出对话框,可以做选择和进一步跳转
ProgressBar
用于显示进度条,或加载的圈圈
所有的控件都可以用style属性来引用一个自定义的文件,可以是图片,或自己写的资源文件,在vilues-styles.xml里
ProgressDialog
用于显示与进度相关的对话框,比如在一个对话框里显示进度条,显示一个在旋转的圈圈
CustomDialog
用于显示一个自定义的对话框,需要在java文件夹下新建一个包,名为widget在com.example.egrecyclerview包下新建一个类
public class CustomDialogActivity extends AppCompatActivity
PopWindow
用于显示一个类似抽屉的窗口,可以点击按钮来使它出现/隐藏
Fragment
用于点击按钮后在当前页切换到另一个视图的内容(不改变总体布局,只改变局部布局)或者在两个Activity之间传递参数
Viewpager2
显示一个可以用来滑动的界面(需要添加依赖)
Tab

第四章,第三方库的使用(只整理了使用方法和已学的)
使用都要在搜索里搜索sync
pl.droidsonroids.gif.GifImageView显示gif
使用前
使用之前需要在app的build.gradle第二行新起一行,加入如下代码
dependencies {
implementation ‘pl.droidsonroids.gif:android-gif-drawable:1.2.2’
}
使用方法
显示gif动态图片的方法:
<pl.droidsonroids.gif.GifImageView
android:id="@+id/f"
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_below="@id/e"
android:layout_centerInParent=“true”
android:src="@drawable/a"/>这个代码可显示gif图片a.gif放到drawable中

Glide显示网络图片
在想要显示图片的页面对应的java文件中输入代码
(下面这个在最前面声明变量)
private ImageView 加载网络图片;
(下面这个在本来就有的
setContentView(R.layout.activity_image_view_act);下面输入,注意a5需要先在layout里定义属性)
加载网络图片=(ImageView)findViewById(R.id.a5);
(下面这个在加载网络图片=(ImageView)findViewById(R.id.a5);下一行输入)
Glide.with(this).load(“网络图片的地址”).into(加载网络图片);
注意,图片地址必须能在浏览器里直接打开图片

使用前
【必选】
build.gradle中第二行起加入.
repositories {
google()
jcenter()
}
在dependencies里加入
implementation ‘com.github.bumptech.glide:glide:4.12.0’
annotationProcessor ‘com.github.bumptech.glide:compiler:4.12.0’
【必选】
在Android Manifest里加入下面一行,放到第二行与<application对齐

【可选】【经测试,不加仍然正常】
在res中新建xml文件夹,在xml文件夹新建XML资源文件network_security_config.xml
文件中输入如下代码

<?xml version="1.0" encoding="utf-8"?> 在Android Manifest里的

ViewPager显示滑动页面(也属于RecyclerView)
使用前
加入依赖库
implementation ‘androidx.appcompat:appcompat:1.1.0-alpha05’//Viewpager的依赖库
implementation ‘com.android.support:design:28.0.0’//Viewpager的依赖库
implementation ‘androidx.viewpager2:viewpager2:1.0.0-beta02’//Viewpager的依赖库
使用方法
待补充
RecyclerView显示各类视图
使用前
implementation ‘com.android.support:design:28.0.0’
使用方法
待补充

第五章,布局的方式及对应属性(只整理了已学的布局方式)
约束布局androidx.constraintlayout.widget.ConstraintLayout
线性布局LinearLayout
相对布局RelativeLayout
滚动布局ScrollView
ScrollView中的元素只能有一个,可以使得元素滚动,但是,可以在其中放入一个线性布局LinearLayout再给LinearLayout设置子元素
即可实现多个元素的滚动
扩展一下,可以先弄一个ScrollView,里面放一个LinearLayout
再往LinearLayout里加Button或者TextView等等插件,也可以再加入一个ScrollView,然后就可以随意滚动了
ScrollView实现上下滚动
HorizontalScrollView实现左右滚动

第六章,其他问题
在用Class类来合并相似代码时报错解决方法:
private class OnClick implements View.OnClickListener红线报错的解决方法
不要自己写后面的括号,写完这一行后,点前面的灯泡,导入,会自动弹出括号和括号内的内容,变成如下样子
private class OnClick implements View.OnClickListener{

    @Override
    public void onClick(View v) {

    }

}
更改文件夹名字后运行报错解决方法
文件夹改名后,在外部文件夹,删除.gradle , .idea
构建->clean project ,再点击 rebuild project。
如何复制项目
复制项目可通过,新建项目切换到project视图后,在AS里打开两个项目,Ctrl多选文件夹复制到对应文件夹里,再改AndroidManifest就行
点击按钮闪退,页面空白,报错等
闪退:
检查是否在AndroidManifest.xml里声明
检查在使用包之前是否已在build.gradle中添加依赖
检查JAVA文件对应的布局文件中元素的ID是否对应
页面空白:
检查是否给了联网权限并打开数据
检查元素个数的返回值是否为0
设置每个界面标题栏上面显示的名字
在AndroidManifest.xml里设置形如

取消标题栏:
取消任意一个界面的标题栏,在AndroidManifest.xml里设置形如

取消全局标题栏,给<application
的android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
设置横竖屏:
不设置根据手机方向会自动切换
似乎只能单独的对每个Activity设置
锁定默认横屏显示

锁定默认竖屏显示

设置默认启动的Activity
只需要在AndroidManifest.xml里设置形如


    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Activity之间跳转的方法 显式跳转 显式跳转1 Intent intent=new Intent(AActivity.this,BActivity.class); startActivity(intent); 显式跳转2 Intent intent=new Intent(); intent.setClass(AActivity.this,BActivity.class); startActivity(intent); 显式跳转3 //通过输入完整Activity的路径跳转,可以在右边的目录看完整路径,从java文件夹下开始算起 Intent intent=new Intent(); intent.setClassName(AActivity.this, "jump.BActivity"); startActivity(intent); 显式跳转4 Intent intent=new Intent(); intent.setComponent(new ComponentName(AActivity.this, BActivity.class)); startActivity(intent); 显式跳转5 Intent intent=new Intent(); intent.setComponent(new ComponentName(AActivity.this, "jump.BActivity")); startActivity(intent); 隐式跳转 首先在AndroidManifest.xml里 将想要跳转到的Activity(的声明形式由 改为 然后在两项的中间输入下面代码 注意: 中最后的单词一定别忘了改,是DEFAULT 然后在需要跳转的地方输入 Intent intent=new Intent(); intent.setAction("com.anykey"); startActivity(intent); 直接返回指定的Activity不会重复显示之前的(去除掉栈内Activity) Intent intent=new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); intent.setClass(A.this,B.class); startActivity(intent); 跳转到其他App 可以通过某些跳转方法来调用其他应用 方法一: Intent intent=new Intent(); intent.setAction("想要调用的其他应用的包名"); startActivity(intent); 方法二: Intent intent=new Intent(); intent.setComponent(new ComponentName(AActivity.this, "想要调用的其他应用的包名")); startActivity(intent); 方法三: Intent intent=new Intent(); intent.setClassName(AActivity.this, "想要调用的其他应用的包名"); startActivity(intent); Activity之间传数据的方法 参考egRecyclerView中的AActivity和BActivity实现 事件监听 监听的三要素:事件源,事件,事件监听器 事件监听的方法 通过内部类实现 通过匿名内部类实现 通过事件源所在的类实现 通过外部类实现 Layout文件中onClick属性(针对点击事件)实现 在java文件里设置下面的函数(Adapter里不能设置) public void showToast(View view){ Toast.makeText(this, "借助android:onClick=\"showToast\"弹出消息,在viewpager.java里设置", Toast.LENGTH_SHORT).show(); } 在layout文件里需要设置点击事件的控件设置属性 android:onClick="showToast" 即可实现点击该按钮触发函数showToast中的点击事件 给同一事件添加多个同种类型的监听器会怎样 只有最后设置的监听器有效,其他都会无效 并且在Layout文件中设置的监听器的优先级最低,如果除了在Layout文件中设置的监听器外还有其他监听器,那么会执行其他监听器而不会运行Layout文件中设置的监听器(无论设置的顺序) 防止recyclerview嵌套的recyclerview显示不全 在

}//点击事件可以在adapter里面写也可先在adapter里写一个接口,然后在这里写

资源文件的创建与引用
文字资源文件
在values文件夹的strings.xml里加入一行代码
文字内容
当你想要引用一行内容为“文字内容”文字时,只需要设置
android:text="@string/text_source1"
即可,避免重复多次写同一文字
色彩资源文件
按压效果资源文件

<?xml version="1.0" encoding="utf-8"?> //按压的时候 //未按压的时候 选中效果资源文件 <?xml version="1.0" encoding="utf-8"?> //选中的时候 //未选中的时候 图片资源文件 drawableRight等方法引用图片 android:drawableRight="@drawable/c"在TextView里使用,可以在文字的右边放一个图片c,图片不能太大否则会显示不了文字,避免使用ImageView src引用图片 android:src="@drawable/a" 可以在ImageView和pl.droidsonroids.gif.GifImageView中引用图片,前者引用静态图片,后者引用gif图片(需要加依赖,具体见关于显示gif图片那一章) 细节效果 设置TextView中/下划线 设置中划线 private TextView 设置中划线; 设置中划线=(TextView)findViewById(R.id.a); 设置中划线.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);//中划线 设置中划线.getPaint().setAntiAlias(true);//取消锯齿 设置下划线 第一种,IAVA设置下划线 private TextView 设置下划线; 设置下划线=(TextView)findViewById(R.id.a); 设置下划线.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG );//下划线 设置下划线.getPaint().setAntiAlias(true);//取消锯齿 第二种,HTML设置下划线(会更改原先TextView中的text内容) private TextView HTML设置下划线; HTML设置下划线=(TextView)findViewById(R.id.b); HTML设置下划线.setText(Html.fromHtml(" 新的内容")); TextView跑马灯效果代码 Button设置圆角 在drawable下新建资源文件,内容如下 <?xml version="1.0" encoding="utf-8"?> //定义背景颜色 //定义圆角 然后layout中设置button的背景为这个资源文件即可 Button设置描边效果 在drawable下新建资源文件,内容如下 <?xml version="1.0" encoding="utf-8"?> 然后layout中设置button的背景为这个资源文件即可 Button设置按压效果 在drawable下新建资源文件,内容如下 <?xml version="1.0" encoding="utf-8"?> //按压的时候 //未按压的时候 然后layout中设置button的背景为这个资源文件即可 弹出消息(几乎所有控件都可以设置弹出消息) 方法一 Layout中的控件添加属性 android:onClick="showToast" 再在JAVA文件加入代码 public void showToast(View view){ Toast.makeText(this, "借助android:onClick=\"showToast\"弹出消息", Toast.LENGTH_SHORT).show(); } 即可显示提示消息 方法二 使用setOnClickListener方法设置点击事件,再用 Toast.makeText(general.this, "借助setOnClickListener弹出消息", Toast.LENGTH_SHORT).show(); 即可显示提示消息 注意两种方法的this不一样,general是当前按钮所在的activity的名字,第一种方法用于简化几个按钮点击事件一样的情况,若点击事件不一样则用第二种方法 方法三 此方法用于设置在RadioGroup里选中一个RadioButton时弹出消息,这里弹出RadioButton上的文字内容 private RadioGroup RadioGroup弹出消息; RadioGroup弹出消息=(RadioGroup)findViewById(R.id.e); RadioGroup弹出消息.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton=(RadioButton)group.findViewById(checkedId); Toast.makeText(general.this,radioButton.getText() , Toast.LENGTH_SHORT).show(); } });//打印选中的radiobutton的文字

EditText监听输入
private EditText 监听输入;
监听输入=(EditText)findViewById(R.id.d);
监听输入.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
Toast.makeText(general.this, “开始输入”+s, Toast.LENGTH_SHORT).show();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Toast.makeText(general.this, “正在输入”+s, Toast.LENGTH_SHORT).show();
}
@Override
public void afterTextChanged(Editable s) {
Toast.makeText(general.this, “内容为”+s, Toast.LENGTH_SHORT).show();
}
});
RadioButton设置按压,选中效果
见“资源文件的创建与引用”“按压效果资源文件”“选中效果资源文件”
新版AS的特性
声明控件不需要加private了,直接声明控件类型和控件名字即可
Findvirebyid不需要强制类型转换了(但是部分返回参数不一致的还是需要转换)
获取当前activity的context的方法
除了activityname.this外,还可以使用getApplicationContext()
AndroidManifest说明
每个activity和serve都需要在其中声明
但是adapter和fragment不需要声明
它的作用如下:
声明自定义的activity的java类文件



中间可对activity的属性进行设置
设置启动activity(第一个显示的activity)



设置入口activity
设置整个应用的主题和每个activity的主题
设置整个应用的名字
在values-strings.xml里设置
设置整个应用的桌面显示图标和在其它界面的显示图标
android:icon="@drawable/icon"
android:roundIcon="@drawable/icon"
设置每个activity的名字
在每个activity里添加属性android:label=
设置activity的启动方式(启动模式)
默认标准模式standard
不管activity之前是否已经启动过,每启动一次都会创建一个activity实例
Task栈顶复用模式singleTop
如果activity在本栈顶,那么就会复用,不会创建一个新的activity实例,如果不在栈顶,或根本不存在,就会创建一个新的实例
Task栈内复用模式singleTask
如果activity在本栈顶或栈内,那么就会复用,不会创建一个新的activity实例,如果不在本栈顶或栈内,即在这个栈内根本不存在,就会创建一个新的实例

全局复用模式singleInstance
在所有任务栈中查询activity,有则复用,无则重新创建实例
AndroidManifest各个属性解析
android:allowBackup="true"允许第三方应用备份其数据
android:supportsRtl="true"从右到左布局-



设置入口activity

APK无法在其它机器上安装的解决方法
首先在保证SDK(安卓版本)对应的情况下
第一步,签名(build-General Signed Bundle/Apk-随便选择一个模式-next-创建新的(密钥等信息随便填)/选择一个已有的签名文件(需要知道对应的密钥信息))接下来一路next,选择relase,下面两个选项都选上,最后完成
第二部,打开gradle所在的目录,在gradle.properties加入
android.injected.testOnly=false
第三步,运行
模块未指定的解决方法
File-new-new midule

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android学习可以从以下几个方面入手:1.学习Java语言基础;2.学习Android开发框架和API;3.实践开发Android应用程序。可以通过阅读相关书籍、参加培训课程、观看视频教程等方式进行学习。同时,多进行实践,不断尝试开发不同类型的应用程序,可以加深对Android开发的理解和掌握程度。 ### 回答2: 学习Android开发需要掌握以下几个步骤: 1. 学习Java编程语言:Android开发主要使用Java语言作为开发基础。可以通过参加Java编程课程、自学Java书籍或在线资源来掌握Java编程的基础知识和语法。 2. 了解Android平台:学习Android开发前,需要了解Android操作系统的基本架构和工作原理,了解Android的开发环境和开发工具。可以通过官方文档、博客、书籍等资源来深入学习Android平台知识。 3. 学习Android API和框架:Android提供了丰富的API和框架用于开发应用。需要学习Android的核心库和常用的API,如Activity、Fragment、Intent、ListView等。此外,还可以学习一些常用的开源框架,如Retrofit、OkHttp、Glide等,以提高开发效率。 4. 实践开发项目:理论学习之后,需要通过实践来提升自己的Android开发技能。可以通过参加一些开源项目、自己做一些小应用或参与竞赛等方式来实践开发。通过实践,可以熟悉开发流程、熟练使用工具和解决问题的能力。 5. 多参考资料和交流经验:学习Android开发过程中,可以阅读一些高质量的书籍、博客、教程等,了解最新的技术发展动态。此外,可以参加一些开发者社区、论坛或研讨会,与其他开发者进行交流和学习经验。 总之,学习Android开发需要通过深入学习Java编程语言、了解Android平台和API、实践开发项目等方式来掌握基础知识和提升技能。不断学习和实践是学好Android开发的关键。 ### 回答3: 学习Android主要可以从以下几个方面入手: 1. 学习基础知识:首先,要了解Android的基础知识,包括Android的架构、组件等。可以通过阅读相关书籍、官方文档、网上教程等途径获取基础知识。 2. 学习开发工具:Android开发通常使用Java语言和Android Studio开发工具。因此,需要学习Java编程语言以及掌握如何使用Android Studio进行项目开发。 3. 实践项目:理论知识只有通过实践才能真正掌握。可以选择一些小型的Android项目进行实践,如开发一个简单的计算器应用或者一个天气预报应用等。通过实践不断提升自己的编程能力和解决问题的能力。 4. 学习开发技巧:在实践过程中,要时刻关注Android开发的最佳实践和技巧,如优化性能、处理数据存储、设计用户界面等。可以通过阅读开发者博客、参加培训课程或者交流论坛来学习开发技巧。 5. 深入学习:一旦掌握了基础知识和开发技巧,可以继续深入学习Android的高级特性,如网络通信、多线程处理、数据库操作等。可以通过阅读更深入的书籍、参与开源项目或者研究一些最新的技术来提升自己的能力。 总结来说,学习Android需要有一定的编程基础和持续的学习态度。通过不断实践和学习,我们可以逐渐掌握Android开发的技能,并且不断提升自己的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值