android学习(2)

7. Activity之间的信息传递

  1. 使⽤ Intent 在 Activity 之间传递数据;

  2. 使⽤显式 Intent 启动 Activity ;

要将 MainActivity 中 EditText ⽤户输⼊的消息传递给 MessageActivity ,我们需要在 Send Message 按钮点击事件侦听器中使⽤ Intent 启 动 MessageActivity 活动。

启动 Activity 可以使⽤ startActivity ⽅法,该⽅法接受⼀个 Intent(意图)参数。其 Intent 可以为 隐式 Intent 及显式 Intent,在本例中使⽤显式Intent ⽅式启动 MessageActivity ,如代码2.5。为了将 EditText 中⽤户输⼊的消息传递给 MessageActivity ,我们使⽤ Intent 对象中的putExtra()⽅法,该⽅法接收 key-value(键值对)形式的参数。

要在 MessageActivity 中取出启动该 Activity 时传⼊的 Message 值,需要getIntent()⽅法,该⽅法取得启动 Activity 的 Intent 对象,再使⽤ Intent 对象的getStringExtra()⽅法取得传⼊的 Message 值,如代码2.6所⽰。

mainActivity.java

public class MainActivity extends AppCompatActivity {


    public static final String MESSAGE_STRING =  "com.example.code04.MESSAGE";//有点不懂是什么意思
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        final EditText etmessage = findViewById(R.id.message);
        Button sendButton = findViewById(R.id.send_message);
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String message = etmessage.getText().toString();
                Intent intent = new Intent(MainActivity.this,MessageActivity.class);
                intent.putExtra(MESSAGE_STRING,message);
                startActivity(intent);
            }
        });

    }
}

messageActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_message);

    TextView tvmessage = findViewById(R.id.tvmessage);
    Intent intent = getIntent();
    String meaasge = intent.getStringExtra(MainActivity.MESSAGE_STRING);
    if(meaasge!=null){
        if(tvmessage!=null){
            tvmessage.setText(meaasge);
        }
    }
}

8. intent.putExtra()方法参数详解(显式表示)

putExtra("A",B)中,AB为键值对,第一个[参数]为键名,第二个参数为键对应的值。顺便提一下,如果想取出[Intent]对象中的这些值,需要在你的另一个Activity中用getXXXXXExtra[方法],注意需要使用对应类型的方法,参数为键名

例子:

bt.setOnClickListener(new OnClickListener() {
             
            @Override
            public void onClick(View v) {
                /*取得输入框中的内容*/
              String et1Str = et1.getText().toString();
              String et2Str = et2.getText().toString();
              //创建Intent对象,参数分别为上下文,要跳转的Activity类
              Intent intent = ``new` `Intent(MyIntent.``this``, SecondActivity.``class``);
              //将要传递的值附加到Intent对象
              intent.putExtra(``"et1"``, et1Str);
              intent.putExtra(``"et2"``, et2Str);
              //启动该Intent对象,实现跳转
             startActivity(intent);
          `}
        });
tv = (TextView) findViewById(R.id.tv);
         
        //取得启动该Activity的Intent对象
        Intent intent =getIntent();
        /*取出Intent中附加的数据*/
        String first = intent.getStringExtra(``"et1"``);
        String second = intent.getStringExtra(``"et2"``);
         
        //计算得到结果
        int` `result = Integer.parseInt(first) + Integer.parseInt(second);
         
        //设置TextView显示的文本
        tv.setText(``"计算结果为:"``+String.valueOf(result));

9. 标签之间结束描述标志/

第一中形式,以</activity>为结束标志

<activity
    android:name=".MessageActivity"
    android:exported="false" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>

第二种,直接结束

<activity
    android:name=".MessageActivity"
    android:exported="false" />

10. AndroidManiFest.xml是什么

在这里插入图片描述

##/11. 显式Intent与隐式Intent的使用与差别

  1. 区别

    1. 显示Intent指通过Intent启动指定的应用组件,通常是应用显示意图指通过意图启动指定的应用组件,通常是应用 内部的Activity 或Service。要创建显示Intent, 需要在Intent内部的Activity或Service 26。要创建显示意图,需要在意图对象中指定所需启动的组件名即可(其他Intent 属性都是可选)。对象中指定所需启动的组件名即可(其他意图属性都是可选)。

    2. 隐式Intent通过指定action的方式调用安装在本机的其他应用组件。当应用本身无法实现某一action 时,通过隐 式Intent可以很好的扩展应用的功能。

      如果系统无法找到其他应用组件或由于权限限制的原因无法 响应处理你的Intent, startActivity ()调用失败,从而造成应用崩 溃。可以通过如下形式解决该问题:

  2. 使用

    显式

    (1)MainActivity中

    String message = etmessage.getText().toString();
                  Intent intent = new Intent(MainActivity.this,MessageActivity.class);
                  intent.putExtra(MESSAGE_STRING,message);
                  startActivity(intent);
    

​ (2)另一个activity中

TextView tvmessage = findViewById(R.id.tvmessage);
Intent intent = getIntent();
String meaasge = intent.getStringExtra(MainActivity.MESSAGE_STRING);
if(meaasge!=null){
    if(tvmessage!=null){
        tvmessage.setText(meaasge);
    }
}

隐式

​ (1)在MainActivity中

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT,message);
sendIntent.setType("text/plain");

if(sendIntent.resolveActivity(getPackageManager())!=null){
    startActivity(sendIntent);
}

​ (2)在androidManifest.xml中添加

<activity
    android:name=".MessageActivity"
    android:exported="false" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

​ (3)另一个Activity中跟显式一样

12. 图片在父容器(线性布局)中居中设置

通过设置 ImageView 的 **android:layout_centerInParent** 属性可以 ImageView 在其⽗容器中居中。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">
    <ImageView
        android:layout_width="108dp"
        android:layout_height="108dp"
        android:src="@mipmap/ic_logo"//图片源
        android:layout_marginTop="48dp"
        android:layout_centerInParent="true"
        />

</RelativeLayout>

显示如下:

在这里插入图片描述

13. Image Asset、Image Asset的用法

1)Image Asset 导⼊应⽤启动图标

2)Vector Asset 添加图标资源

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值