《第一行代码》chapter 2-(Activity,Toast,Menu,Intent)

1. Activity

定义:一种包含用户界面的组件。

功能:主要用于和用户进行交互。

用法:

① acticity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.why.work011802.MainActivity">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
tools:layout_editor_absoluteX="141dp"
tools:layout_editor_absoluteY="144dp" />

</android.support.constraint.ConstraintLayout>

代码中以添加Button控件为例进行讲解:

android:id="@+id/button"

//给当前元素定义一个唯一的标识符。

android:id="@+id/id_name ,则表示在XML中定义一个id。

android:id="@id/id_name ,则表示在XML中引用id资源。

android:layout_width="wrap_content"

//指定当前元素的宽度。

wrap_content:当前元素的宽度刚好包含里面的内容。

match_content:当前元素的宽度和父元素一样宽。

android:layout_height="wrap_content"

//指定当前元素的高度。

android:text="Button"

//制定了元素中显示的文字内容

写完布局文件后,回到MainActivity.java

public class MainActivity extends Activity {

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

在该文件中调用setContentView()方法给当前的活动加载一个布局,并在该方法中传入一个布局文件的id。

2. 在Activity中使用Toast

ToastAndroid系统提供的一种提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息在一段时间后会自动消失。

用法:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);//获取布局文件中定义的元素
button.setOnClickListener(new View.OnClickListener(){//为Button注册一个监听器
@Override
public void onClick(View v){
Toast.makeText(MainActivity.this, "You Clicked Button 1" ,Toast.LENGTH_SHORT).show();//通过makeText()创建出一个Toast对象,然后调用show()将Toast()显示出来
}
});
}
}

 

 

 3.在Acitivity中使用Menu

新建main.xml

右击res目录 --> New --> Directory ,新建menu文件夹

右击menu文件夹 --> New -->Menu resourse file, 新建main.xml

在 main.xml 中添加以下代码

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add_item"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
</menu>

通过<item>标签创建具体的某一个菜单项。

在MainActivity中重写onCreateOptionsMenu() 和 onOptionsItemSelected()方法

重写快捷键:ctrl + O

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);//通过getMenuInflater()方法得到MenuInflater对象,再调用 inflate()方法创建当前活动的菜单。
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {//定义菜单响应事件
switch (item.getItemId()) {//判断点击的是哪一个菜单项
case R.id.add_item:
Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}

 

 

 

 

 

 

 

 

 

 

 

 4.销毁Activity

按一下back键

在Activity中调用finish()方法

示例:修改之前Button中的代码

button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
finish();
//Toast.makeText(MainActivity.this, "You Clicked Button 1" ,Toast.LENGTH_SHORT).show();
}
});

 

 

 点击DESTROY后Activity销毁,回到主界面。

 

 

 

5.Intent

功能:实现Android程序中各组件之间的交互,一般可用于启动Activity、service,发送broadcast等。

显式Intent。

构造函数:Intent ( Context packageContext, Class<?>cls )

Context :要求提供一个启动活动的上下文。

Class指定想要启动的目标活动。

startActivity()方法:专门用于启动活动。

MainActivity中修改Button的点击事件:

button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent(MainActivity.this ,Main2Activity.class);
startActivity(intent);
}
});

首先构建一个Intent,传入FirstActivity.this作为上下文,传入Main2Activity.class作为目标活动,此时我们的”意图“就是,在MainActivity中打开Main2Activity。然后通过startActivity()方法来执行这个Intent。

点击BUTTON 1 后,跳转到放置了BUTTON 2 的第二个Activity。

 

 

 

隐式Intent。

1). 通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够相应的action和category,打开AndroidManifest.xml,添加如下代码:

<activity android:name=".Main2Activity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START"/>//当前活动可以响应com.example.activitytest.ACTION_START这个action。
<category android:name="android.intent.category.DEFAULT"/>//指明当前活动能够响应的Intent还可能带有的category。
</intent-filter>
</activity>

2). 修改MainActivity中Button的点击事件。

button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
}
});

隐式Intent的更多用法。

1.启动自己程序内的活动;

2.启动其他程序的活动;

第一种

修改MainActivity中按钮的点击事件。

button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});

 

 

 点击BAIDU后,自动调用系统的浏览器打开www.baidu.com页面。

 

 

 第二种

在<intent-filter>标签中配置一个<data>标签,用于更精确地指定当前活动能够响应什么类型的数据。

👉android:scheme。用于指定数据的协议部分,如上例中的http部分。

👉android:host。用于指定数据的主机名部分,如上例中的www.baidu.com部分。

👉android:port。用于指定数据的端口部分,一般紧随主机名之后。

👉android:path。用于指定主机名和端口部分之后的部分,如一段网址中跟在域名之后的内容。

👉android:mimeType。用于指定可以处理的数据类型,允许使用通配符的方式进行指定。

新建一个EmptyActivity,在layout布局文件中添加一个Button控件。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main3Activity">

<Button
android:id="@+id/button_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Button 3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

在AndroidManifest中修改新建Activity的注册信息。

<activity android:name=".Main3Activity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />//当前Acitivity响应的action
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />//指定数据的协议必须是http协议
</intent-filter>
</activity>

 

posted @ 2020-04-10 10:33  Whyer*  阅读(207)  评论(0)    收藏  举报