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"
>
資料下載