Android基础-11

Android基础-11 新特性

01_fragment入门

Android3.0开始引入这个新特性。主要用于实现一个多任务的界面。

fragement是activity的子界面,是运行在activity里面的。

步骤:

1、添加一个fragment一个类型,继承fragment;
2、在fragment中加载对应的布局文件;
3、得到fragment的管理器
4、得到fragment的事务管理器
5、在指定的容器中填充fragment
6、提交fragment的事务

代码:

//加载功能一对应的界面
//得到fragment的管理器
FragmentManager  fm = this.getFragmentManager();
//得到fragment的事务管理器
FragmentTransaction ft = fm.beginTransaction();

Fragment01 f01 = new Fragment01();
//在指定的容器中填充fragment
ft.replace(R.id.fl_container, f01);
//提交fragment的事务
ft.commit();

02_fragment的向下兼容

把所有与fragment相关API都是从surpport.vx里面导入。

代码:

MainActivity.java:

package com.itheima.fragmentsy;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends FragmentActivity {

    private FragmentManager fm;
    private Fragment01 f01;

    private EditText data;
    private TextView tv_info;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        data = (EditText) findViewById(R.id.data);
        tv_info = (TextView) findViewById(R.id.tv_info);
      fm = this.getSupportFragmentManager();
        //得到fragment的事务管理器
        FragmentTransaction ft = fm.beginTransaction();

        f01 = new Fragment01();
        //在指定的容器中填充fragment
        ft.replace(R.id.fl_container, f01);
        //提交fragment的事务
        ft.commit();
    }

    public void submit(View view){
        String dataStr = data.getText().toString();
        f01.getData(dataStr);
    }

    public void open01(View view){
        //加载功能一对应的界面

        //得到fragment的事务管理器
        FragmentTransaction ft = fm.beginTransaction();

        //在指定的容器中填充fragment
        ft.replace(R.id.fl_container, f01);
        //提交fragment的事务
        ft.commit();
    }

    public void open02(View view){
        //加载功能一对应的界面

        //得到fragment的事务管理器
        FragmentTransaction ft = fm.beginTransaction();

        Fragment02 f02 = new Fragment02();
        //在指定的容器中填充fragment
        ft.replace(R.id.fl_container, f02);
        //提交fragment的事务
        ft.commit();
    }

    public void open03(View view){
        //加载功能一对应的界面

        //得到fragment的事务管理器
        FragmentTransaction ft = fm.beginTransaction();

        Fragment03 f03 = new Fragment03();
        //在指定的容器中填充fragment
        ft.replace(R.id.fl_container, f03);
        //提交fragment的事务
        ft.commit();
    }

    public void getInfo(String info){
        tv_info.setText(info);
    }

}

Fragment01.java:

package com.itheima.fragmentsy;

import android.app.Activity;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Fragment01 extends Fragment {

    private TextView tv_data;

    private EditText et_info;

    private Button bt_send;
    /**
     *  初始化fragment对象
     *  加载布局文件
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = View.inflate(getActivity(), R.layout.fragment01, null);

        et_info = (EditText) view.findViewById(R.id.et_info);
        //在对应的布局文件中的控件
        tv_data = (TextView) view.findViewById(R.id.tv_data);

        bt_send = (Button) view.findViewById(R.id.bt_send);
        //给按钮添加单击事件的响应方法
        bt_send.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //把数据传递activity

                send();
            }
        });
        return view;
    }

    public void getData(String data){
        tv_data.setText(data);
    }

    public void send(){
        String info = et_info.getText().toString();
        //得到运行fragment的activity
        Activity a = this.getActivity();
        //判断activity是不是mainactivity
        if(a instanceof MainActivity){
            MainActivity ma = (MainActivity)a;
            //调用activity的方法,把数据传递过去
            ma.getInfo(info);

        }
    }
}

03_fragment的数据传递

步骤:

1、在fragment中提供了一个接收数据的方法;
2、在activity中调用fragment的方法,把数据传递过去;

代码:

package com.itheima.fragmentsy;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Fragment01 extends Fragment {

    private TextView tv_data;
    /**
     *  初始化fragment对象
     *  加载布局文件
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = View.inflate(getActivity(), R.layout.fragment01, null);
        //在对应的布局文件中的控件
        tv_data = (TextView) view.findViewById(R.id.tv_data);
        return view;
    }

    public void getData(String data){
        tv_data.setText(data);
    }
}

mainactivity中的方法:

public void submit(View view){
    String dataStr = data.getText().toString();
    f01.getData(dataStr);
}

在fragment中把数据传递给activity:

步骤:

1、在fragment得到目标activity;
2、调用activity的方法把数据传递过去;

代码:

package com.itheima.fragmentsy;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Fragment01 extends Fragment {

    private TextView tv_data;

    private EditText et_info;

    private Button bt_send;
    /**
     *  初始化fragment对象
     *  加载布局文件
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = View.inflate(getActivity(), R.layout.fragment01, null);

        et_info = (EditText) view.findViewById(R.id.et_info);
        //在对应的布局文件中的控件
        tv_data = (TextView) view.findViewById(R.id.tv_data);

        bt_send = (Button) view.findViewById(R.id.bt_send);
        //给按钮添加单击事件的响应方法
        bt_send.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //把数据传递activity
                send();
            }
        });
        return view;
    }

    public void send(){
        String info = et_info.getText().toString();
        //得到运行fragment的activity
        Activity a = this.getActivity();
        //判断activity是不是mainactivity
        if(a instanceof MainActivity){
            MainActivity ma = (MainActivity)a;
            //调用activity的方法,把数据传递过去
            ma.getInfo(info);
        }
    }
}

04_fragment的生命周期

与activity生命周期的方法相比,多了:
onCreateView:加载布局文件
onDestroyView:销毁fragment的视图对象

05_属性动画

01_为什么使用属性动画

02_属性动画入门

03_3种常见属性动画

代码:

package com.itheima.propertiesanimi;

import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        iv = (ImageView) findViewById(R.id.iv);
    }

    public void trans(View view) {
        // 把动画对象作用到按钮上
        ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationX", 0, 10,
                20, 40, 60, 100, 120, 140);
        oa.setDuration(3000);
        oa.setRepeatCount(2);
        oa.setRepeatMode(ObjectAnimator.REVERSE);

        oa.start();
    }

    public void rotate(View view) {

        // 把动画对象作用到按钮上
        ObjectAnimator ra = ObjectAnimator.ofFloat(iv, "rotation", 0, 30,
                60, 90, 120, 150, 180);
        ra.setDuration(3000);
        ra.setRepeatCount(2);
        ra.setRepeatMode(ObjectAnimator.REVERSE);

        ra.start();
    }

    public void alpha(View view) {

        // 把动画对象作用到按钮上
        ObjectAnimator aa = ObjectAnimator.ofFloat(iv, "alpha", 0, 0.2f,
                0.4f, 0.6f, 0.8f, 1.0f);
        aa.setDuration(3000);
        aa.setRepeatCount(2);
        aa.setRepeatMode(ObjectAnimator.REVERSE);

        aa.start();
    }

    public void scale(View view) {

        // 把动画对象作用到按钮上
        ObjectAnimator sa = ObjectAnimator.ofFloat(iv, "scaleY", 0, 0.2f,
                0.4f, 0.6f, 0.8f, 1.0f);
        sa.setDuration(3000);
        sa.setRepeatCount(2);
        sa.setRepeatMode(ObjectAnimator.REVERSE);

        sa.start();
    }

    public void set(View view) {

        AnimatorSet set = new AnimatorSet();

        ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationX", 0, 10,
                20, 40, 60, 100, 120, 140);
        oa.setDuration(3000);
        oa.setRepeatCount(2);
        oa.setRepeatMode(ObjectAnimator.REVERSE);

        ObjectAnimator ra = ObjectAnimator.ofFloat(iv, "rotation", 0, 30,
                60, 90, 120, 150, 180);
        ra.setDuration(3000);
        ra.setRepeatCount(2);
        ra.setRepeatMode(ObjectAnimator.REVERSE);

        ObjectAnimator aa = ObjectAnimator.ofFloat(iv, "alpha", 0, 0.2f,
                0.4f, 0.6f, 0.8f, 1.0f);
        aa.setDuration(3000);
        aa.setRepeatCount(2);
        aa.setRepeatMode(ObjectAnimator.REVERSE);

        // 把动画对象作用到按钮上
                ObjectAnimator sa = ObjectAnimator.ofFloat(iv, "scaleY", 0, 0.2f,
                        0.4f, 0.6f, 0.8f, 1.0f);
                sa.setDuration(3000);
                sa.setRepeatCount(2);
                sa.setRepeatMode(ObjectAnimator.REVERSE);

        //组合播放动画
        set.playTogether(oa,ra,aa,sa);

        set.start();
    }
}

06_样式与主题(重点)

01_样式

样式:主要作用于控件上的,修饰控件的一些属性;

自定义样式:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="button_color_stype">
        <item name="android:background" >#ff0000</item>
        <item name="android:textColor">#00ff00</item>
    </style>

    <style name="textview_color_stype">
        <item name="android:background" >#ff0000</item>
        <item name="android:textColor">#0000ff</item>
    </style>

    <style name="textview_color_stype_largesize" parent="textview_color_stype">
        <item name="android:textSize" >20sp</item>
        <item name="android:background" >#0000ff</item>
    </style>

</resources>

02_主题

主题:界面或者整个应用程序的风格;

theme

定义主题的方法与定义样式完全一样;

代码:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="my_theme_activity_background">
    <item name="android:background">#00ff00</item>
</style>

</resources>

<activity
    android:name="com.itheima.style.MainActivity"
    android:label="@string/app_name"
    android:theme="@style/my_theme_activity_background"
     >
时间: 2024-11-09 05:59:26

Android基础-11的相关文章

Android基础入门教程——8.3.11 Paint API之—— ColorFilter(颜色过滤器)(3-3)

Android基础入门教程--8.3.11 Paint API之-- ColorFilter(颜色过滤器)(3-3) 标签(空格分隔): Android基础入门教程 本节引言: 嗯,本来说好今天不写的,还是写吧,毕竟难得空闲哈~,本节给大家带来的是 ColorFilter的第三个子类:PorterDuffColorFilter,看到PorterDuff大家一定不会 陌生吧,假如你看过前面的 Android基础入门教程--8.3.5 Paint API之-- Xfermode与PorterDuff

Android基础入门教程——2.4.11 AutoCompleteTextView(自动完成文本框)的基本使用

Android基础入门教程--2.4.11 AutoCompleteTextView(自动完成文本框)的基本使用 标签(空格分隔): Android基础入门教程 本节引言: 本节继续来学习Adapter类的控件,这次带来的是AutoCompleteTextView(自动完成文本框), 相信细心的你发现了,和Adapter搭边的控件,都可以自己定义item的样式,是吧! 或者说每个Item的布局~想怎么玩就怎么玩~嗯,话不多说,开始本节内容~ 对了贴下官方API:AutoCompleteTextV

Android基础入门教程——10.11 传感器专题(2)——方向传感器

Android基础入门教程--10.11 传感器专题(2)--方向传感器 标签(空格分隔): Android基础入门教程 本节引言: 在上一节中我们中我们对传感器的一些基本概念进行了学习,以及学习了使用传感器的套路, 本节给大家带来的传感器是方向传感器的用法,好的,开始本节内容~ 1.三维坐标系的概念: 在Android平台中,传感器框架通常是使用一个标准的三维坐标系来表示一个值的.以本节 要讲的方向传感器为例子,确定一个方向也需要一个三维坐标,毕竟我们的设备不可能永远 都是水平端着的吧,安卓给

2015年最新Android基础入门教程目录(完结版)

2015年最新Android基础入门教程目录(完结版) 标签(空格分隔): Android基础入门教程 前言: 关于<2015年最新Android基础入门教程目录>终于在今天落下了帷幕,全套教程 共148节已编写完毕,附上目录,关于教程的由来,笔者的情况和自学心得,资源分享 以及一些疑问等可戳:<2015最新Android基础入门教程>完结散花~ 下面是本系列教程的完整目录: 第一章:环境搭建与开发相关(已完结 10/10) Android基础入门教程--1.1 背景相关与系统架构

《2015最新Android基础入门教程》完结散花~

<2015最新Android基础入门教程>完结散花~ 标签(空格分隔): 反思小结 引言: 从六月底就开始编写这套教程,历时将近五个多月,今天终于写完了,全套教程正文部分148篇, 十大章,从基本UI控件到四大组件,Intent,Fragment,事件处理,数据存储,网络编程,绘图与动画, 多媒体,系统服务等都进行了详细的讲解!代码都是都是在Android Studio上进行编写的,全文 采用Markdown,行文结构清晰,还结合了实际开发中一些常见的问题进行了剖析-由于个人能力的局限, 虽然

Android基础入门教程——1.1 背景相关与系统架构分析

Android基础入门教程--1.1 背景相关与系统架构分析 1.Android背景与当前的状况 Android系统是由Andy Rubin创建的,后来被Google收购了:最早的版本是:Android 1.1版本 而现在最新的版本是今年5.28,Google I/O大会上推出的Android M,有趣的是Android系统的命名都是以点心来命名的,下述表是15个Android版本名称,对应API号以及发布时间! 系统版本名称 API版本号 发布时间 Android 1.5:Cupcake:纸杯

Android基础入门教程——8.3.15 Paint API之——Typeface(字型)

Android基础入门教程--8.3.15 Paint API之--Typeface(字型) 标签(空格分隔): Android基础入门教程 本节引言: 本节带来Paint API系列的最后一个API,Typeface(字型),由字义,我们大概可以猜到,这个 API是用来设置字体以及字体风格的,使用起来也非常的简单!下面我们来学习下Typeface的一些相关 的用法!官方API文档:Typeface~ 1.字体的可选风格 四个整型常量: BOLD:加粗 ITALIC:斜体 BOLD_ITALIC

android基础知识13:AndroidManifest.xml文件解析

1.重要性 AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息. 因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所

Android基础入门教程——4.1.2 Activity初窥门径

Android基础入门教程--4.1.2 Activity初窥门径 标签(空格分隔): Android基础入门教程 本节引言: 上一节中我们对Activity一些基本的概念进行了了解,什么是Activity,Activity的生命周期,如何去启动一个Activity等,本节我们继续来学习Activity,前面也讲了一个App一般都是又多个Activity构成的,这就涉及到了多个Activity间数据传递的问题了,那么本节继续学习Activity的使用!另外关于传递集合,对象,数组,Bitmap的