四种基本布局(二)、Activity的操作

四种基本布局

下面接着上一篇博客,写下另外两种布局

FrameLayout

FrameLayout又称帧布局,这种布局没有任何的定位方式,所有的控件都会摆在布局的左上角。以后在学习碎片的时候,会用到这种布局

TableLayout

TableLayout又称表格布局,允许我们使用表格的方式来排列控件。在设计这种布局时,我们尽量应该让每一行有相同的列数,如果表格的某一行一定要有不相等的列数时,就要用android:layout_span属性来合并单元格使之对齐。
注意
1. 在TableLayout中每加入一个 TableRow就表示添加了一行,然后在 TableRow中每加入一个控件,就表示在该行中添加了一列,TableRow中的控件是不能指定宽度的
2. android:stretchColumns表示指定某一列填补该行中剩余的空白
3. android:collapseColumns表示隐藏某一列
4. android:shrinkColumns表示收缩某一列
5. 在一个控件中写入 android:layout_span=”2” 表示让该控件占据两列的空间。

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="1">
    <TableRow>
        <TextView  android:layout_height="wrap_content" android:text="账号:" />
        <EditText  android:layout_height="wrap_content" android:hint="请输入您的账号"/>
    </TableRow>
    <TableRow>
        <TextView  android:layout_height="wrap_content" android:text="密码:"/>
        <EditText  android:layout_height="wrap_content" android:inputType="textPassword" />
    </TableRow>
    <TableRow>
        <Button  android:layout_height="wrap_content" android:text="登录" android:layout_span="2"/>
    </TableRow>
</TableLayout>

运行效果:

Activity操作

界面的操作

  1. 隐藏标题栏,全屏
    第一种方法:写在manifest.xml中
<Application  android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
</Application>

第二种方法:写在所在Activity的java类中

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN)

且这两句必须写在setContentView()的前边。
2. 横屏,竖屏
在manifest.xml中写

<Activity  android:screenOrentation="landspace" android:screenOrentation="portrait">
</Activity>

使用Intent启动Activity

使用显式Intent

在FirstActivity中的按钮写一个点击事件,通过显式Intent启动SecondActivity。

button_start.setOnClickListener(new OnClickListener() {     
            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);
            }
});

使用隐式Intent

  1. 在Androidmanifest.xml中注册SecondActivity时,添加代码:
<activity android:name="com.example.intenttest.SecondActivity" >
    <intent-filter>
        <action android:name="com.example.intenttest.start" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

①通过在activity标签下配置intent-filter的内容,可以指定当前活动能够相应的action和category。
②只有action和category的内容同时匹配Intent中指定的action和category时,这个活动才能够响应该Intent。
③”android.intent.category.DEFAULT”是一种默认的category ,在调用startActivity()方法的时候会自动将这个category 添加到Intent中。
2. 修改FirstActivity中按钮的点击事件

button_start.setOnClickListener(new OnClickListener() {     
            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent("com.example.intenttest.start");
                startActivity(intent);
            }
});

注意:每个Intent中只能指定一个action,但是能指定多个category。可以调用Intent中的addCategory()方法来添加一个category,当然你也必须在intent-filter标签中添加上该category的声明

隐式Intent的更多用法

打电话

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

直接打电话

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
/*这种方式需要在Androidmanifest.xml中声明调用打电话的权限 <uses-permission android:name="android.permission.CALL_PHONE" />*/

发短信

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:10086"));
//sms_body表示标签,The SMS Text为发送的短信内容。
intent.putExtra("sms_body", "The SMS Text");
startActivity(intent);

打开网页

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
startActivity(intent);

向下一个活动传递数据

在启动活动时传递数据,Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动另一个Activity后,只需要把这些数据从Intent中取出即可。
比如在第一个活动中,要向下一个活动传递一个字符串:

button_start.setOnClickListener(new OnClickListener() {     
            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent("com.example.intenttest.start");
                intent.putExtra("data", "你好,第二个界面");
                startActivity(intent);
            }
});

然后在SecondActivity中把数据取出,显示在TextView中

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.secondactivity_layout);
        TextView textView = (TextView) findViewById(R.id.textview);
        Intent intent =getIntent();
        textView.setText(intent.getStringExtra("data"));
    }
}

运行结果:
这里写图片描述

返回数据给上一个活动

Activity中有一个startActivityForResult()方法也是用于启动活动,但是这个方法会在活动销毁时返回一个结果给上一个活动。
①这里点击MainActivity中的按钮,启动SecondActivity

button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(intent, 1);
            }
});

②在SecondActivity中添加一个EditEditText,向里边输入内容,然后点击按钮,返回输入的内容。其中setResult()方法专门用于向上一个活动返回数据。这个方法传入的第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK和RESULT_CANCELED这两个值,第二个参数则是把带有数据的Intent传递回去。最后调用finish()方法来销毁这个活动。

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class SecondActivity extends Activity{
    private Button button;
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        button = (Button) findViewById(R.id.button);
        editText=(EditText) findViewById(R.id.edittext);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent();
                intent.putExtra("返回值", editText.getText().toString());
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }
}

如果SecondActivity 不是通过点击按钮返回,然后按下Back键回到MainActivity,这样我们可以通过重写

@Override
public void onBackPressed(){
    Intent intent = new Intent();
    intent.putExtra("返回值", editText.getText().toString());
    setResult(RESULT_OK, intent);
    finish();
}

③在MainActivity中重写onActivityResult()方法得到返回的数据,并把它写入TextView中。
onActivityResult()方法带有三个参数,第一个参数requestCode,即我们在启动活动时传入的请求码,第二个参数resultCode,即我们在返回数据时传入的处理结果,第三个参数data,即携带着返回数据的Intent。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==1){
        if(resultCode==RESULT_OK){
            textView.setText(data.getStringExtra("返回值"));
        }
    }
}

运行结果:

四种基本布局(二)、Activity的操作_第1张图片

你可能感兴趣的:(intent,布局)