Andriod

Common Layout总结

1.Common Layout基础

1)RelativeLayout (相对布局)
2)LinearLayout (线性布局)
3)GridLayout (网格布局)
4)FrameLayout(帧布局)
2.Common Layout优化

1)优化继承体系(减少层次结构)

2)优化对象个数(merge)

例如:借助merge标签实现相同布局的合并

1. <merge xmlns:android="http://schemas.android.com/apk/res/android">

2. </merge>

3)优化加载时机(ViewStub)

1.  <!-- 借助此标签实现元素的延迟加载 -->

2.     <ViewStub

3.         android:id="@+id/stub_id"

4.         android:inflatedId="@+id/tv01"

5.         android:layout="@layout/layout_tv_1"

6.         android:layout_width="match_parent"

7.         android:layout_height="wrap_content"

8.         />  

4)优化布局重用(include)

例如:借助include标签导入共用布局

1.  <include layout="@layout/top_title_layout_1"/>  

3.Common Layout扩展

1)ScrollView (垂直滚动)

相关方法:append();

 

2)HorizontalScrollView(水平滚动)

具体实现步骤:

1.获得线性布局对象

2.构建线性布局参数对象

LayoutParams params=new LayoutParams(

LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

params.rightMargin=5;//设置右边距params.gravity=Gravity.CENTER_VERTICAL;//设置垂直居中

3.在线性布局添加几个TextView

a)setText();

b)setVisibility(View.GONE);//设置隐藏且不占空间

c)setVisibility(View.INVISIBLE);//设置隐藏且占空间

d)setTextColor(Color.WHITE);

e)setTextColor(Color.parseColor("#ffffffff"));

4.添加触摸事件

setOnTouchListener();

//获得事件类型

event.getAction()==MotionEvent.ACTION_DOWN5.

设置TextView对象的LayoutParams(使用哪个由布局决定)

setLayoutParams(params);

getChildCount();//获得子元素个数

getChildAt(0).setVisibility(View.VISIBLE);

indexOfChild();

 

说明无论使用哪种布局,在内部都需要嵌套一个LinearLayout对象。

ScrollView 相关布局:

 <ScrollView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content">

        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="match_parent"

            android:orientation="vertical">

       <TextView

        android:id="@+id/text01"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textSize="30sp"/>

        </LinearLayout>

</ScrollView>

 

3.)TextSwitcher(文本切换器)

具体实现步骤:

1)构建或者获得TextSwitcher对象

2)设置View工厂(setFactory)

a)setFactory(....)

3)设置动画Animation(了解)

a)setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));

4)设置当前view内容

a)setCurrentText();

b)setText(...)

 

4)ImagerSwitcher(图片切换器)

ImageSwitcher 主要用于实现图片的切换显示。

具体实现步骤:

1)构建或者获得ImageSwitcher对象

2)设置View工厂

setFactory();

3)设置动画Animation(了解)

a)setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.slide_in_left));

b)setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.slide_out_right));

4)显示图片

setImageResource();

setScaleType(ScaleType.CENTER);

 

Adapter Layout (适配布局)

 

1.Adapter Layout 是什么?

这些Layout对象在显示数据需要借助adapter加载数据,并将数据构建成相应的item,然后交给adapter layout显示。

1)ViewGroup(容器)

2)View

3)Adapter View

 

2.Adapter Layout 应用场合?

由具体的Adapter Layout对象决定:常用的Adapter Layout对象有:

1)ListView (以列表形式显示数据)

2)GridView (以网格形式显示数据)

3)Spinner  (以下拉列表显示数据)

4)ViewPager(以分页形式显示数据)

 

3.Adapter Layout的构成及实现原理

1)构建Adapter View对象

2)构建Adapter

3)关联Adapter

 

Adapter Layout (ListView)

 

1.ListView 是什么?

1)AdapterView (适配视图)

2)ViewGroup(列表容器)

 

2.ListView 对象应用场合?

ListView要以列表形式显示数据,例如:

1)微信好友列表

2)QQ好友列表

3)软件列表

4)股票列表

5)......

 

3.ListView 应用的基本实现?

1.ListView 应用实现的基本步骤
1.构建ListView对象
2.准备item view,item数据
3.构建Adapter,组装数据,构建item.
4.Listview 关联adapter.

 

Adapter 总结

 

1.Adapter 基础

1.ArrayAdapter (数据:数组,List);

2.SimpleAdapter(数据:List<? extends Map<String,?>>)

SimpleAdapter adapter=new SimpleAdapter(this,

brands,//data(List<? Map<String,?>>)

R.layout.list_item_02, //resource (item view 模板)

new String[]{"logo","name"},//map中的key

new int[]{R.id.imageView1,R.id.textView1});//resource中的viewId

3.SimpleCursorAdapter(数据集为一个Cursor对象)

4.BaseAdapter(抽象类,有部分抽象方法)

5.ListAdapter(接口,标准)

 

2.Adapter 扩展

1)直接继承BaseAdapter

2)继承BaseAdapter的子类类型(例如继承ArrayAdapter)

 

3.Adapter 优化

1)优化目的:提高listview的显示效率

2)优化方式:

1)重用getView方法中的convertView.

a)convertView初始值为null

b)convertView何时会有值?(listView滑动时)

c)convertView重用的目的是减少itemView的构建次数

2)减少getView方法中的findViewById

方法的执行次数(策略是借助ViewHolder对象对itemview中的子元素的位置进行记录。);

 

ListView 总结

 

1. ListView 事件处理

1)item 的点击事件

a)OnItemClickListener

b)OnItemLongClickListener

2)item 子元素的点击事件

c)建议重写getView,在此方法中对item子元素添加相应事件,并对当前位置进行绑定(setTag);

相关方法总结:

a)setTag();

b)getTag();

c)parent.getItemAtPosition(position);//获得点击的item,此方法的返回值类型由adapter的getItem方法决定

d)adapter.notifyDataSetChanged();//更新listview,当执行此动作时,listview中的数据会重新加载(会重新调用adapter的getView)

2. ListView 中item的选择模式

 

选择模式的设置

1)单选模式:setChoiceMode(ListView.CHOICE_MODE_SINGLE)

2)多选模式:setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)

案例:点击item实现item的选择,

并且要求高亮显示。

1)首先设置选择模式

2)获得选中的item的位置

3)刷新listview,在adapter的

getView方法中根据位置设定item

的背景。

 

相关API及方法总结:

1)ListView(AbsListView,AdapterView,)

a)setAdapter()

b)getAdapter()

c)setOnItemClickListener()

d)setChoiceMode()

e)getCheckedItemPosition()

f)getCheckedItemPositions()

g)getItemAtPosition(...);

 

2)Adapter(ListAdapter,BaseAdapter,ArrayAdapter,.....)

a)notifyDataSetChanged();

 

3.ListView 排序

1)Collections.sort(....)

/**对数据按名字的第一个字母进行排序*/

Collections.sort(citys, new Comparator<City>() {

   public int compare(City lhs, City rhs) {

   return lhs.getNameKey().compareTo(rhs.getNameKey());

   };

});

2)notityDataSetChanged(...)

 

2.Listview 分块

1)应用场合(数据量小,已有序)

2)应用实现方式

1)对元素进行排序

2)每个item上都添加一个Textview显示首字母

3)隐藏部分item对象的首字母的显示(在adapter的getview方法)

a)首先获得当前位置的section(块)的ASCII

getItem(position).getNameKey().toUpperCase().charAt(0);

b)获得此section在listview中的最小位置

c)对非最小位置的section进行隐藏

setVisibility(View.GONE);

 

4.Listview 导航

1)应用场合(分块显示的场合)

2)应用实现方式:

1)在页面右侧中添加一个listview

2)实现右侧listview中数据的显示

3)点击右侧listview列表时定位具体分块

3)实现步骤:

1.获得listview

2.设置选择模式

3.构建适配器

4.关联适配器

5.添加监听器

相关API及方法总结:

a)getCheckedItemPosition();

b)getItemAtPosition(position);

c)charAt(0);

d)setSelectionFromTop(minPos,0);//设置此列表的顶端显示为section的最小位置,0表示没有偏移量

e)采用此方式启动activity,可以获得回传的数据,可以重写onActivityResult来接收回传的数据

startActivityForResult(new Intent(this,CityActivity.class),//表示意图

100//请求码

f)setResult(200, intent);//设置回传数据及响应码

g)intent.putExtra("cityName",city.getName());(封装数据)

h)intent.getStringExtra("cityName");//获得回传的数据

分块与导航显示效果:

 

 

5.Listview 扩展(ExpandableListView)

1)应用场合(分组显示,实现展开,收起操作)

2)具体实现

1)获得ExpandableListView对象

2)构建适配器(Adapter)对象

3)关联Adapter(ExpandableListAdapter)

4)监听item的点击事件

 

相关API:

1)ExpandableListView

2)ExpandableListAdapter

3)BaseExpandableListAdapter

4)SimpleExpandableListAdapter

相关方法:

1)setOnChildClickListener(....)

2)expandGroup(int index)

3)collapseGroup(...)

4)isGroupExpanded(....)

5).......

 

6.Spinner  对象(下拉列表)

1)应用场合(下拉列表形式显示数据,例如选择学历)

2)应用实现

11)获得Spinner对象

2)构建适配器对象

3)关联适配器对象

4)添加监听器

 

案例:城市信息联动

 

Spinner 相关方法:

1)getSelectedItem();

2)setOnItemSelectedListener(...)

3)childList.addAll(Arrays.asList(childs[position]));

 

GridView 总结

 

1.GridView 应用场合(网格形式显示数据,例如:支付宝首页,微信支付)

2.GridView 应用实现

1)获得GridView对象

2)构建适配器

3)关联适配器

4)添加监听事件

 

3.GridView 常用属性?

android:numColumns="2"

android:verticalSpacing="1dp"

android:horizontalSpacing="1dp"

android:columnWidth="100dp"

android:stretchMode="columnWidth"

 

4.GridView item 的选择器的设置?

 

1)选择器应用场合?

 

一般与view对象的状态结合使用,大多数是应用于view背景或字体颜色的设置

 

2)选择器的创建?

 

a)目录:res/drawable/selector.xml

b)访问:@drawable/选择器的名称

c)构建:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item  android:drawable="@color/huise"

           android:state_pressed="true"/>

    <item  android:drawable="@color/white"

           android:state_pressed="false"/>

</selector>

 

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item  android:color="#ff669900"

           android:state_pressed="true"/>

    <item  android:color="#ff000000"

           android:state_pressed="false"/>

</selector>

 

ViewPager总结

 

1.ViewPager 的应用场合(分页形式显示数据例如:广告条,小说分页显示,系统新手指导)

2.ViewPager 应用的实现

1)获得ViewPager对象(android.support.v4.view.ViewPager)

2)构建适配器对象

3)关联适配器对象

4)添加监听器

setOnPageChangeListener();

 

案例:

1)系统广告(banner)条的实现

2)系统新手指导页面的实现?

 

扩展:开始体验Button选择器的设置

1)selector (引入两个shape)

a)res/drawable/selector_01.xml

2)shape(通过此对象绘制图形)

a)res/drawable/shape_01.xml

b)res/drawable/shape_02.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 借助此元素定义view的颜色 -->

    <solid android:color="#ff669900"/>

    <!-- 借助此元素对view进行角度设置 -->

    <corners android:radius="8dp" />

</shape>

扩展:页面指示器的设置

 

1)添加页面指示器

a)定义一个线性布局

b)在线性布局动态几个小圆点

b.1)构建ImageView对象

b.2)设置ImageView对象选择器

v.setBackgroundRecource()

 

2)页面滑动时动态修改页面指示器中

小圆点的状态(例如enable状态)

view.setEnable(flag) //修改指示器状态

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/p02" android:state_enabled="true"/>

    <item android:drawable="@drawable/p01" android:state_enabled="false"/>

 

</selector>

 

3)点击页面指示器中小圆点时切换到

不同页面:viewPager.setCurrentItem(pos);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值