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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)