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"
     >
资料下载
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值