赞
踩
修改APP的图标在AndroidManifest.xml文件里。
修改图标处在icon android:icon="@mipmap/ic_launcher"
用户可以把自己要设定的图标加入到左侧文件栏中的mipmap中,hdpi,mdpi,xhdpi,xxhdpi,xxxhdpi分别代表不同分辨率的图标,用户可以把图标做成不同分辨率格式加入到文件夹中。方便适应不同手机的分辨率。图片最好为png格式,jpg格式可能会导致出错。
label 即APP名字, 可以直接在双引号中输入,也可以在values->strings中声明,然后再引用。
版本号在app目录下的build.gradle中修改,里面的versionName 即版本号,如下:
AndroidManifest.xml 和 build.gradle文件中的代码谨慎修改,修改时建议标记,不然可能出现意想不到的bug,却找不到错在哪。
APP启动页面,在显示1秒钟之后自动跳转到APP首页。
首先按照第一章中说的新建一个Java Class文件,起名为SplashActivity.java文件,并关联一个布局文件activity_splash.xml。 布局文件可以按照自己的需要修改。注意在AndroidManifest.xml文件中添加如下代码:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.firstproject"> <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" tools:ignore="GoogleAppIndexingWarning"> <activity android:name=".MainActivity"> </activity> <activity android:name=".FirstActivity"> </activity> <activity android:name=".SplasgActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
添加的代码是:
<activity android:name=".SplasgActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
**intent-filter是将界面设置为最先打开。**即点击APP桌面图标后首先进入的界面。只能有一个。
以下设置APP启动页面启动1秒后跳转的APP首页。代码如下:
package com.example.firstproject; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import androidx.annotation.Nullable; public class SplasgActivity extends Activity { Handler mHandler = new Handler(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); mHandler.postDelayed(new Runnable() { @Override public void run() { Intent intent =new Intent(SplasgActivity.this,MainActivity.class); startActivity(intent); } },1000); } }
这里handler中的postDelayerd主要用来实现1秒后页面自动跳转。 run()里面也需要Intent意图。和Button点击跳转事件一样。
1000表示1秒,类似可以设置其他事件。
首先创建一个Java project 项目,在activity_main.xml布局文件中加入几个button和TextView,并设定相应的id。
在MainActivity.java文件中输入以下代码:
package com.example.firstproject; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(MainActivity.this,"啊,我被击中了",Toast.LENGTH_LONG).show(); } }); } }
核心代码:
findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"啊,我被击中了",Toast.LENGTH_LONG).show();
}
});
findViewById 即通过id找到这个View控件,然后设置点击响应事件。Toast即弹出一个短暂的消息,消息提示我被点击了。
在activity_splash.xml布局文件中加入一个Button, 并且设置id为splash_button.如图:
在SplashActivity.java文件中加入如下代码:
package com.example.firstproject; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; public class SplasgActivity extends Activity { private Button mEnterButton; private View.OnClickListener mOnClickListener= new View.OnClickListener(){ @Override public void onClick(View v) { switch (v.getId()){ case R.id.splah_button: Intent intent =new Intent(SplasgActivity.this,MainActivity.class); startActivity(intent); break; } } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); mEnterButton=findViewById(R.id.splah_button); mEnterButton.setOnClickListener(mOnClickListener); } }
另一种设置点击事件的方式。上面的代码实现了从SplashActivity跳转到MainActivity,下面代码实现从MainAcitivity跳转到SplashActivity。代码如下:
package com.example.firstproject; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent=new Intent(MainActivity.this,FirstActivity.class); startActivity(intent); } }); } }
实现button的点击事件,比较推荐第一种方法,适合button比较多的情况。
这里实现从MainActivity.java 获取一个数值,在点击button跳转时将数值传给FirstAcitivity.java。
在MainActivity中的传值代码为(这段代码写在onCreate中):
TextView textView=findViewById(R.id.button_first);
final String title=textView.getText().toString();
findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,FirstActivity.class);
intent.putExtra("title",title);
startActivity(intent);
}
});
首先需要用findViewById找到需要获取的View控件的id。再用getText获取控件中的内容,再转换成String。在Intent中用putExtra将内容传送。
在FirstActivity中获取数值的代码如下:
public class FirstActivity extends AppCompatActivity {
TextView text;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Intent intent=getIntent();
text=(TextView) findViewById(R.id.edt_test);
text.setText(intent.getStringExtra("data"));
}
}
获取意图,再找到用来展示内容的控件id,最后设置text。
这里以UserInfo为例。
新建一个Java Class,名为:UserInfo
UserInfo中代码如下:
package com.example.firstproject; import java.io.Serializable; public class UserInfo implements Serializable { private String mUserName; private int mAge; public UserInfo(String mUserName, int mAge) { this.mUserName = mUserName; this.mAge = mAge; } public String getmUserName() { return mUserName; } public int getmAge() { return mAge; } public void setmUserName(String mUserName) { this.mUserName = mUserName; } public void setmAge(int mAge) { this.mAge = mAge; } }
然后在之前的MainActivity中加入如下几行代码。在点击button_first时将userInfo中的对象传递给FirstAcitivity,同样用Intent中的putExtra。
代码如下:
findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
UserInfo userInfo= new UserInfo("小明",23);
Intent intent=new Intent(MainActivity.this,FirstActivity.class);
intent.putExtra("title",title);
intent.putExtra("userInfo",userInfo);
startActivity(intent);
}
});
在FirstActivity中获取传递的对象,方法和获取传递的字符串类似,代码如下:
text=(TextView) findViewById(R.id.text_first);
text2=findViewById(R.id.text_second);
UserInfo userInfo = (UserInfo)intent.getSerializableExtra("userInfo");
text2.setText("名字是"+userInfo.getmUserName());
text.setText(intent.getStringExtra("data"));
UserInfo可以用来存放一个对象的属性,也就是C++中的类。
这里实现从MainActivity跳转到FirstActivity,再从FirstActivity回到之前的MainActivity,并传回值。
第一步将MainActivity中的startA
完整代码(MainActivity):
package com.example.firstproject; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity { public static final String TITLE = "title"; public static final String USER_INFO = "userInfo"; public static final int REQUEST_CODE=9999; private static final String TAG= SplasgActivity.class.getSimpleName(); private TextView mtextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mtextView=findViewById(R.id.button_first); final String title=mtextView.getText().toString(); findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { UserInfo userInfo= new UserInfo("小明",23); Intent intent=new Intent(MainActivity.this,FirstActivity.class); intent.putExtra(TITLE,title); intent.putExtra(USER_INFO,userInfo); startActivityForResult(intent,REQUEST_CODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.i(TAG,"requestCode:"+requestCode+"resultCode"+resultCode); if(requestCode == REQUEST_CODE && resultCode == FirstActivity.RESULT_CODE){ if(data!=null){ String title=data.getStringExtra("title"); mtextView.setText(title); } } } }
FirstActivity代码:
package com.example.firstproject; import android.content.Intent; import android.os.Bundle; import android.os.IInterface; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; public class FirstActivity extends AppCompatActivity { TextView text,text2; public static final int RESULT_CODE=1234; private View.OnClickListener mOnClickListener= new View.OnClickListener(){ @Override public void onClick(View v) { switch (v.getId()){ case R.id.button_back: Intent intent= new Intent(); intent.putExtra(MainActivity.TITLE,"我是传回来的"); setResult(RESULT_CODE,intent); finish(); break; } } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); Intent intent=getIntent(); text=(TextView) findViewById(R.id.text_first); text2=findViewById(R.id.text_second); Button mbutton=findViewById(R.id.button_back); mbutton.setOnClickListener(mOnClickListener); UserInfo userInfo = (UserInfo)intent.getSerializableExtra("userInfo"); text2.setText("名字是"+userInfo.getmUserName()); text.setText(intent.getStringExtra("data")); } }
代码解释:
Intent intent=new Intent(MainActivity.this,FirstActivity.class);
intent.putExtra(TITLE,title);
startActivityForResult(intent,REQUEST_CODE);
从MainActivity传递到FirstActivity。并且传递数据title,startActivityForResult 打开意图,并且请求一个result。
FirstActivity中点击button返回MainActivity时,代码:
Intent intent= new Intent();
intent.putExtra(MainActivity.TITLE,"我是传回来的");
setResult(RESULT_CODE,intent);
finish();
重点在于setResult。 呼应之前的startActivityForResult,关联暗号即REQUEST_CODE和RESULT_CODE。 可通过RESULT_CODE判断是从什么控件传回的内容。
下面代码既是通过两个暗号,并且处理返回数据。代码如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i(TAG,"requestCode:"+requestCode+"resultCode"+resultCode);
if(requestCode == REQUEST_CODE && resultCode == FirstActivity.RESULT_CODE){
if(data!=null){
String title=data.getStringExtra("title");
mtextView.setText(title);
}
}
}
这个传回数据的代码非常关键,需要再多使用。理解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。