初学Android Studio,慢慢摸索,记录一些知识点,免得现在测试的文件删了以后找不到。
--------------------------------------知识点---------------------------------------
1.android studio几大文件关系及作用
activity_main.xml MainActivity.java AndroidManifest.xml
activity(活动),简单理解就是手机的一个页面。
--activity_main.xml 在layout里,主要保存一个activity的样式。
--MainActivity.java是程序运行的主代码区,这里可以引入activity_main.xml中声明的控件button等,也可以通过intent(意图)
向其他activity申请实现活动之间的交互,也就是手机页面的跳转,通过AndroidManifest.xml里面intent-filter过滤器的筛选看是哪个别的activity进行响应处理,也就是跳转到哪个页面。
--AndroidManifest.xml储存本项目的活动及其对应响应处理方式。
2.intent属性component、action、data、category、extras、flags
----component是显式intent的组件,被传递的目标组件,可以在new intent时在构造函数里声明,也可以通过方法setComponentName();setClass();setClassName();
----action表示执行操作的字符串,表明该活动可以响应哪个intent意图,常量ACTION_VIEW展示信息(浏览器),--ACTION_SEND信息分享到其他应用,ACTION_DIAL拨号,ACTION_EDIT编辑;配套常量可以有setData()设置数据引用的uri,setType()设置可处理的mime类型的uri。
Intent intent=new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://baidu.com")); startActivity(intent);
----category是对intent的补充,在隐式intent中与action配套出现,必须同时匹配才能被本activity活动响应。方法addCategory().
<intent-filter>
<action android:name="StartSecondActivity" /> <!-- 标明活动2可以响应哪个action -->
<category android:name="android.intent.category.DEFAULT" /> <!-- 这里必须有 -->
<category android:name="intent2" />
<!-- DEFAULT是startActivity(intent)无定义category时默认调用的,必须有 -->
</intent-filter>
注:隐式intent的category的DEFAULT必须有。
----extras储存额外信息,对应方法putExtra();
//一个activity传输数据:
Intent intent=new Intent("StartSecondActivity"); intent.addCategory("intent2"); intent.putExtra("extra_data","this is a message");//传送额外数据 //另一个activity中数据接收:
Intent intent=getIntent();//也可以判断intent收到的是哪个action来做出不同的处理 if(intent.getAction()=="StartSecondActivity") Log.d("SecondActivity",intent.getStringExtra("extra_data"));
注:如果是别的不带有action或者data的intent被接收端活动响应则会报错No Activity found to handle intent...等。
----flags指示系统如何启动一个Activity,,暂时没用到。。
参考链接:http://blog.csdn.net/xiaohanluo/article/details/52637520
3.startActivityForResult()与setResult()
//Activity1:
Button button_intent_code=(Button)findViewById(R.id.button_intent_code);
button_intent_code.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,3);
//这里用startActivityForResult启动活动2;
//请求码(int)是唯一值即可,便于判断活动1收回的resultCode是基于哪个活动的
//活动1给活动2一个请求码requestCode,活动2销毁后返回给活动1一个resultCode,
}
});
//接上文,因startActivityForResult,活动2销毁后会自动返回活动1,
// 然后重调上一个活动即活动1的onActivityResult()方法,因此此方法需要重写;
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch(requestCode){
case 3:
if(resultCode==RESULT_OK)
Log.d("MainActivity",data.getStringExtra("data_return"));
}
}
//Activity2:
Button button2=(Button)findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intentR=new Intent();//这里的intent仅是为了传输数据
intentR.putExtra("data_return","this is a feedback");
setResult(RESULT_OK,intentR);//setResult()方法专门向上一个活动传输数据,RESULT_OK/RESULT_CANCELED
finish();//销毁本活动
}
});
注:如果一个activity中有多次用到intent,注意不要重名。
4.六大布局简述
(1)RelativeLayout相对布局
android:layout_toRightOf="@id/button1" //移到button1的右边
android:layout_alignBottom="@id/button1"
android:layout_marginBottom="100dp" //距离原来的底部100dp(相当于上移)
//android:visibility="visible"
(2)LinearLayout线性布局
横着排列下去的流式布局
(3)TableLayout表格布局
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tableRow2">
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button3"
android:layout_column="1" /> <!--column是这一行的某一列-->
</TableRow> <!--TableRow创建一行-->
(4)GridLayout网格布局
<GridLayout
android:layout_gravity="center"
android:columnCount="4"
android:orientation="horizontal"> <!--这些就横着一行一行填充,每行4格-->
<Button
android:layout_column="3"
android:text="/" /> <!--定位到第四栏(从0开始0 1 2 3栏)-->
android:layout_rowSpan="3"/> <!-- 填充三列 -->
<Button
android:text="1" />
<Button
android:text="2" />
(5)FrameLayout帧布局
暂时没用到。。。
##AbsoluteLayout绝对布局(划掉,新版本不支持)
android:layout_y="50dp"
android:layout_x="50dp"//绝对位置
(6)ConstraintLayout约束布局
layout_constraintTop_toTopOf // 将所需视图的顶部与另一个视图的顶部对齐。
layout_constraintTop_toBottomOf // 将所需视图的顶部与另一个视图的底部对齐。
app:layout_constraintDimensionRatio="4:3"//定宽高比
参考链接:https://blog.csdn.net/huanhuan59/article/details/80081159