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"
     >
資料下載
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章