android onresume 后控件不能获取焦点,1.基本控件和布局 + 基本适配器 + Activity生命周期及传值和现场保护...

1.android的项目目录结构

Android学习首先要大致了解项目目录,有些看不懂的就先记下,等之后遇到了再回头来看,印象肯定会更加深刻。

src     Java源码

gen    自动生成的java文件

R.java (Resource)静态内部类

assets  资产  包括:音频视频 比较大的 不需要修改资源

不会再R.java中自动生成,必须通过路径来访问

bin    二进制文件(apk)

res    Resource 资源

drawable_hdpi高分辨率的图片

drawable_ldpi低分辨率的图片

drawable_mdpi中分辨率的图片

drawable_xhdpi超高清辨率的图片

drawable_xxhdpi 特高清分辨率的图片

layout 布局

xml的文件,告诉Activity显示什么样的内容

menu 菜单  xml的文件

values  数据文件    没有对应的静态的内部类

dimens.xml 尺寸

strings.xml 常量值

styles.xml  样式

AndroidMainfest.xml  项目清单文件

package="com.qf.day01_helloworld" 包名,应用程序的唯一标示

android:versionCode="1" 版本号

application:

android:icon="@drawable/ic_launcher"  图标

android:label="@string/app_name"标签名称

android:theme="@style/AppTheme"样式

2.DVM(Dalvik)和JVM的区别:

(1)Dalvik基于寄存器  jvm基于栈  基于寄存器的虚拟虚拟机对于更大的程序来说,

在他们编译的时候,花费的时间更短

(2)Dalvik执行.dex格式的字节码

JVM执行.class格式的字节码

(3).class的文件存在很多重要信息,.dex工具会去除重复的信息

3.android五大布局

(1)线性布局    LinearLayout

android:layout_width="match_parent" 设置布局的宽度(通用属性)

android:layout_height="match_parent" 设置布局的高度(通用属性)

属性值:match_parent 填充父容器的宽度和高度

fill_parent  填充父容器的宽度和高度(2.2之前的版本)

wrap_content 包裹内容的宽度和高度

android:orientation=""  设置线性布局的排列方式

属性值:  vertical 垂直排列

horizontal 水平排列(默认的)

android:gravity="center"  父容器内所有子控件的位置

android:gravity="bottom|right" 多个属性直接必须“|”分割

权重  android:layout_weight="1" 子控件在父容器剩余空间中所占的比例

属性值越大,所占的比例就越大

(2)相对布局  RelativeLayout

指子控件与父容器、控件与控件 相对位置的来进行布局

<1>,子控件相对于父容器的位置

居中对齐:

android:layout_centerHorizontal = "true"  子控件相对于父容器水平居中android:layout_centerVertical="true"      子控件相对于父容器垂直居中

android:layout_centerInParent = "true"  子控件相对于父容器完全居中

位置对齐:

android:layout_alignParentRight="true"    子控件相对于父容器的右边对齐android:layout_alignParentLeft="true"    子控件相对于父容器的左边对齐android:layout_alignParentBottom="true"      子控件相对于父容器的底部对齐android:layout_alignParentTop="true"    子控件相对于父容器的顶部对齐

<2>,子控件与兄弟控件之间的位置

放置的位置:

android:layout_toRightOf="@id/button_id"    子控件显示在ID为button_id的右侧

android:layout_toLeftOf="@id/button_id"    子控件显示在ID为button_id的左侧

android:layout_below="@id/button_id"    子控件显示在ID为button_id的下方

android:layout_above="@id/button_id"        子控件显示在ID为button_id的上方

对齐的方式:

android:layout_alignRight="@id/button_id"  子控件与ID为button_id的右边对齐

android:layout_alignLeft="@id/button_id"    子控件与ID为button_id的左边对齐

android:layout_alignBottom="@id/button_id"  子控件与ID为button_id的底部对齐

android:layout_alignTop = "@id/button_id"  子控件与ID为button_id的顶部对齐

android:layout_alignBaseLine = "@id/button_id" 子控件与ID为button_id的基准线对齐

(3),帧布局

(4),表格布局

(5),绝对布局    这三个布局很少被用到,这里不做过多讲解,了解即可。用上面的线性布局和相对布局几乎可以达到大部分效果。另外有些老代码可能会用到帧布局,有兴趣的小伙伴可以自行找资料学习。

(6),网格布局GridLayout (4.0后出现的)

1,设置组件的排列方式

android:orientation=""

属性值: vertical 垂直

horizontal 水平

2,设置布局为几行几列

android:rowCount="4"    设置网格布局有4行

android:columnCount="4"  设置网格布局有4列

3,设置控件位于几行几列

注意:都是从0开始算的

android:layout_row = "1"  设置控件位于第二行显示

android:layout_column = "2" 设置控件位于第三列显示

4,设置某个组件横跨几行几列

android:layout_rowSpan="2"      行的跨度

android:layout_columnSpan = "3" 列的跨度

android:layout_gravity ="fill"  填充你所跨的整行或整列

4.TextView  extends  View

android:textStyle="bold" 文字的样式(可以叠加使用,必须用"|"分割)

属性值:  bold  加粗

Italic 斜体

android:singleLine = "true" 是否单行显示

android:ellipSize = "" 用省略号显示超出文本宽度的内容

属性值: none  无

start  开始位置省略

middle 中间

end    结束位置

marquee 滚动显示

跑马灯:

step1:  android:ellipSize = "marquee"

step2:  设置焦点

android:focusable  = "true"

android:focusableInTouchMode = "true"

step3:  android:marqueeRepeatLimit = "marquee_forever"循环滚动

step4:  android:singleLine = "true"

android:autoLink = " " 自动连接(根据内容类型的不同,点击打开相应的应用程序

属性值:  none  无

web  网址

email 邮箱

Phone 电话号码

map  地理位置

all  包括以上所有

5.EditText  extends  TextView

android:hint = "提示信息"

android:textColorHint = " " 提示信息的颜色

android:inputType  = "" 允许用户输入的内容

属性值: text  默认

number 只能输入数字

textpassword  文本密码

date  日期

Phone  电话号码

android:layout_alignBaseline = ""在一条基准线上

请求焦点

6.Button  extends  TextView

android:drawableRight  图片放在文本的右侧

android:drawableLeft  图片放在文本的左侧

android:drawableBottom  图片放在文本的下方

android:drawableTop  图片放在文本的上方

ImageButton

android:src="@drawable/ic_launcher"  图片路径

android:background="@null"  去除灰色背景

7.按钮监听器

监听三部曲:

1,定义控件并且初始化

2,定义监听器(得到监听器对象)

3,为控件设置监听器

监听器实现的方式:4种

第一种方式: 匿名内部类

第二种方式: 成员内部类的方式

第三中方式: 让当前的类 implements  OnClickListener 接口,重写OnClick(),为控件设置监听器

第四种方式: Button属性

1,标签中定义属性:android:onClick ="onClickButton"

2,  在代码中写监听方法:

2.1 必须是public

2.2  返回值必须是void

2.3  方法名称必须和xml中onClick属性的属性值一致

2.4  必须有一个View类型的参数

8.ImageView extends View

android:scaleType = ""图片显示的方式

属性值: matrix:    不缩放,从左上角开始截取和ImageView红箭,(可以在代码中设置Matrix对象)

(常用)fitXY:      不按比例缩放图片,目标是把图片塞满整个ImageView

fitStart:  按比例缩放图片的大小,置于顶部显示,完全显示图片

(常用)fitCenter:  按比例缩放图片的大小,居中显示,完全显示图片(默认)

fitEnd:    按比例缩放图片的大小,置于底部显示,完全显示图片

center:    保持图片原来的size,居中显示,超出部分不显示

centerCrop  按比例扩大图片的size,居中显示,小边填满容器,大边超出部分不显示

centerInside按比例缩小图片的size,居中显示,超出部分不显示

代码中设置图片资源:

imageView.setImageResource(R.drawabe.xxx);

9.CheckBox  多选框 extends CompoundButton --->Button

android:checked = "true" 设置为被选中状态

java代码中的方法

checkBox.isChecked() 获取多选框的状态

checkBox.setChecked(true) 设置多选框被选中

状态改变监听器 OnCheckedChangeListener (需要导入 android.widget.CompoundButton.OnCheckedChangeListener包,注意要与RadioButton区分)

10.RadioButton 单选按钮  extends CompoundButton --->Button

(1)由于是单选按钮,所以使用组来管理(RadioGroup)

(2)特点:多个取其一(RadioButton 必须制定id)

(3)属性

RadioGroup:

android:orientation = ""排列方式(默认为垂直排列)

android:checked = "" 按钮是否被点亮

(4)radioGroup.isChecked();判断是否被选中,默认为true

(5)从radioGroup组上获取其中的radioButton,判断是否被选中

((RadioButton)radioGroup.getChildAt(index)).ischecked();

(6)监听事件:OnCheckedChangeListener

只能给RadioGroup设置OncheckedChangeListener

需要导入android.widget.RadioGroup.OncheckedChangeListener包

与checkBox区分

11.Spinner  下拉菜单

android:spinnerMode=""  Spinner的展示方式

属性值:drodown  下拉方式

dialog    对话框

android:prompt="" 在对话框方式下设置标题(标题内容只能应用,不能写死)

android:entries = "@array/citys" 下拉菜单的内容    数据源的填充:

<1>数据源必须是String[]或List(纯文本)

<2>通过属性填充:android:entries=""

<3>在代码中使用ArrayAdapter数组适配器填充数据

12.ArrayAdapter数组适配器:

(1)三个参数的(数据源为数组)

this  上下文对象

resource item的布局资源

Object 数据源----数组

ArrayAdapteradapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item,data);

(2)三个参数的(数据源为集合)

this  上下文对象

resource item的布局资源

Object 数据源----List集合

ArrayAdapteradapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,data);  (3)四个参数

this  上下文对象

resource item的布局资源

textViewResourceId  item布局资源中要用的TextView的ID

当item的布局资源中只有一个TextView时,此参数可省略

Object 数据源----List集合或者

ArrayAdapteradapter = new ArrayAdapter(this,R.layout.xxx,R.id.textview,data);

(4)API推荐

this  上下文对象

textArrayResId  字符串数组的ID(数组写在Xml文件中)

textViewResId  Item样式的资源文件

ArrayAdapteradapter = new ArrayAdapter(this,R.array.xxx,R.id.textview);

13.Spinner监听器  OnItemSelectedListener 用来监听用户点击下来列表的事件

spinner.setOnItemSelectedListener(new OnItemSelectedListener(){

/**

*AdapterView parent  整个下拉菜单的视图(即spinner对象)

*View view              每个Item视图的对象

*int position          当前点击的条目下标

*long Id                当前点击条目的Id

*/

public void onItemSelected(AdapterView parent,View view,int position,long id){

//从parent中获取内容

String str2 = parent.getItemAtPosition(position).toString();

//从adapter中获取内容

String str3 = adapter.getItem(position);

//从spinner中获取内容

String str4 = spinner01.getItemAtPosition(position).toString();

}

};

14.SimpleAdapter 适配器(可实现图文混排:图片只能是本地的)

(1)只用一个构造方法

(2)构造方法介绍:

/**    *context 上下文对象

*data    数据源  数据源的格式为:List>

*resource Item的布局资源

*from    String[]数据源中的key

*to      int[] 布局资源的id

*/

SimpleAdapter adapter = new SimpleAdapter(this,

data,

R.layout.item_spinner,

new String[]{"icon","city"},

new int[]{R.id.icon,R.id.city});

15.AutoCompleteTextView 自动提醒的编辑框 extends EditText

(1)

android:completetionHint 设置下拉菜单中的提示标题

android:completionThreshold  设置用户至少输入多少个字符才会显示提醒

android:dropDownhorizontalOffset  下拉菜单于文本框之间的水平偏移。默认与文本框左对齐

android:dropDownheight  下拉菜单的高度

android:dropDownWidth  下拉菜单的宽度

android:dropDownVerticalOffset 垂直偏移量

(2)设置OnItemClickListener用来监听用户点击下来列表的事件

spinner.setOnItemClickListener(new OnItemSelectedListener(){

/**

*AdapterView parent  整个下拉菜单的视图(即AutoCompleteTextView对象)

*View view              点击的Item视图的对象

*int position          当前点击的条目下标

*long Id                当前点击条目的Id

*/

public void onItemClick(AdapterView parent,View view,int position,long id){

//从parent中获取内容

String str2 = parent.getItemAtPosition(position).toString();

//从adapter中获取内容

String str3 = adapter.getItem(position);

//从spinner中获取内容

String str4 = spinner01.getItemAtPosition(position).toString();

}

};

(3)添加TextChangedListener监听器 用来监听输入框文本的变化

autoView.addTextChangedListener(new TextWatcher(){

/**

*文本正在变化

*charSequence s  改变之前的文本

*start: 改变之前文本的下标

*before 改变之前文本的数量

*count  改变的文本个数

*/

public void onTextChanged(CharSequence s,int start,int before,int count){

}

/**

*文本改变之前触发次方法

*s:变化之前的文本

*start 变化之前文本的下标

*count 变化之前文本的个数

*after 变化之后文本的个数

*/

public void beforeTextChanged(Charsequence s,int start,int count,int after){

}

/**

*文本变化之后触发次方法

*s:s.toString() 变化之后的文本

*/

public void afterTextChanged(Editable s){

}

};

16.两个Activity之间传值(4种)

(1)通过意图Intent传值

<1>A:  Intent intent = new Intent();

intent.putExtra("key", value);

putExtra();该方法的value支持所有基本数据类型和String对象  以及他们所对应的数组类                                           型除此之外还支持实现Serializable、Parcelable接口的类对象(也就是说,要想                                         在Activit之间传对象,则该对象的类需要实现Serializable、Parcelable接口)

intent.setClass(this,xxxActivity.class);

startActivity(intent);

B:  Intent intent = getIntent();

intent.getXXXExtra(key); 拿到对应的值

<2>类似于上面

A: Bundle  bundle = new Bundle();

bundle.putxxx("key",value); 与上面intent.putExtra("key",value)用法一样

intent.putExtras(bundle);

B: Bundle  getIntent().getBundleExtra()  拿到bundle对象

bundle.getxxx("key");  拿到值

(2)静态成员传值(不建议使用)

在A中声明一个公共的静态成员,在合适的地方存入数据

在B类中直接访问A类的静态成员,读取相应的数据

(3)全局变量传值(android建议使用)(★)

----Application组件中(一般存放适用于全局的数据,比如用户账户)

<1>创建Application的子类,并声明全局的变量(类成员)

<2>在AndroidManiFest.xml(清单文件)中标签中,

通过android:name="包名+类名"属性将创建的Application子类引入项目

<3>在合适的位置存入数据

<4>在需要用的地方读取相应的数据

(4)回传数据

A:startActivityForResult(Intent,110)启动界面

B:setResult(RESULT_OK,data);设置回传的数据(然后直接finish()关闭当前页面)  data为Intent类型,data中不需要setClass()

A:重写onActivityResult(int requesCode,int resultCode,Intent data)方法

该方法传回数据时系统调用

参数:requesCode---请求码对应上面的110

resultCode----回复码对应上面的RESULT_OK

data  ------传回的数据

17.Activity的生命周期(7个)从创建到消亡

onCreate()      第一次创建时执行    初始化Activity

onStratet()      显示窗口时执行      显示Activity

onResume()      获取焦点是执行      与用户交互

onPause()        失去焦点时执行      停止与用户交互

onStop()        关闭窗口时执行      关闭Activity

onRestart()      重新显示窗口        再次显示Activity

onDestroy()      销毁时执行          销毁Activity

(1)在A中启动B时执行声明周期方法的顺序

A:onPause()---B:onCreate()---B:onStart()----B:onResume()---A:onStop()

从B中返回A

B:onPause()---A:onRestart----A:onStart()---A:onResume()---B:onStop()---B:onDestroy()

(2)在A中启动B(以对话框形式显示的Activity)

A:onParse()---B:onCreate()---B:onStart()---B:onResume()

从B中返回A

B:onParse()---A:onResume()----B:onStop()---:onDastroy()

18.现场保护(保持状态)

应对横竖屏切换时重新创建Activity,因此需要保持业务数据来保护现场

//重写onSaveInstanceState()方法来存入数据

protected void onSaveInstanceState(Bundle outState){

super.onSaveInstanceState(ontState);

outState.putInt("index",index);

}

//在onCreate() 方法中获取保护的数据

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if(savedinstanceState){

index = savedInstanceState.getInt("index");

}

}

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值