我们之前使用as,主要是使用了activity_main.xml和MainActivity.java。现在我们对这个自动生成的主界面进行模仿。
而我们如果要自己绘制新的界面,需要满足下面几个条件:
首先新建一个xml布局文件,然后如下图,要特别注意:xml文件的名字必须 全部小写 ,大写字母会提示找不到。
<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=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World2!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
androidx.constraintlayout.widget.ConstraintLayout>
然后我们就可以在主布局文件中添加这个界面。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MyActivity"
android:label="MyActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<activity android:name=".MainActivity">
activity>
application>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
其中这两句表示运行时默认调用该界面。
同样的,我们在java文件中这样调用:
package com.example.test_activity;
import android.app.Activity;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myactivity);
}
}
直接在java文件上右键
然后选择我们需要的界面,直接生成。
如果要实现从系统默认的界面跳转到上述我们生成的界面,我们需要设置响应事件:
public void test(View view){
Intent intent = new Intent();
intent.setClass(this,MyActivity.class);
this.startActivity(intent);
}
setclass方法表示了我们申请从当前的界面,跳转到下一个界面。
而且,当我点击模拟器上的返回键时,界面会回到刚才的界面。
跳转的过程中,我们也可以利用Intent对象来传递一些参数。
public void test(View view){
EditText editText =findViewById(R.id.editText);
String uname =editText.getText().toString();
Intent intent = new Intent();
intent.setClass(this,MyActivity.class);
intent.putExtra("uname",uname);
this.startActivity(intent);
}
这段代码就利用了intent传递了文本框中输入的内容
而在接收界面,我们可以这样写
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myactivity);
Intent intent=this.getIntent();
String uname=intent.getStringExtra("uname");
TextView textView =findViewById(R.id.textView2);
textView.setText(uname);
}
然后就能实现在第一个页面输入的内容,显示在第二个界面上。
我们还可以在同样的界面上实现内容的切换,而不交换界面,但是我们不能通过返回键返回。(其实是页面的重绘)
this.setContentView(R.layout.myactivity);
在点击之后的响应方法中写上述代码,即可实现点击切换。
我们通过这个可以实现类似于“点击按钮跳转到一个页面,选择数据,然后再返回”这样的交互功能。
代码如下:
package com.example.test_activity;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void test(View view){
// EditText editText =findViewById(R.id.editText);
// String uname =editText.getText().toString();
Intent intent = new Intent();
intent.setClass(this,MyActivity.class);
// intent.putExtra("uname",uname);
// this.startActivity(intent);
//也可以传入附带标记位的intent
this.startActivityForResult(intent,1);
// this.setContentView(R.layout.myactivity);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
String value=data.getStringExtra("msg");
EditText editText =findViewById(R.id.editText);
editText.setText(value);
}
}
主函数如上,跳转界面如下
package com.example.test_activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myactivity);
// Intent intent=this.getIntent();
// String uname=intent.getStringExtra("uname");
// TextView textView =findViewById(R.id.textView2);
// textView.setText(uname);
}
public void test2(View view){
//获取到文本框中写的内容,
EditText editText =findViewById(R.id.editText2);
String msg =editText.getText().toString();
Intent intent =getIntent();
intent.putExtra("msg",msg);
this.setResult(3,intent);//第一个也是标记位,在这里随便写
this.finish();
}
}
我们就可以实现在跳转界面输入文字,然后点击返回,回到第一个页面,第二个页面输入的文字出现在第一个界面中。
完结撒花!!!
参考自:尚学堂课