我们通过按钮来实现窗口跳转
首先创建我们的主文件main.java
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ly_view);
}
设置布局文件
res\layout\ly_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
清单文件的注册
<activity android:name=".AMain" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
显式跳转
在布局文件中设置一个按钮
<Button
android:id="@+id/btn_explicit"
android:layout_width="400px"
android:layout_height="200px"
android:text="显式跳转"
/>
新建显式跳转目的页面explicit_check.java
public class explicit_check extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ly_explicit_check);
}
}
绑定布局文件(通过文本框提示显式跳转成功)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="显式跳转成功!!"/>
</LinearLayout>
清单文件中注册
<activity android:name=".explicit_check" android:exported="true">
在主页面文件中获取按钮,并设置其点击事件
findViewById(R.id.btn_explicit).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(AMain.this,explicit_check.class));
}
});
因为我们知道跳转的初始页面和目的页面,所以这种方式称为显式跳转
显式跳转Intent方法的源码:
public Intent(Context packageContext, Class<?> cls) {
throw new RuntimeException("Stub!");
}
隐式跳转?
同样设置在主页面中设置按钮来实现
<Button
android:id="@+id/btn_implicit"
android:layout_width="400px"
android:layout_height="200px"
android:text="隐式跳转"
/>
新建隐式跳转目的页面implicit_check.java(同上)
由于我们不希望主页面知道我们的目的页面,所以我们设置一个Uri路径
这样,其他组件就可以通过该路径来访问本组件
清单文件:
<activity android:name=".implicit_check" android:exported="true">
<intent-filter>
<action android:name="Implicit_Action"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="mosang"
android:host="implicit.check"/>
</intent-filter>
data标签中的值,可以任意设置,只要在跳转时与路径匹配即可
设置按钮事件
findViewById(R.id.btn_implicit).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent("Implicit_Action", Uri.parse("mosang://implicit.check")));
}
//URI protocol:\\host:port\subpath?param=value
});
Intent对象需要两个参数:
1. action字符串,即我们在清单文件中自定义的action标签
2.Uri路径:
- protocol:与data标签中设置的scheme值匹配
- host:与data标签中设置的host值匹配
隐式跳转方法的源码:
public Intent(String action, Uri uri) {
throw new RuntimeException("Stub!");
}
预定义Action
?效果:通过点击按钮来打开系统的通话页面,并把用户输入的号码复制过去
按钮实现:
<!--获取用户输入数据-->
<EditText
android:id="@+id/phone_text"
android:layout_width="match_parent"
android:layout_height="200px"
android:inputType="phone"
android:maxLength="11"
android:hint="请输入手机号码"
/>
<Button
android:id="@+id/btn_action"
android:layout_width="400px"
android:layout_height="200px"
android:text="预定义action"
/>
实现按钮功能:
//通过findViewById函数获取EditText对象,将其强转为EditText对象即可获取其值
EditText text1=(EditText)findViewById(R.id.phone_text);
findViewById(R.id.btn_action).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"+text1.getText().toString())));
//通过text1.getText().toString()拿到内容字符串
}
});
|