Android布局和数据传输,跳转

//尺寸dp   字体sp
//view是所有类的父类  v大写
//2/1 布局管理器  layout
//布局管理器: 线性布局(LinerLayout)  相对布局(RelativeLayout)

//居中
1. LinearLayout

a). 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声明控件
写Adapter

2-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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值