初学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,,暂时没用到。。


 

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"
//距离原来的底部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"//定宽高比