//尺寸dp 字体sp
//view是所有类的父类 v大写
//2/1 布局管理器 layout
//布局管理器: 线性布局(LinerLayout) 相对布局(RelativeLayout)//居中
1. LinearLayouta). android:layout_gravity="center_horizontal"表示该布局在父布局里水平居中,此时其父布局必须拥有android:orientation="vertical"属性;
b). android:layout_gravity="center_vertical"表示该布局在父布局里垂直居中,此时其父布局必须应设置成android:orientation="horizontal"属性(默认为该属性),且其父布局的高度应设置为android:layout_height="fill_parent"属性;
2. RelativeLayout
属性值为true或false
a). android:layout_centerHrizontal 控件在父布局中 水平居中
b). android:layout_centerVertical 控件在父布局中 垂直居中
c). android:layout_centerInparent 控件相对于父元素完全居中 这里要明确一点,你是想控件里的内容水平居中,还是它在父亲控件中水平居中,
a). 让textView里面的内容水平居中 : android:gravity="center_horizontal"
b). 让textView在它的父布局里水平居中 :layout_gravity="center_horizontal"
//2-1-1 LinerLayout
//最常用属性
//android:id android:layout_margin外边距
//android:layout_width/_height宽度/高度 android:layout_padding内边距
//android:background android:orientation 方向 hor水平 ver垂直 //gravity内部元素对齐方式 是写在父类元素里
//平分一个父类元素
//方法一:写两个一模一样的view
//方法二:子元素设置权重 权重是把剩余内容按照权重分配 layout_weight=1 设置了权重就不用设置layout_width
// 一般如果要平分就把weight设置为0dp
2-1-2相对布局
<relativeLayout>
layout_toLeftOf 在谁的左边
layout_toRightOf
layout_alignBottom 和谁底部对齐
layout_alignParentBottom /right和父空间底部对齐
layout_below 在谁的下边
centerHorizontal居中2-2TextView
//理解垂直布局和水平布局 垂直布局就是直接换行
文字大小颜色
显示不下使用 ellipsize:end
文字+icon
中划线 下划线
跑马灯
<textview
text="" 可以写在value的string里
textcolor
testsize//行数设置 maxLines
//图片 文字+ico
drawable drawableRight drawablepadding//中划线
a4.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);//图片+中划线
<TextView
android:id="@+id/a4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:drawableRight="@drawable/xiajiantou"
android:ellipsize="end"
android:maxLines="1"
android:textSize="16sp"
android:text="筛选"
android:textColor="#000000"
android:drawablePadding="20dp"/>
//下划线
a5.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);//下划线
<TextView
android:id="@+id/a5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:textSize="16sp"
android:textColor="#336699"
android:text="下划线功能"/> //在java文件里下
[现在xml文件编辑功能 再在java文件类里声明变量 再在方法里写]
//也可以通过html标签给文字加下划线
a6=findViewById(R.id.a6);
a6.setText(Html.fromHtml("<u>通过html</u>"));//跑马灯效果 单行显示
<TextView
android:id="@+id/a7"
android:layout_width="wrap_content"
android:layout_height="wrap_content" //包含内容
android:textColor="#ff3e96"
android:text="第一个跑马灯效果"
android:textSize="24sp"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever" //循环次数
android:focusable="true" //聚焦
android:focusableInTouchMode="true"/>a7=findViewById(R.id.a7);
a7.setSelected(true);2-3Button 继承自textview
//文字大小颜色 textcolor textsize
//自定义背景形状
标签样式放在drawable里的xml文件里 xml标签用shape
drawable里设置背景(颜色 角度)样式,在background里调用<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
//填充色
<solid
android:color="#ff9900"></solid>
<corners
android:radius="15dp"></corners>
</shape> <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
//描边
<stroke
android:width="1dp"
android:color="#336699"></stroke>
<corners
android:radius="5dp"></corners></shape>
//自定义按压效果
触摸变色方法1:
<Button
android:id="@+id/a10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:background="@drawable/button_4" /><selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/click_normal"
android:state_pressed="false" />
<item
android:drawable="@drawable/click_press"
android:state_pressed="true"/></selector>
方法2:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
</selector>
//showToast 点击按钮弹出提示功能
//大部分控件都可以设置点击事件
方法1:
<Button
android:id="@+id/a11"
android:text="按钮"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@drawable/button_a11"
android:onClick="showToast" />写在mainactivity的class下 非成员方法
public void showToast(View view){
Toast.makeText(this,"我被点击了",Toast.LENGTH_SHORT).show();
} 方法2:
<Button
android:id="@+id/a10"
android:text="@string/a10name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:background="@drawable/button_4" />private Button a10;
a10=findViewById(R.id.a10);
a10.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"我被点击了",Toast.LENGTH_SHORT).show();
}
}); //2-4 EditText 也是TextView子类
//可以输入的控件
//常用属性
//监听事件
//制作登录界面//textAllCaps=false 默认不为大写
//默认内容 hint
//stoke corner 同样适用于EditText
//drawalepadding drawleft图片文字
//2-5 RadioButton
//写一个类方法 封装onClick
setLinsteners();
}//写一个方法设置监听器
private void setLinsteners(){
//实例化
OnClick onClick=new OnClick();
radio_button.setOnClickListener(onClick);
} private class OnClick implements View.OnClickListener{
public void onClick(View v){
Intent intent=null;
switch (v.getId()){
case R.id.radio_button:
intent=new Intent(MainActivity.this,radioButton.class);
break;
}
startActivity(intent);
}
}
//常用属性 <RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="remeber me"/>//<RadioGroup> 有方向 radiobutton放在group里构成一组 一组构成单选
<RadioGroup
android:id="@+id/remember_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="100dp"
android:paddingLeft="20dp"> <RadioButton
android:id="@+id/remember_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="remeber username"/> <RadioButton
android:id="@+id/remember_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="remember password"/> </RadioGroup>
//自定义样式
//监听事件
remember_group=findViewById(R.id.remember_group);
remember_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Toast.makeText(radioButton.this,"you have remember the username",Toast.LENGTH_LONG).show();
}
});//复选框 CheckBox
//常用属性
//自定义样式
<CheckBox
android:id="@+id/cb_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/check_box"
android:layout_marginTop="20dp"
android:text="android"/>//自定义样式:自己找图片 放drawable里
//监听事件:选中,未选中
private CheckBox cb_1,cb_2;cb_1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(checkbox.this,isChecked?"选中":"未选中",Toast.LENGTH_SHORT).show();
}
}); cb_2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(checkbox.this,isChecked?"选中":"未选中",Toast.LENGTH_SHORT).show();
}
}); 2-7ImageView 图片控件
//Button的其他衍生控件:ToggleButton Switch(开关)
//常用属性
//加载网络图片
//
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/sharing60"
android:scaleType="fitXY"/>
//ScaleType
//fitXY图片填充但可能会拉伸失真
//fitCenter 保持宽高比缩放,直至完全显示
//centerCrop 保持宽高比缩放,直至完全覆盖控件,裁剪显示 //插入网络图片方法
//1.写在activity里
private ImageView internetpic;
internetpic=findViewById(R.id.internetpic);
Glide.with(this).load("https://www.baidu.com/img/xinshouye_e6412034ac5864cf40ca6ab99782883b.gif").into(internetpic);//2.把要用的jar包放入lib里 或者使用build.gradle
//放入gradle
repositories {
mavenCentral()
google()
}dependencies {
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}//3.使用gradle
//
// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {
...
ImageView imageView = (ImageView) findViewById(R.id.my_image_view); Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
}// For a simple image list:
@Override public View getView(int position, View recycled, ViewGroup container) {
final ImageView myImageView;
if (recycled == null) {
myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false);
} else {
myImageView = (ImageView) recycled;
} String url = myUrls.get(position);
Glide
.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.into(myImageView); return myImageView;
} //添加访问网络的权限(Manifest)
<uses-permission android:name="android.permission.INTERNET"/> //2-8列表视图 ListView(不常用)
//常用属性
//Adapter接口
//demo
//divider //
1.写一个liseview
2.写一个adapter 重写方法 getView方法显示 viewHolder提示效率
3.点击事件 长按事件 //自己写一个Activity类
//构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法.对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
1.新建class super父类继承Activity
2.进去重写onCreate方法protected void onCreate( Bundle savedInstanceState) {
3.layout目录下写一个布局 相对布局或者绝对布局 name:activy_listview
4.写入Manifest
<activity android:name=".ListView.ListViewActiviry"/> //listview点击事件
//ScrollView上下滚动
//根布局改成ScrollView 直接子元素只能有一个 内部linerlayout嵌套//HorizontalscrollView水平滚动
//Adapter数据适配器
我们知道,数据源是各种各样的,而ListView所展示数据的格式则是有一定的要求的。
数据适配器正是建立了数据源与ListView之间的适配关系,
将数据源转换为ListView能够显示的数据格式,从而将数据的来源与数据的显示进行解耦,
降低程序的耦合性。这也体现了Android的适配器模式的使用。Adapter是用来帮助填出数据的中间桥梁,
简单点说吧:将各种数据以合适的形式显示在View中给用户看。 2-9 网格视图 GridView
//常用属性
//Adapter接口//Activity继承没有标题栏
//AppCompatActivity继承有标题栏<GridView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="3"></GridView 列数
android:horizontalSpacing="10dp" 水平间距
android:verticalSpacing="10dp"> 垂直间距去Activity声明控件
写Adapter2-11-1 RecyclerView
1.首先引入包到build.gradle 比较简单不赘述//1.类似linstView的列表视图
1.没有分隔线
2.自己设置点击事件 //2.水平横向滚动 适配器HorAdapter+ layout_hor_item +HorrecycleActivity+activity_horrecycle.xml
//3.网格视图
//4.瀑布流//五种视图都要adapter 1.listview 2.gridview 3.4.recycle横竖布局 5.recycle网格布局
//RrecyclerView:下拉刷新 上拉加载
2-12WebView
//加载网页 url或者本地assets文件下下的html assets放不需要被编译的东西
//加载html代码
//Native和JS相互调用1.加载网络URL webview.loadUrl("网址")
需要设置js webview1.getSettings().setJavaScriptEnadled(true)2.加载html文件 webview.loadUrl("file:///android_asset/test.html")
3.加载html代码 webview.loadData(); webview.loadDataWithBaseURL();4.网页的前进后退
webview.canGoBack()
webview.goBack()
webview.canGoForward()
webview.goForward()
webview.canGoBackOrForward(int steps) 负数向后 正数向前
webview.goBackOrForward(int steps)按下返回键,默认是退出当前Activity,如果希望webview内页面后退,要重写onKeyDown方法
第三章
3-1 Toast
//设置显示的位置
//自定义显示内容(例如添加一个图片)
//简单封装Android系统的角度来理解:Context是一个场景,
代表与操作系统的交互的一种过程。从程序的角度上来理解:Context是个抽象类,
而Activity、Service、Application等都是该类的一个实现。XXXActivity.this=?=getApplicationContext
getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文
3-2 AlertDialong 弹出对话框
//默认样式
//单选样式
//多选样式
//自定义3-3ProgressBar(进度加载圈,条) ProgressDialog(进度加载+对话框)(ex. 正在下载)
//可以和webview结合@android:style/Widget.ProgressBar.Horizontal 水平进度条
@android:style/Widget.ProgressBar.Inverse 普通环形进度条
@android:style/Widget.ProgressBar.Large 大环形进度条
@android:style/Widget.ProgressBar.Large.Inverse 大环形进度条
@android:style/Widget.ProgressBar.Small 小环形进度条
@android:style/Widget.ProgressBar.Small.Inverse 小环形进度条
android:max 设置进度条最大值
android:rpogress 指定进度条已经完成的进度值
android:ProgressDrawable 指定进度条轨道的绘制形式
//模拟进度
//用runnable
Handler是Android提供的消息处理类,可用于异步消息的处理,
Handler关联了两个队列,一个是消息队列,里面顺序的存放消息对象(Message对象),
另一个是存放实现了Runnabler接口对象的队列,系统会根据顺序,
取出消息或者Runnable接口对象执行,默认的,
Handler对象并没有单独开启一个新的线程,而是和主线程相关的,
两个消息队列也是和主线程相关的,如果要单独开启线程,需要借助Looper对象。 //自定义progress样式
android:drawable="@drawable/loading"
android:pivotX="50%"
android:pivotY="50%">//方法1.写一个xml文件 引用
//方法2. 设置一个style style引用一个xml文件 然后给progressbar设置style //progress-dialog
//弹出对话框 然后有正在加载的圈圈//自定义Dialog
//1.先写一个类直接继承dialog
//写一个layout布局 画一个xml
//线用控件view画 //PopipWindow 界面弹出一个菜单
第四章
//Activity Fragment碎片化界面
1.新建类继承Activity或其子类
2.在AndroidMainfest中声明
3.创建layout并且在Activity的onCreate中设置//改变标题栏 mainfest中对应activity加label(写在activity的前标签中) android:label="xxx"
//去掉标题栏(写在前标签) android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"
//全局去掉标题栏 application中设置theme
//横屏鼠竖屏切换 android:screenOrientation="?" landscape横着 默认不设置
//启动模式 launchMode
//设置默认启动项
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> 4-1-2Activity生命周期
log.d()日志调试4-1-3 Activity的跳转和数据传递
//显式跳转和隐式跳转
//Activity之间的数据传递//startActivityForResult:启动Activity,结束后返回结果
4-1-4Activity四种启动模式
standard:标准模式.默认
singleTop:Task栈顶复用模式
singleTask:Task栈内复用模式
singlelnstance:全局单例模式//Activity由任务栈管理,启动并一个放入一个到栈中,按返回键,就会从栈顶移除一个Activity
//standard:每启动一个acctivity,创建一个新的实例
//launchMode//singelTop
//当要启动的目标Activity已经在栈顶时,不会创建新的实例,会复用栈顶的Activity,并且其onNewIntent()
发法会被调用;如果目标Activity不在栈顶,则跟standard一样创建新的实例. //singleTask
//在同一个任务栈中,如果要启动的目标Activity已经在栈中,则会复用该Acitivity,
并调用其onNewIntent方法,并且该Activity上面的Activity会被清楚.如果栈中没有,则创建新的实例.
//singleInstance
//全局复用,不管哪个Task栈,只要存在目标Activity,就复用.每个Activity占有一个新的Task栈. 4-2-1
//fragment有自己的生命周期
//Fragrment依赖于Activity
//Fragment和Activity是多对多的关系4-2-2
//Fragment中getActivity()为null的问题
//向Fragment传递参数4-2-3
//Fragment回退栈4-2-4
//Fragment和Activity通信 5-1基于监听的事件处理机制
监听三要素:事件源,事件,事件监听器//实现监听的方法
1.通过内部类实现
2.通过匿名内部类实现
3.通过事件源所在类实现
4.通过外部类实现
5.布局文件中onClick属性(针对点击事件)给同一事件源添加多个同种类型监听器会怎么样?
系统会响应最后一个监听器,其余不会执行5-2基于回调的事件处理机制
5-5Handler消息处理
//用途:未来某时做某事,线程间通信6.属性动画
//补间动画和属性动画
//1.ValueAnimator 2.ObjectAnimator.ofFloat()属性动画 textview位置改变了 点击事件位置也随之改变
补间动画 位置改变了 点击事件还在原地 7-1
sharedpreferences 轻量数据存储
//xml文件,k-v形式
//1. SharedPreferences 读 把内容从xml读出来
//2.SharedPreferences.Editor 写 把内容存储到xml里
村吃完要加commit或者apply 7-2安卓存储概念
//内部存储Internal Storage 随应用卸载被删除
//外部存储 External Storage 1.公有目录 2.私有目录(随应用卸载删除) //内部存储
/data/data/<applicationID>/shared_prefs
/data/data/<applicationID>/databases
/data/data/<applicationID>/files
/data/data/<applicationID>/cache获得files cache
context.getCacheDir()
context.getFilesDir()//外部存储
公有目录
Environment.getExternalStoragePublicDirectory(int type)
私有目录 7-2-2File 内部存储
FileOutputStream
FileInputStream !!sqlite
insert语句用esec
select语句用cursor //控制台打印信息监控
Log.i("tag","message");//Bundle
传值用bundle
activity直接传递数值可以用bundle,sharepreference或者intent
android网格布局分页 android网格布局图片
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【Android 布局】GridLayout(网格布局)
文章目录GridLayout(网格布局)本节引言1.相关属性总结图2.使用实例:计
android 布局 返回顶部 网格布局 -
android网格布局间距 android 网格布局均分
RecyclerView可以说是ListView和GridView的升级综合版,在Android5.0推出,其特点如下:1、支持不同方向、不同排版模式,实现多种数据展示形式(包含ListView、GridView、瀑布流);2、装载了ViewHolder的回收机制,无需我们考虑View的复用;3、取消了OnItemClick点击事件,需自己实现;4、可控制Item增删动画;5、可以设置Item的间
android网格布局间距 ItemDecoration 网格布局 GridLayoutManager RecyclerView