《第一行代码》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
Toast:Android系统提供的一种提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息在一段时间后会自动消失。
用法:
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>


浙公网安备 33010602011771号