达内培训第二阶段第一周--齐磊老师
来源:互联网 发布:视觉中国图片库软件 编辑:程序博客网 时间:2024/04/29 00:43
因为这周占用3天时间毕业答辩,所以总结不全面,请谅解。
首先说明一下我是一个电气专业的学生,没有计算机方面的基础。根据我前一个月的经验,我个人觉得如果你没有一点的计算机经验,那么Android的基础就更加的无从谈起,所以我觉得只有一个办法了。一个字,背!!!
读书百遍,其义自现!!!如果你把老师课上讲的资料总结并记住之后,开始重复的练习,我觉得经过很多次的练习,你会发现老师在课上没有讲的经过你的多次的练习,你会有所领悟,你会在自己练习的过程中总结出一套属于你自己的学习方法。
下面我就把我这两天的总结叙述如下:
Day01
RelativeLayout:对viewgroup中的元素进行精确定位;对屏幕中的元素进行
android:layout_toRightOf="@id/btn01" 谁在谁的右边
android:layout_toLeftOf="@+id/btn03" 谁在谁的左边
android:layout_toStartOf="@+id/btn03"
android:layout_toEndOf="@id/btn01"
android:layout_alignParentRight="true" 与父类容器右端对齐
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:text="@string/btn03" 文本内容为。。。
Text中的内容转换为res-->values-->strings.xml中的@string/btn03的步骤:鼠标放置此上,ctrl+1,弹出对话框点击ok。
可在工程目录中的res-->values-->strings.xml,点击另一个框可见(下面)。
android:layout_alignBaseline="" 文本内容基线对齐
android:gravity="center" 文本内容居中
android:layout_gravity=”right/top” 只有帧布局和线性布局使用
android:layout_centerHorizontal="true" 最上面一行的中间
android:layout_centerVertical="true"
android:hint="" 字体灰色,上面能写字。提示语句。
android:text="" 文本内容
android:typeface="" 设置字体
android:textColor="" 字体颜色(RGB:红绿黄 f最深0最浅 例如:#ffff0000红色)
android:textSize="" 字体大小
android:layout_centerInParent="" 水平垂直都居中
android:layout_centerHorizontal="" 水平居中
android:layout_centerVertical="true" 垂直居中
android:layout_below="" 在谁的下面
android:layout_above="" 在谁的上面
容器之间的距离:外边距
android:layout_margin=""
android:layout_marginLeft=""
android:layout_marginRight=""
android:layout_marginBottom=""
android:layout_marginTop=""
内边距
android:padding=""
android:paddingLeft=""
android:paddingRight=""
android:paddingTop=""
android:paddingBottom=""
底端对齐gravity(指内容与边框的对齐)
android:gravity="bottom"
android:gravity="center" 文本内容居中
android:layout_gravity=”right/top” 只有帧布局和线性布局使用
LinearLayout:线性布局。对容器中的元素进行线性方式布局,水平和垂直。不能精确布局。
只有垂直方向(整体)才能水平居中(局部)。
只有水平方向(整体)才能垂直居中(局部)。
水平方向不能右对齐。
垂直方向不能下对齐。
android:layout_width="0dp" 权重(比重)-----水平(整体)
android:layout_weight="1"
android:layout_height="0dp" 权重(比重)----垂直(整体)
android:layout_weight="1"
View是所有类的父类
线性布局右对齐加view,比重为1.
GridLayout:以网格的布局。自动换行。
版本要求API为14:
修改:AndroidManifest.xml
android:columnCount="5" 列的数量,说几就几
android:rowCount="5" 行的数量,说几就几
横跨和填满,结合使用。
android:layout_gravity="fill_vertical" 垂直填满
android:layout_gravity="fill_horizontal" 水平填满
android:layout_columnSpan="2" 横跨几列
android:layout_rowSpan="2" 横跨几行
元素放置在几列(行数系统自动设置)
android:layout_column="" 从0开始
FrameLayout:帧布局
按照一定的层次结构,对元素进行布局。(从左上角展开进行布局)
一层一层进行布局。
放图片<Imageview>
android:src="@drawable/ic_launcher" 获取图片资源
图片复制到res-->drawable。 图片名字只能用小写字母和数字和下划线。
android:scaleType="fitCenter" 拉伸模式
layout_gravity=”right/top” 图片放到右上角。只有帧布局和线性布局使用
安卓官方图片@android:drawable
android:background="@drawable/ic_launcher" 背景图片
组件的大小最好写16dp的整数倍。dp是像素的值。
字体的大小最好是12sp的整数倍。
Common Layout布局优化:
1、优化层次结构(越浅越好,例如:借助merge标签合并相同元素)
继承体系:Window-->Perspective-->openperspective-->other-->Hierarchy View
DDMS中的adb 安卓设备调试桥。
继承体系树状图没有反应,可以重启DDMS的adb。
2、优化对象个数(越少越好)
merge合并:此布局和上一层的布局都是一样的布局。那么此布局的外围布局设置就可以设置为<merge></merge>。并且在上一层的布局中可以写:
<includelayout="@layout/btn_main_01"/>连接此布局。
3、优化布局的可重用性(借助include标签)
引入: <include layout=”layout/@布局文件”/>
4、优化对象的加载时机(延迟加载,借助viewstub)
android:inflatedId="@+id/pbarId"
类加载:类只加载一次。
<!-- 延迟加载layout属性指定的布局 -->
<ViewStub
android:layout="@layout/progressvar_layout_01"
android:inflatedId="@+id/pbarId" //progressbar的id
android:layout_centerHorizontal="true" //加载的图片放在最上面的中间
/>
private ViewStubvStub;
private ProgressBarprogressBar;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vStub=(ViewStub)findViewById(R.id.vsId);
progressBar=(ProgressBar)findViewById(R.id.pbarId);
}
public voidonClick(View v){
//加载布局文件(vStub中使用的layout属性此时会加载)
vStub.inflate();
//加载完成以后就可以获得加载的对象了
Log.i("TAG", "onClick.progressBar="+progressBar);
}
//1.借助Context获得布局资源(activity_main.xml)
//2.底层借助pull解析xml资源
//3.底层借助反射构建元素对象
//4.将元素对象添加到activity对应的window窗口上
setContentView(R.layout.activity_main);
去掉app的标题:
AndroidManifest.xml-->
<activity
//无标题API至少需要13
android:theme="@android:style/Theme.Holo.Light.NoActionBar">
</activity>
新建布局Layout:鼠标放在layout-->ctrl+N-->选择xml-->xml file-->layout---
新建android工程:鼠标放置在空地-->Ctrl+N-->选择android
Day02
滚动视图(垂直滚动和水平滚动):
1、ScrollView:默认垂直滚动
2、HorizontalScrollView:水平滚动
说明无论使用哪种布局,在内部都需要嵌套一个LinearLayout对象。
滚动布局里面放线性布局,线性布局里面放内容。
private TextView tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayoutlinearlayout=(LinearLayout)findViewById(R.id.ll);
tv2=(TextView)findViewById(R.id.tv2);
//动态布局,只有java里面有TextView。
for(inti=0;i<20;i++){
//实例化LinearLayout中的TextView
TextView tv=new TextView(this);
//tv.append("Text:"+i);
tv.setOnTouchListener(this);
tv.setText("Text:"+i);
tv.setTextColor(Color.WHITE);
//给LinearLayout中添加部件TextView
linearlayout.addView(tv);
}
}
@Override
public boolean onTouch(View v, MotionEventevent) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
CharSequence text=((TextView)v).getText();
Toast.makeText(this,text, Toast.LENGTH_LONG).show();
tv2.setText(text);
}
return true;
}
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<HorizontalScrollView
android:id="@+id/hsvId"
android:layout_width="match_parent"
android:layout_height="64dp"
android:scrollbars="none">
<LinearLayout
android:id="@+id/topId"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#ff000000"
android:orientation="horizontal">
</LinearLayout>
</HorizontalScrollView>
<FrameLayout
android:id="@+id/frmLayoutId"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/hsvId">
</FrameLayout>
</RelativeLayout>
private FrameLayout contentLayout;
private LinearLayout titleLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contentLayout=(FrameLayout)findViewById(R.id.frmLayoutId);
//获得线性布局对象
titleLayout=(LinearLayout)findViewById(R.id.topId);
//构建线性布局参数对象
LayoutParamsparams=new LayoutParams
(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
params.rightMargin=5;
params.gravity=Gravity.CENTER_VERTICAL;
//在线性布局添加几个TextView
for(inti=1;i<=20;i++){
//实例化LinearLayout里的TextView(标题)
TextView tv=new TextView(this);
//实例化FrameLayout里的TextView(内容)
TextView contentTv=new TextView(this);
contentTv.setText("Content"+i);
contentTv.setTextSize(30);
contentTv.setVisibility(View.GONE);
//在内容框架中加入部件
contentLayout.addView(contentTv);
tv.setText("Text"+i);
tv.setTextSize(24);
//tv.setTextColor(Color.WHITE);
tv.setTextColor(Color.parseColor("#ffffffff"));
//添加触摸事件
tv.setOnTouchListener(this);
//设置Tv对象的LayoutParams(使用哪个由布局决定)
tv.setLayoutParams(params);
titleLayout.addView(tv);
}
int count=contentLayout.getChildCount();
Log.i("TAG", "count="+count);
//显示contentLayout的第一个元素的所对应的部件的内容
contentLayout.getChildAt(0).setVisibility(View.VISIBLE);
}
/**触摸TextView时执行此方法
* @param v代表触摸的view
* @param event表示事件类型
* */
private int prePosition;
@Override
public boolean onTouch(View v, MotionEventevent) {
//event.getAction();获得事件类型(例如按下,抬起,....)
if(event.getAction()==MotionEvent.ACTION_DOWN){
CharSequence text=((TextView)v).getText();
Toast.makeText(this,text,0).show();
//检测contentLayout中是否包含这个view,调用showNext()方法
showNext(v);
}
return true;//事件已经处理完成
}
/**显示下一个view,上一个view隐藏*/
private void showNext(View v) {
//隐藏上一个view
contentLayout.getChildAt(prePosition).setVisibility(View.GONE);
//显示当前view
int position=titleLayout.indexOfChild(v);
Viewcv=contentLayout.getChildAt(position);
Log.i("TAG", "cv="+cv);
//显示组件的内容
cv.setVisibility(View.VISIBLE);
//当前位置设置为上一个位置
prePosition=position;
}
切换视图(文本切换器和图片切换器):
两者都是帧布局的子类。
3、TextSwitcher:文本切换器
a>setFactory()
b>setText()
private TextSwitcher textSwither;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textSwither=(TextSwitcher)findViewById(R.id.tSwitherId);
//设置view工厂
textSwither.setFactory(this);
//设置view动画
textSwither.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
textSwither.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
//设置当前view内容(不按button有0)
textSwither.setCurrentText(String.valueOf(count++));
}
private int count;
public void onClick(View v){
textSwither.setText(String.valueOf(count++));
}
/**借助此方法创建view对象*/
@Override
public View makeView() {
Log.i("TAG", "makeView()");
TextViewtv=new TextView(this);
tv.setTextSize(36);
return tv;
//返回这个view会添加到哪里
}
4、ImageSwitcher:图片切换器
a>setFactory
b>setImageResource()
private ImageSwitcher imageswitcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageswitcher=(ImageSwitcher)findViewById(R.id.imageswi);
imageswitcher.setFactory(this); //implements ViewFactory
}
private int res[]={R.drawable.cat,R.drawable.logo};
private int count;
public void onClick(View v){
imageswitcher.setImageResource(res[count]);
count++;
if(count==res.length){
count=0;
}
}
@Override
public View makeView() {
ImageViewimage=new ImageView(this);
//图片的规模类型
image.setScaleType(ImageView.ScaleType.FIT_CENTER);
return image;
}
5、Adapter Layout:适配器
Layout对象在显示数据时需要借助adapter加载数据,并将数据构建成相应的item,然后交给adapterlayout显示。
Adapter layout的应用场合由具体的adapter layout决定,常用的adapter layout对象:
ListView:以列表形式显示数据
GridView:以网格形式显示数据
Spinner:以下拉列表显示数据
ViewPager:以分页形式显示数据
Adapter Layout的构成及原理分析:
1>Adapter Layout对象(负责显示)
2>Adapter 对象(构建Item)
Context 对象(资源访问对象)
View 对象(呈现item数据)
Data 对象(代表数据)
ListView 应用的基本实现?(里面不能写其它View)
1>ListView 对象的构建(显示item)
2>ArrayAdapter 对象的构建(构建item):新建一个relative布局,部件有TextView,ImageView
3>ListView 关联adapter
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1、获得listview的Id
ListViewlsv=(ListView)findViewById(R.id.lsvId);
//2、构建adapter
ArrayAdapter<String>adapter=new ArrayAdapter<String> //3个参数
(this,R.layout.layout_textcolor,new String[]{"北京","上海","广州"});
//3、listview关联adapter
lsv.setAdapter(adapter);
//注释setContentView(R.layout.activity_main);和ListViewlsv=(ListView) findViewById(R.id.lsvId);
//修改:在1之下书写ListViewlsv=new ListView(this);
// 3之下书写setContentView(lsv);
}
修改:
private List<String> lsv=new ArrayList<String>();
{
lsv.add("北京");
lsv.add("上海");
lsv.add("广州");
}
//新的框架里面有textview和imageview
ArrayAdapter<String> adapter=new ArrayAdapter<String>
(this,R.layout.relative, R.id.tv,lsv);//4个参数,调用的框架,框架里面的tv
Day01
RelativeLayout:对viewgroup中的元素进行精确定位;对屏幕中的元素进行
android:layout_toRightOf="@id/btn01" 谁在谁的右边
android:layout_toLeftOf="@+id/btn03" 谁在谁的左边
android:layout_toStartOf="@+id/btn03"
android:layout_toEndOf="@id/btn01"
android:layout_alignParentRight="true" 与父类容器右端对齐
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:text="@string/btn03" 文本内容为。。。
Text中的内容转换为res-->values-->strings.xml中的@string/btn03的步骤:鼠标放置此上,ctrl+1,弹出对话框点击ok。
可在工程目录中的res-->values-->strings.xml,点击另一个框可见(下面)。
android:layout_alignBaseline="" 文本内容基线对齐
android:gravity="center" 文本内容居中
android:layout_gravity=”right/top” 只有帧布局和线性布局使用
android:layout_centerHorizontal="true" 最上面一行的中间
android:layout_centerVertical="true"
android:hint="" 字体灰色,上面能写字。提示语句。
android:text="" 文本内容
android:typeface="" 设置字体
android:textColor="" 字体颜色(RGB:红绿黄 f最深0最浅 例如:#ffff0000红色)
android:textSize="" 字体大小
android:layout_centerInParent="" 水平垂直都居中
android:layout_centerHorizontal="" 水平居中
android:layout_centerVertical="true" 垂直居中
android:layout_below="" 在谁的下面
android:layout_above="" 在谁的上面
容器之间的距离:外边距
android:layout_margin=""
android:layout_marginLeft=""
android:layout_marginRight=""
android:layout_marginBottom=""
android:layout_marginTop=""
内边距
android:padding=""
android:paddingLeft=""
android:paddingRight=""
android:paddingTop=""
android:paddingBottom=""
底端对齐gravity(指内容与边框的对齐)
android:gravity="bottom"
android:gravity="center" 文本内容居中
android:layout_gravity=”right/top” 只有帧布局和线性布局使用
LinearLayout:线性布局。对容器中的元素进行线性方式布局,水平和垂直。不能精确布局。
只有垂直方向(整体)才能水平居中(局部)。
只有水平方向(整体)才能垂直居中(局部)。
水平方向不能右对齐。
垂直方向不能下对齐。
android:layout_width="0dp" 权重(比重)-----水平(整体)
android:layout_weight="1"
android:layout_height="0dp" 权重(比重)----垂直(整体)
android:layout_weight="1"
View是所有类的父类
线性布局右对齐加view,比重为1.
GridLayout:以网格的布局。自动换行。
版本要求API为14:
修改:AndroidManifest.xml
android:columnCount="5" 列的数量,说几就几
android:rowCount="5" 行的数量,说几就几
横跨和填满,结合使用。
android:layout_gravity="fill_vertical" 垂直填满
android:layout_gravity="fill_horizontal" 水平填满
android:layout_columnSpan="2" 横跨几列
android:layout_rowSpan="2" 横跨几行
元素放置在几列(行数系统自动设置)
android:layout_column="" 从0开始
FrameLayout:帧布局
按照一定的层次结构,对元素进行布局。(从左上角展开进行布局)
一层一层进行布局。
放图片<Imageview>
android:src="@drawable/ic_launcher" 获取图片资源
图片复制到res-->drawable。 图片名字只能用小写字母和数字和下划线。
android:scaleType="fitCenter" 拉伸模式
layout_gravity=”right/top” 图片放到右上角。只有帧布局和线性布局使用
安卓官方图片@android:drawable
android:background="@drawable/ic_launcher" 背景图片
组件的大小最好写16dp的整数倍。dp是像素的值。
字体的大小最好是12sp的整数倍。
Common Layout布局优化:
1、优化层次结构(越浅越好,例如:借助merge标签合并相同元素)
继承体系:Window-->Perspective-->openperspective-->other-->Hierarchy View
DDMS中的adb 安卓设备调试桥。
继承体系树状图没有反应,可以重启DDMS的adb。
2、优化对象个数(越少越好)
merge合并:此布局和上一层的布局都是一样的布局。那么此布局的外围布局设置就可以设置为<merge></merge>。并且在上一层的布局中可以写:
<includelayout="@layout/btn_main_01"/>连接此布局。
3、优化布局的可重用性(借助include标签)
引入: <include layout=”layout/@布局文件”/>
4、优化对象的加载时机(延迟加载,借助viewstub)
android:inflatedId="@+id/pbarId"
类加载:类只加载一次。
<!-- 延迟加载layout属性指定的布局 -->
<ViewStub
android:layout="@layout/progressvar_layout_01"
android:inflatedId="@+id/pbarId" //progressbar的id
android:layout_centerHorizontal="true" //加载的图片放在最上面的中间
/>
private ViewStubvStub;
private ProgressBarprogressBar;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vStub=(ViewStub)findViewById(R.id.vsId);
progressBar=(ProgressBar)findViewById(R.id.pbarId);
}
public voidonClick(View v){
//加载布局文件(vStub中使用的layout属性此时会加载)
vStub.inflate();
//加载完成以后就可以获得加载的对象了
Log.i("TAG", "onClick.progressBar="+progressBar);
}
//1.借助Context获得布局资源(activity_main.xml)
//2.底层借助pull解析xml资源
//3.底层借助反射构建元素对象
//4.将元素对象添加到activity对应的window窗口上
setContentView(R.layout.activity_main);
去掉app的标题:
AndroidManifest.xml-->
<activity
//无标题API至少需要13
android:theme="@android:style/Theme.Holo.Light.NoActionBar">
</activity>
新建布局Layout:鼠标放在layout-->ctrl+N-->选择xml-->xml file-->layout---
新建android工程:鼠标放置在空地-->Ctrl+N-->选择android
Day02
滚动视图(垂直滚动和水平滚动):
1、ScrollView:默认垂直滚动
2、HorizontalScrollView:水平滚动
说明无论使用哪种布局,在内部都需要嵌套一个LinearLayout对象。
滚动布局里面放线性布局,线性布局里面放内容。
private TextView tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayoutlinearlayout=(LinearLayout)findViewById(R.id.ll);
tv2=(TextView)findViewById(R.id.tv2);
//动态布局,只有java里面有TextView。
for(inti=0;i<20;i++){
//实例化LinearLayout中的TextView
TextView tv=new TextView(this);
//tv.append("Text:"+i);
tv.setOnTouchListener(this);
tv.setText("Text:"+i);
tv.setTextColor(Color.WHITE);
//给LinearLayout中添加部件TextView
linearlayout.addView(tv);
}
}
@Override
public boolean onTouch(View v, MotionEventevent) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
CharSequence text=((TextView)v).getText();
Toast.makeText(this,text, Toast.LENGTH_LONG).show();
tv2.setText(text);
}
return true;
}
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<HorizontalScrollView
android:id="@+id/hsvId"
android:layout_width="match_parent"
android:layout_height="64dp"
android:scrollbars="none">
<LinearLayout
android:id="@+id/topId"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#ff000000"
android:orientation="horizontal">
</LinearLayout>
</HorizontalScrollView>
<FrameLayout
android:id="@+id/frmLayoutId"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/hsvId">
</FrameLayout>
</RelativeLayout>
private FrameLayout contentLayout;
private LinearLayout titleLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contentLayout=(FrameLayout)findViewById(R.id.frmLayoutId);
//获得线性布局对象
titleLayout=(LinearLayout)findViewById(R.id.topId);
//构建线性布局参数对象
LayoutParamsparams=new LayoutParams
(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
params.rightMargin=5;
params.gravity=Gravity.CENTER_VERTICAL;
//在线性布局添加几个TextView
for(inti=1;i<=20;i++){
//实例化LinearLayout里的TextView(标题)
TextView tv=new TextView(this);
//实例化FrameLayout里的TextView(内容)
TextView contentTv=new TextView(this);
contentTv.setText("Content"+i);
contentTv.setTextSize(30);
contentTv.setVisibility(View.GONE);
//在内容框架中加入部件
contentLayout.addView(contentTv);
tv.setText("Text"+i);
tv.setTextSize(24);
//tv.setTextColor(Color.WHITE);
tv.setTextColor(Color.parseColor("#ffffffff"));
//添加触摸事件
tv.setOnTouchListener(this);
//设置Tv对象的LayoutParams(使用哪个由布局决定)
tv.setLayoutParams(params);
titleLayout.addView(tv);
}
int count=contentLayout.getChildCount();
Log.i("TAG", "count="+count);
//显示contentLayout的第一个元素的所对应的部件的内容
contentLayout.getChildAt(0).setVisibility(View.VISIBLE);
}
/**触摸TextView时执行此方法
* @param v代表触摸的view
* @param event表示事件类型
* */
private int prePosition;
@Override
public boolean onTouch(View v, MotionEventevent) {
//event.getAction();获得事件类型(例如按下,抬起,....)
if(event.getAction()==MotionEvent.ACTION_DOWN){
CharSequence text=((TextView)v).getText();
Toast.makeText(this,text,0).show();
//检测contentLayout中是否包含这个view,调用showNext()方法
showNext(v);
}
return true;//事件已经处理完成
}
/**显示下一个view,上一个view隐藏*/
private void showNext(View v) {
//隐藏上一个view
contentLayout.getChildAt(prePosition).setVisibility(View.GONE);
//显示当前view
int position=titleLayout.indexOfChild(v);
Viewcv=contentLayout.getChildAt(position);
Log.i("TAG", "cv="+cv);
//显示组件的内容
cv.setVisibility(View.VISIBLE);
//当前位置设置为上一个位置
prePosition=position;
}
切换视图(文本切换器和图片切换器):
两者都是帧布局的子类。
3、TextSwitcher:文本切换器
a>setFactory()
b>setText()
private TextSwitcher textSwither;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textSwither=(TextSwitcher)findViewById(R.id.tSwitherId);
//设置view工厂
textSwither.setFactory(this);
//设置view动画
textSwither.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
textSwither.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
//设置当前view内容(不按button有0)
textSwither.setCurrentText(String.valueOf(count++));
}
private int count;
public void onClick(View v){
textSwither.setText(String.valueOf(count++));
}
/**借助此方法创建view对象*/
@Override
public View makeView() {
Log.i("TAG", "makeView()");
TextViewtv=new TextView(this);
tv.setTextSize(36);
return tv;
//返回这个view会添加到哪里
}
4、ImageSwitcher:图片切换器
a>setFactory
b>setImageResource()
private ImageSwitcher imageswitcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageswitcher=(ImageSwitcher)findViewById(R.id.imageswi);
imageswitcher.setFactory(this); //implements ViewFactory
}
private int res[]={R.drawable.cat,R.drawable.logo};
private int count;
public void onClick(View v){
imageswitcher.setImageResource(res[count]);
count++;
if(count==res.length){
count=0;
}
}
@Override
public View makeView() {
ImageViewimage=new ImageView(this);
//图片的规模类型
image.setScaleType(ImageView.ScaleType.FIT_CENTER);
return image;
}
5、Adapter Layout:适配器
Layout对象在显示数据时需要借助adapter加载数据,并将数据构建成相应的item,然后交给adapterlayout显示。
Adapter layout的应用场合由具体的adapter layout决定,常用的adapter layout对象:
ListView:以列表形式显示数据
GridView:以网格形式显示数据
Spinner:以下拉列表显示数据
ViewPager:以分页形式显示数据
Adapter Layout的构成及原理分析:
1>Adapter Layout对象(负责显示)
2>Adapter 对象(构建Item)
Context 对象(资源访问对象)
View 对象(呈现item数据)
Data 对象(代表数据)
ListView 应用的基本实现?(里面不能写其它View)
1>ListView 对象的构建(显示item)
2>ArrayAdapter 对象的构建(构建item):新建一个relative布局,部件有TextView,ImageView
3>ListView 关联adapter
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1、获得listview的Id
ListViewlsv=(ListView)findViewById(R.id.lsvId);
//2、构建adapter
ArrayAdapter<String>adapter=new ArrayAdapter<String> //3个参数
(this,R.layout.layout_textcolor,new String[]{"北京","上海","广州"});
//3、listview关联adapter
lsv.setAdapter(adapter);
//注释setContentView(R.layout.activity_main);和ListViewlsv=(ListView) findViewById(R.id.lsvId);
//修改:在1之下书写ListViewlsv=new ListView(this);
// 3之下书写setContentView(lsv);
}
修改:
private List<String> lsv=new ArrayList<String>();
{
lsv.add("北京");
lsv.add("上海");
lsv.add("广州");
}
//新的框架里面有textview和imageview
ArrayAdapter<String> adapter=new ArrayAdapter<String>
(this,R.layout.relative, R.id.tv,lsv);//4个参数,调用的框架,框架里面的tv
- 达内培训第二阶段第一周--齐磊老师
- 第二阶段第一周
- 培训第一周
- ACM培训第一周总结
- 广嵌培训第一周
- 德润培训第一周
- java第一周培训学习心得
- 达内培训第一天笔记
- 达内培训第三天笔记
- 翁恺老师第一周作业
- TOT12-2技能培训 第一周
- 暑期培训第一周组队赛
- 广州码神信息科技有限公司--培训第一周
- 培训第一周的练习题目
- 达内培训面向对象第五天笔记
- 达内培训学习心得
- 在东软正式培训的第一周
- 图灵社团ios培训第一周(类)
- MySQL语法( 一 )---show--create--use--insert---select--distanct---where
- Android项目重构之路:界面篇
- RxJava学习资源整合
- Android 模拟MotionEvent事件 触发输入法
- VMware中的Ubuntu无法联网问题解决方式汇总
- 达内培训第二阶段第一周--齐磊老师
- 2016-计蒜之道-初赛-第二场-A-联想公司的logo设计
- UIViewContentMode 图片排版
- 机器学习面试题总结
- Hibernate的几种查询方式 HQL,QBC,QBE,离线查询,复合查询,分页查询
- Java 集合中List和ArrayList的区别
- STL源码剖析——STL概论
- 工业界 vs. 学术界: 一个年轻员工的视角
- leetcode 5 Longest Palindromic Substring