达内培训第二阶段第一周--齐磊老师

来源:互联网 发布:视觉中国图片库软件 编辑:程序博客网 时间: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"    //progressbarid

        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、获得listviewId

        ListViewlsv=(ListView)findViewById(R.id.lsvId);

        //2、构建adapter

        ArrayAdapter<String>adapter=new ArrayAdapter<String>    //3个参数

(this,R.layout.layout_textcolor,new String[]{"北京","上海","广州"});

        //3listview关联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"    //progressbarid

        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、获得listviewId

        ListViewlsv=(ListView)findViewById(R.id.lsvId);

        //2、构建adapter

        ArrayAdapter<String>adapter=new ArrayAdapter<String>    //3个参数

(this,R.layout.layout_textcolor,new String[]{"北京","上海","广州"});

        //3listview关联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

0 0