Android视频课程学习
网址:
https://www.bilibili.com/video/av38409964?from=search&seid=10211011589304053788
android使用gradle构建项目
这是manifest里的大概配置
第二章UI组件
2.1布局管理器
主要讲线性布局(LinearLayout)和相对布局(RelativeLayout)
LinearLayout常用属性
android:id //寻找控件标志
android:layout_width
matchparent
warpcontent
具体数字的单位采用dp
android:layout_height
android:background
android:layout_margin //外边距
android:layout_padding //内边距
android:orientation //布局方向
android:gravity//用于元素内的居中靠左什么的
android:weight // 用于布局的权重分配 如果width有数字,那么剩余部分按照权重进行分配
RelativeLayout常用属性
android:layout_toLeftOf
android:layout_toRightOf
android:layout_alignBottom
android:layout_alignParentBottom
android:layout_below
布局之间可以相互嵌套
2.2TextView
Text的大小一般用sp
一些特殊属性
android:maxlines
android:text
android:textColor
android:textSize
android:ellipsize //超过显示范围显示...
android:drawableRight
android:drawablePadding
学习过程中遇到了一个问题,就是继承Activity和APPCompactActivity运行的问题,要调整style文件里AppTheme的样式
在java中可以设置下划线和中划线
myTextView3 = findViewById(R.id.textview3);
myTextView3.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);//中划线
myTextView3.getPaint().setAntiAlias(true);//消除锯齿
myTextView4 = findViewById(R.id.textview4);
myTextView4.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);//中划线
myTextView4.getPaint().setAntiAlias(true);//消除锯齿
在java中也可以引入html
setText(。。。
2.3Button
其实是一个textview的子类
可以自定义按钮形状
在drawable文件夹下添加shape形状的东西
填充的话用<solid/>
圆角的话用<corners />
描边的话用<stroke/>
然后在layout的文件里的background设置
xml
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
android:background="@drawable/test_btn1"/>
shape
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ec973d"/>
<corners android:radius="5dp" />
</shape>
触摸时变色
在drawable文件夹下添加selector然后设置item再设置shape
有个属性是android:state_pressed="true"//是否被按压
selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="#8ae952"/>
<corners android:radius="5dp" />
</shape>
</item>
<item android:state_pressed="false">
<shape>
<stroke android:color="#8ae952"
android:width="3dp"/>
<corners android:radius="5dp" />
</shape>
</item>
</selector>
xml上可以直接onclick设置方法
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮5"
android:layout_marginBottom="10dp"
android:background="@drawable/test_btn4"
android:onClick="showToast"
/>
写的对应的java方法
public void showToast(View view){
Toast.makeText(this,"这是按钮5",Toast.LENGTH_LONG).show();
}
java里也可以通过对控件的声明来调用方法
private Button MyBtn6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_view);
MyBtn6 = findViewById(R.id.btn_view_6);
MyBtn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ButtonViewActivity.this,"这是按钮6",Toast.LENGTH_SHORT).show();
}
});
}
2.4EditText
常用属性
hint: //提示
inputType: //可以设置输入密码手机号什么的
password
number
ps:textAllCaps="true"是否全部都大写
password.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d("密码编辑框",s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
2.5RadioButton
<RadioGroup>
<RadioButton
android:checked//默认选中,有这个就必须有id
android:button="@null"//要换成自定义样式的修改
/>
<RadioButton/>
<RadioButton/>
</RadioGroup>
oncheckedchangelistener
2.6CheckBox
如果想实现组的效果放在一个Linear里然后获取子元素级就可以做循环处理了
2.7ImageView
主要是怎么加载网络图片
属性
android:src=""
android:scaleType=""//这是src的缩放类型
fitxy //撑满整个空间
fitcenter//保持宽高比缩放,直至能够完全显示
centerCrop//保持宽高比缩放,直至完全覆盖整个控件,会有剪裁显示
加载网络图片要在java里做
用第三方的库——glide
上github下载glide
https://github.com/bumptech/glide
gradle里引入
repositories {
mavenCentral()
google()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}
使用方法
//单个图片
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
需要加载声明权限在 manifest里
<user-permission android:name="android.permission.INTERNET">
2.8ListView
(已经不常使用了)
常用属性
<Listview
select//点击效果属性
divider//分隔线
/>
listview需要一个adapter
Adapter接口
MyLiistAdapter extends BaseAdapter
getView很重要
写一个构造器传参传context、设置context和layoutinflator
根据布局写一个静态的方法viewHolder//便于复用效率的提升
根据id获取元素什么的
要画一个布局
在listView的activity里设置 onItemClickListener
长按事件setOnItemLongClickListener 返回值设置true就是不在执行之后的那些点击事件什么的
2.9GridView
继承AppCompactActivity试一下
属性
android:numColumns="3"//规定有几列
android:horizontalSpacing//水平间距
android:verticalSpacing//垂直间距
写个Activity
然后写一个Adapter也是extends BaseAdapter
2.10 ScrollView
<ScrollView>
<LinearLayout>
<Button/>
<Button/>
<Button/>
<Button/>
</LinearLayout>
</ScrollView>
HorizontalScrollView
<HorizontalScrollView>
<LinearLayout>
<Button/>
<Button/>
<Button/>
<Button/>
</LinearLayout>
</HorizontalScrollView>
2.11 RecyclerView(重点)
实现item多元化,监听事件需要自己实现
设置一个activity
跳转
xml里的控件写RecyclerView
声明
setLayoutManager(new LinearLayoutManager(这个activity类))
setAdapter
写一个Adapter extends Adapter<VH>
写个类继承ViewHoldeer(构造方法传View)
更改传的泛型
返回值要改,传参要改
oncreate要改返回值,一个new的 写的类的对象,类名(LayoutInflater.from(mContext).inflate(写好的布局,parent,false)
补充context变量已及写相应的构造方法
在ViewHolder里声明控件,找到控件
在onbindViewHolder绑定属性什么的
会Activity里写setAdapter
ItemDecoration
onDraw//先绘制
onDrawOver//后绘制
geItemOffsites//在item周边,分隔线
写个类继承RecyclerView下的ItemDecoration
点击事件
adpter里
在onbindHoler什么里写itemView的setonclick。。。
这里的界面写Context就可以了
Activity里
在Adapter里写接口,要求传入
就可以在Activity里写东西了
水平滚动
LinerLayoutManager设置属性
setOrientation()
网格布局
setLayoutManager的时候new GridLayout(这个类,int 几列)
瀑布流
setLayoutManager的时候new StarggeredGridlayout(int 几列,orientation)
轮子XRecyclerView:addHeadView、addFootView,下拉刷新上拉加载
2.12WebView
加载网页,加载url(网络或者本地assets文件夹下的html文件)
加载html代码
Native和JavaScript相互调用
加载
//加载网络url
webview.loadUrl("http://www.baidu.com");
//加载assets下的html文件
webview.loadUrl(""file:///android_asset/test.html);
//加载html代码
webview.loadData(); //容易出现乱码问题
webview.loadDataWithBaseURL();
网页的前进后退
webview.canGoBack()
webview.goBack()
webview.canGoForward()
webview.goForward()
webview.canGoBackOrForward(int steps)
webview.goBackOrForward(int steps)
按下返回键,默认是退出当前的Activity,如果希望是WebView内页面后退需要设置
public boolean onKeyDown(int keyCode,KeyEvent event){
if((keyCode == KeyEvent.KEYCODE_BACK)&&webView.canGoBack()){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
第三章弹框组件
3.1Toast
可以设置显示位置
可以自定义显示内容
简单封装
新建一个activity
跳转
修改布局文件
写个button
默认
Toast.makeText(getApplicationContext(),"",LENGTH_LONG).show();
写个button
改变位置
Toast toast = Toast.makeText(getApplicationContext(),"",LENGTH_LONG);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
写个button
有图片
自定义一个布局,设置图片和text,黑色的来电透明度,两位数字加rgb
Toast toast = new Toast(getApplicationContext());
LayoutInflater inflater = new LayoutInflater.from(ToastActivity.this);
View view = inflater.inflate(R.layout.xxxx,null);
ImageView imageView = view.findViewById(...);
TextView textView = view.findViewById(...);
imgaeView.setImageResource(R.drawable.xx);
textView.setText("0.0.0.");
toast.setView(view);
tosat.show();
在activity里声明,找到
写个类实现onclickListener的接口
每个按钮set这个类的对象
接口里用switch不同的id做不同的操作
要使宽高都有效布局文件里再套一个布局
以最后一下为准的设置
封装一个简单的类
建一个util包
写个类ToastUtil
写一个showmsg的方法
判断toast是否存在,存在就改消息,不存在就赋值。
3.2AlertDialog
默认样式
单选样式
多选样式
自定义样式
建Activity
跳转
新建activity之后改成启动activity就可以了
写个OnClick的类,之后声明这个对象使用
写个onClick(View view)方法,
switch(view.getId())的方式做不同的跳转
使用v7的AlertDialog
Dialog.Bulider builer = new AlertDialog.Builder(当前的Activity.this);
builder.setTitle("0.0.0.");
builder.setMessage("0.0.0.");
//builder.setTitle("0.0.0.").setMessage("0.0.0.").setPositiveButton("0.0.",new OnclickListener(....))
.setNeutralButton
.setNegativeButton....show();
//单选的做法
就是setItems(array,new DialogOnclickListner。。。)//传入数组
//加一点修饰
setSingleChoiceItems(array,0,new DialogOnclickListener())
//希望点击选项对话框小时,点击空白处不消失
setCancelable(false)
点击事件里要加上dialog.dismiss();
//多选
setMultiChoicItems(array,boolean类型数组,,new onMultiChoiceClickListener)
//自定义
先画一个布局
View view = LayoutInflater.from(这个类).inflate(R.layout.xxx);
声明各个控件
.setView(view)
3.3ProgressBar & ProgressDialog
直接layout里弄这个控件
<ProgressBar
style
visibility
/>
转圈
横向
写一个handler对象,然后重写handleMessage放啊
这个方法里增加使用handler.postDelayed(runnable,500)
再多些一个Runnable runnable对象,重写一下run方法
sendEmptyMessage(0)//发送空消息让他执行
//实现转圈
建立一个旋转的图标
indeterminateDrawable
布局里要写上旋转的中心