Android基础知识11

来源:互联网 发布:js实现tab切换 编辑:程序博客网 时间:2024/06/01 07:13
1 fragment入门
  [1]在activity布局中定义fragment

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="match_parent"><fragment android:name="com.itheima.fragment.Fragment1"android:id="@+id/list"android:layout_weight="1"android:layout_width="0dp"android:layout_height="match_parent" /><fragment android:name="com.itheima.fragment.Fragment2"android:id="@+id/viewer"android:layout_weight="1"android:layout_width="0dp"android:layout_height="match_parent" /></LinearLayout>
[2]声明fragment//定义一个Fragment public class Fragment1 extends Fragment {//当用户第一次画ui的时候调用 要显示Fragment自己的内容 setContentView(R.layout.activity_main);@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {//[1]通过打气筒把一个布局转换成view对象View view = inflater.inflate(R.layout.fragment1, null);return view;}}




name属性 要指定我们自己定义的fragment
事务 执行一段逻辑 要么同时成功 要么同时失败 银行转账
动态替换fragment
public class MainActivity extends Activity {@SuppressWarnings("deprecation")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// [1]获取手机的宽和高 windommanagerWindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);int width = wm.getDefaultDisplay().getWidth();int height = wm.getDefaultDisplay().getHeight();// [2]判断横竖屏// [3.1]获取fragment的管理者FragmentManager manager = getFragmentManager();// [3.2]开启一个事务FragmentTransaction transaction = manager.beginTransaction();if (height > width) {// 说明是竖屏 androind 代表系统定义好的 android.R.id.content理解成是当前手机的窗体transaction.replace(android.R.id.content, new Fragment1());} else {// 横屏transaction.replace(android.R.id.content, new Fragment2());}//[4]一定要记得 提交commit transaction.commit();}}


public class Fragment1 extends Fragment {//当用户第一次画ui的时候调用  要显示Fragment自己的内容  setContentView(R.layout.activity_main);@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {//[1]通过打气筒把一个布局转换成view对象 View view = inflater.inflate(R.layout.fragment1, null);return view;}}







使用fragment兼容低版本的写法
  定义fragment继承V4包中的Fragment 
 定义的activity要继承v4包中的FragmentActivity
 通过这个方法getSupportFragmentManager  获取Fragment的管理者
fragment的生命周期
  [1]使用Fragment必须重写onCreateView方法
  [2]还可以重写一个ondestroy方法 做一些收尾的工作.

public class DiscoverFragment extends Fragment {//依附在activity上@Overridepublic void onAttach(Activity activity) {System.out.println("onAttach");super.onAttach(activity);}@Overridepublic void onCreate(Bundle savedInstanceState) {System.out.println("onCreate");super.onCreate(savedInstanceState);}//Fragment 加载一个布局  显示Fragment的内容 @Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_discover, null);System.out.println("onCreateView");return view; }//在这个onCreateView方法中初始化的view  完全初始化 @Overridepublic void onActivityCreated(Bundle savedInstanceState) {System.out.println("onActivityCreated");super.onActivityCreated(savedInstanceState);}@Overridepublic void onStart() {System.out.println("onStart");super.onStart();}@Overridepublic void onResume() {System.out.println("onResume");super.onResume();}@Overridepublic void onPause() {System.out.println("onPause");super.onPause();}//当界面不可见@Overridepublic void onStop() {System.out.println("onStop");super.onStop();}//在oncreateView方法里面初始化的view销毁了@Overridepublic void onDestroyView() {System.out.println("onDestroyView");super.onDestroyView();}@Overridepublic void onDestroy() {System.out.println("onDestroy");super.onDestroy();}//取消依附 @Overridepublic void onDetach() {System.out.println("onDetach");super.onDetach();}}


 
6 fragment之间的通信
  [1]Fragment有一个公共的桥梁 Activity



8 AutoCompleteTextView控件的使用 
7 menu菜单
 [1]添加菜单方式 通过一个布局 在res下 meun目录下创建一个布局 
 [2]动态的添加 

 [3]点击menu弹出一个对话框 如果你想实现自己定义的view 效果重写onMeunOpened方法


public class MainActivity extends Activity {//[0]声明AutoCompleteTextView要显示的数据  private static final String[] COUNTRIES = new String[] {         "laofang", "laozhang", "laoli", "laobi","laoli","laowang","aab","abb","cc"     };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//[1]找到控件AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.actv);//[2]创建数据适配器        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,                android.R.layout.simple_dropdown_item_1line, COUNTRIES);        //[3]设置数据适配器        actv.setAdapter(adapter);}}






9 补间动画
 
public class MainActivity extends Activity {private ImageView iv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//执行我们的动画iv = (ImageView) findViewById(R.id.iv);//设置一个点击事件iv.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(getApplicationContext(), "哈哈 你点不到我", 1).show();}});}//点击按钮 实现iv 透明的效果  动画 public void click1(View v) { //1.0意味着着完全不透明 0.0意味着完全透明AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);aa.setDuration(2000); //设置动画执行的时间aa.setRepeatCount(1); //设置重复的次数aa.setRepeatMode(Animation.REVERSE);//设置动画执行的模式//iv开始执行动画 iv.startAnimation(aa);}//点击按钮 实现iv 执行一个旋转 动画 public void click2(View v) { //fromDegrees 开始角度   toDegrees 结束角度//RotateAnimation  ra = new RotateAnimation(0, 360);RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);ra.setDuration(2000); //设置动画执行的时间ra.setRepeatCount(1); //设置重复的次数ra.setRepeatMode(Animation.REVERSE);//设置动画执行的模式//iv开始执行动画 iv.startAnimation(ra);}//点击按钮进行一个缩放动画public void click3(View v) { ScaleAnimation sa = new ScaleAnimation(1.0f,2.0f, 1.0f, 2.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);sa.setDuration(2000); //设置动画执行的时间sa.setRepeatCount(1); //设置重复的次数sa.setRepeatMode(Animation.REVERSE);//设置动画执行的模式//iv开始执行动画 iv.startAnimation(sa);}//位移动画 public void click4(View v){TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0.2f); ta.setDuration(2000); //设置动画执行的时间 ta.setFillAfter(true);//当动画结束后 动画停留在结束位置  //开始动画 iv.startAnimation(ta);}//动画一起飞public void click5(View v){AnimationSet set = new AnimationSet(false);//透明动画AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);aa.setDuration(2000); //设置动画执行的时间aa.setRepeatCount(1); //设置重复的次数aa.setRepeatMode(Animation.REVERSE);//设置动画执行的模式//旋转动画RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);ra.setDuration(2000); //设置动画执行的时间ra.setRepeatCount(1); //设置重复的次数ra.setRepeatMode(Animation.REVERSE);//设置动画执行的模式//缩放ScaleAnimation sa = new ScaleAnimation(1.0f,2.0f, 1.0f, 2.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);sa.setDuration(2000); //设置动画执行的时间sa.setRepeatCount(1); //设置重复的次数sa.setRepeatMode(Animation.REVERSE);//设置动画执行的模式TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0.2f); ta.setDuration(2000); //设置动画执行的时间 ta.setFillAfter(true);//当动画结束后 动画停留在结束位置 //添加动画set.addAnimation(aa);set.addAnimation(ra);set.addAnimation(sa);set.addAnimation(ta);//最后一步 要记得 执行动画iv.startAnimation(set);}}




10 应用程序的反编译
   apktools 
   dex2jar  jd.exe 就看程序源码
   Android逆向助手 


11 使用xml方式定义补间动画
[1]在res下创建一个目录 anim目录
public class MainActivity extends Activity {private ImageView iv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//执行我们的动画iv = (ImageView) findViewById(R.id.iv);//设置一个点击事件iv.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(getApplicationContext(), "哈哈 你点不到我", 1).show();}});}//点击按钮 实现iv 透明的效果  动画 public void click1(View v) { Animation aa = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha);//iv开始执行动画 iv.startAnimation(aa);}//点击按钮 实现iv 执行一个旋转 动画 public void click2(View v) { Animation ra = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);//iv开始执行动画 iv.startAnimation(ra);}//点击按钮进行一个缩放动画public void click3(View v) { Animation sa= AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale);//iv开始执行动画 iv.startAnimation(sa);}//位移动画 public void click4(View v){Animation ta = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate); //开始动画 iv.startAnimation(ta);}//动画一起飞public void click5(View v){Animation set = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.set);//最后一步 要记得 执行动画iv.startAnimation(set);}}


<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" android:repeatMode="reverse" android:repeatCount="1"></alpha>


<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:repeatCount="1" android:repeatMode="reverse" android:duration="2000"></rotate>
<scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="1.0" android:toXScale="2.0" android:fromYScale="1.0" android:toYScale="2.0" android:pivotX="50%" android:pivotY="50%" android:repeatMode="reverse" android:repeatCount="1" android:duration="2000"></scale>
<set><alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fromAlpha="1.0" android:repeatCount="1" android:repeatMode="reverse" android:toAlpha="0.0"></alpha><rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:repeatCount="1" android:repeatMode="reverse" android:toDegrees="360"></rotate><scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:repeatCount="1" android:repeatMode="reverse" android:toXScale="2.0" android:toYScale="2.0"></scale><translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fillAfter="true" android:fromXDelta="0%p" android:fromYDelta="0%p" android:toXDelta="0%p" android:toYDelta="20%p"></translate></set>

<translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0%p" android:toXDelta="0%p" android:fromYDelta="0%p" android:toYDelta="20%p" android:fillAfter="true" android:duration="2000"></translate>







13 通知栏的介绍
   [1]Toast 
   [2]对话框
package com.example.administrator.myapplication;import android.app.Notification;import android.app.NotificationManager;import android.graphics.BitmapFactory;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;public class MainActivity extends AppCompatActivity {private NotificationManager nm;Notification noti;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);nm= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);}public void click1(View view){//链式调用 高版本的写法Notification noti = new Notification.Builder(this).setContentTitle("我是大标题").setContentText("我是标题的内容").setSmallIcon(R.drawable.ic_launcher).setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)).build();/***noti=new Notification(R.drawable.ic_launcher,"接受到了一条通知",System.currentTimeMillis());noti.defaults=Notification.DEFAULT_ALL;//不能取消通知noti.flags=Notification.FLAG_AUTO_CANCEL;Intent intent=new Intent();intent.setAction(Intent.ACTION_CALL);intent.setData(Uri.parse("tel" + 119));PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),1,intent,Intent.FLAG_ACTIVITY_NEW_TASK);noti.setLatestEventInfo(this, "小芳", "今天晚上7天酒店....", pendingIntent);nm.notify(10, noti);*/}public void onclick2(View v){nm.cancel(10);}}




   [3]通知栏

总结学过的manager 
[1]smsManager 发短信
[2]telephoneManager 电话的管理者
[3]windowManager 窗口的管理者  
[4]fragmenManager fragment的管理者 
[5]NotificationManager 通知的管理者


14 通知栏和服务连用 







0 0