《第一行代码》阅读笔记

《第一行代码》阅读笔记,第1张

《第一行代码》阅读笔记

2021年的倒数第二天,公司的员工基本都回家了,手上也没啥工作了, 之前接过IOS和android SDK , 都是照着文档复制粘贴, 现在有空,了解一下安卓知识, 《第一行代码》这本书虽然有些老旧,但是作者写的还是很仔细的,安卓的知识点对比Unity和UE4中的概念,理解起来还是比较容易的,感谢作者!

//============================AndroidManifest===========================

     //主活动

android:theme="@android:style/Theme.Dialog">    //对话框式活动
android:lanchMode="singleTop"       //活动启动模式 


//===================================Activity================================= 
	活动是可以叠层的,新活动覆盖在就活动上面,Back键会销毁最上面的活动,这不就是栈的概念么
	
	Android使用Task管理活动,一个Task就是一组存放在栈中的活动集合
	
	//活动的4种状态  
	 运行状态(栈顶)  暂停状态(非栈顶,但可见)  停止状态(非栈顶,不可见) 销毁状态
	
	//活动的7个生命周期
	onCreate()   //初始化 *** 作
	onStart()    //不可见变为可见时调用, 相当于 onVisible()  //加载资源
	onResume()   // onTop()  //栈顶
	//------------------------------------
	onPause()    // onNotTop() //退出栈顶
	onStop()     // 相当于 onInvisible(), 对话框式活动,OnStop不执行  //释放资源
	onDestroy() 
	//---------
	onRestart()   // 相当于onEnable() 
    //---------
    
    //活动被销毁,如何保存临时数据:
     onSaveInstanceState(Bundle outState)   //保存临时数据,在销毁活动之前一定会被调用
    // 在OnCreate方法种恢复数据
    // Bundle也可以和Intent结合使用,把Bundle嵌入Intent中

    活动的4种启动模式: standard, singleTop, singleTask, singleInstance
    standard 模式, 每启动一个活动,它就会在返回栈种入栈, 问题是,有时候活动已经在栈顶,再次启动活动还会创建新的实例
    singleTop: 启动活动时,如果发现返回栈栈顶已经是该活动,则直接使用; 如果该活动不在栈顶,则会实例化一个
    singleTask: 从栈顶逐一出栈,直到发现该活动的实例, 保证了整个应该程序只有一个该活动
    singleInstance:用单独的一个返回栈来管理该活动, 方便给其他程序调用

   ----------------------------------------------------------------------------
   //1. 如何实时知道当前是哪一个活动
   创建一个普通的Java类,改变活动的继承关系
   public class baseActivity extends AppCompatActivity{
   	@Override
   	protected void onCreate(Bundle savedInstanceState){
   		super.onCreate(savedInstanceState);
   		Log.d("baseActivity",getClass().getSimpleName());
   	}
   }
   --------------------------------------------------------------------------
   //2. 随时随地退出程序
   使用一个集合类对所用活动进行管理,调用 ActivityCollector.finishAll() 即可
   public class ActivityCollector{
	   	public static List activities=new ArrayList<>();
	   	public static void AddActivity(Activity act){
	   		activities.Add(act);
	   	}
	   	public static void RemoveActivity(Activity act){
	   		activities.remove(act);
	   	}

	   	public static void finishAll(){
	   		for(Activity item:activities){
	   			if(!item.isFinishing()){
	   				item.finish();
	   			}
	   		}
	   		//销毁完活动杀掉当前进城,保存程序完全退出
	   		//android.os.Process.killProcess(android.os.Process.myPid());
	   	}
   }


	 public class baseActivity extends AppCompatActivity{
		   	@Override
		   	protected void onCreate(Bundle savedInstanceState){
		   		super.onCreate(savedInstanceState);
		   		Log.d("baseActivity",getClass().getSimpleName());
		   		ActivityCollector.AddActivity(this);
		   	}

			@Override
		   	protected void onDestroy(){
		   		super.onDestroy(); 		
		   		ActivityCollector.RemoveActivity(this);
		   	}

	   }

--------------------------------------------------------
	//3. 启动活动的最佳写法
	//在SecondActivity种实现该函数
	public static void actionStart(Content content,String data1,String data2){
		Intent intent=new Intent(content,SecondActivity.class);  //从 参数A活动,跳转到参数B活动
		intent.putExtra("Param1",data1);
		intent.putExtra("param2",data2);
		content.startActivity(intent);
	}

    //调用 从 Fisrt 到 Second
    SecondActivity.actionStart(FirstActivity.this,"data1","data2");


------------------------------------------------------
	finish()  //销毁当前活动
	startActivity()
	startActivityForResult()  //能够返回结构给上一个活动
	setContentView(R.layout.activity_main);
	findViewById()



//========================================Intent=====================================
//Intent 拨打电话
     Intent intent=new Intent(Intent.ACTION.DIAL);
     intent.setData(Uri.parse("tel:10086"));
     startActivity(intent);

//Intent 打开百度
     Intent intent=new Intent(Intent.ACTION_VIEW);
     intent.setData(Uri.parse("http://www.baidu.com"));
     startActivity(intent);

//Intent 传递数据
     String data="Hello";
     Intent intent=new Intent(FirstActivity.this, SecondActivity.class);
     intent.putExtra("extra",data);
     startActivity(intent);


//Intent 取出数据
     Intent intent=getIntent();
     String data=intent.getStringExtra("extra");
     Log.d("SecondActivity",data);


//Intent  获取SecondActivity的结果
  	//FirstActivity
	 Intent intent=new intent(FirstActivity.this,SecondActivity.class);
	 startActivityForResult(intent,1);    //第一个参数为Intent, 第二个参数为请求码


//FirstActivity重写 onActivityResult()处理结果
	Switch(requestCode){
		case 1:
			if(requestCode==RESULT_OK){
				String returnedData=data.getStringExtra("data_return");
				Log.d("FirstActivity",returnedData);
			}
	}


//Intent  SecondActivity中传递结果
	Intent intent=new intent();
	intent.putExtra("data_return","Hell FirstActivity");
	setResult(RESULT_OK,intent);   //第一个参数返回处理结果,第二个参数传递intent, intent中带有数据
	finish();
//如果用户不是通过点击按钮回到FirstActivity,而是按下Back键呢?
	把上面点击事件的代码,重写到 onBackPressed() 


//===================================UI================================= 
 //--------------------------常用控件------------------
  android:visibility  // 安卓控件的可见性,适用于所有控件
  visible 可见  invisible 不可见,占地方  gone 不可见不占地
  setVisibility()

 //TextView
   android:gravity="center"  //居中对其, 可选值 top, bottom, left,right,center, 可以用 | 分割
   android:textSize="24sp"
   android::textColor="#00ff00" 
 
 //Button
   android:textALlCaps="false"    //禁用大写特性
   //使用匿名函数添加点击事件
   btn.setOnClickListener(new View.OnClickListener(){
   	 @Override
   	 public void onClick(View v){
   	 	// Todo
   	 }
   })
   //也可以使用实现接口的方式
    btn.setOnClickListener(this);
    @Override
   	 public void onClick(View v){
   	 	switch(v.getId()){
   	 		case R.id.button:
   	 			// 补充逻辑   	 					
   	 		break;
   	 		//...
   	 	}
   	 }

//EditText
     android:hint="提示性文字"   //可输入文本的提醒
     android:maxLines="2"       //文本的最大行数	
   	 editText=(EditText)findViewById(R.id.edit_Text);
	 String input=editText.getText().toString(); //获取输入文本值

//ImageView
	 android:src="@drawable/img_1"  //图片路径
	 imgView=(ImageView)findViewById(R.id.img_view);
	 imgView.setImageResource(R.drawable.img_2);   //使用脚本修改图片路径

// ProgressBar
	style="?android:attr/progressBarStyleHoorizontal"  //样式
	android:max="100"    //进度条最大值
    
    int value=ProgressBar.getProgress();
    value+=10;
    ProgressBar.setProgress(value);

//alertDialag
    alertDialag.Builder dialog=new alertDialag.Builder(MainActivity.this);
    dialog.setTitle("title");
    dialog.setMessage("some message");
    dialog.setCancelable(false);
    dialog.setPositiveButton("Ok",new DialogInterface.OnClickListener(){
    	@Override
    	public void onClick(DialogInterface dialog,int which){

    	}
    });

	 dialog.setNegativeButton("Cancel",new DialogInterface.OnClickListener(){
    	@Override
    	public void onClick(DialogInterface dialog,int which){

    	}
    });

	dialog.show();

//ProgressDialog 
	ProgressDialog dialog=new ProgressDialog(MainActivity.this);
    dialog.setTitle("title");
    dialog.setMessage("some message");
    dialog.setCancelable(false); 
	dialog.show();
	//数据加载完成后必须调用dismiss关闭,否则会一直存在
    dialog.dismiss(); 


// 4种 布局  ------------------------------
//1. LinearLayout
android:orientation="horizontal"  //Vertical
android:layout_gravity="top"      //布局对齐方式
android:layout_weight="1"         //权重控制大小

//2. RelativeLayout  相对布局  和 Unity的锚点布局比较类似
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottow="true"
android:layout_centerInParent="true"

android:layout_above="@id/btn3"
android:layout_below="@id/btn3"
android:layout_toLeftOf="@id/btn3"
android:layout_toRightOf="@id/btn3"

android:layout_alignLeft="@id/btn3"
android:layout_alignRight="@id/btn3"
android:layout_alignTop="@id/btn3"
android:layout_alignBottom="@id/btn3"

//3. frameLayout 比较少用
// 默认定位到布局的左上角

//4. 百分比布局,
//包括 PercentframeLayout, PercentRelativeLayout
//在app/build.gradle添加百分比布局依赖
compile 'com.android.support:percent:24.2.1'

app:layout_widthPercent="50%"
app:layout_heightPercent="50%"

//使用 android 和 app,必须引入命名空间
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"

//-----------------------自定义控件----------------









//-----------------------------------------------------------------------
//Toast
Toast.makeText(TestActivity.this,"I Click Btn",Toast.LENGTH_LONG).show();
//Menu
public boolean onCreateOptionsMenu(Menu menu)
public boolean onOptionsItemSelected(@NonNull MenuItem item)











欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5717350.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存