我们都知道Activity默认的切换方式都是左右切换的,下面我们就来学习一下上下式切换的activity.废话不多说,先上图,无图无真相。以下分别是原始状态和activity弹出状态。
一、下面说一下实现思路,当然这个切换方式有好多种实现方式,我这里就说我长用的一种方式,其它方式有兴趣的朋友们可以息行研究一下。我们可以用activity的样式来控制activity的切换样式。
1、用上下滑动的动画。2、Activity的样式是作为一个dialog滑动上来的。3、要在mainfest文件中配置要弹出activity的样式。4、在要弹出activity中设置而已参数。
二、实现代码:
1、包结构:
2、主Activity--> MainActivity.java
package com.jun.activityslidetop;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("fuck:", "Main:===onCreate") ;
findViewById(R.id.mybtn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,Second.class) ;
startActivity(intent) ;
}
}) ;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.d("fuck:", "Main:===onRestart") ;
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.d("fuck:", "Main:===onResume") ;
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.d("fuck:", "Main:===onStop") ;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("fuck:", "Main:===onDestroy") ;
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.d("fuck:", "Main:===onPause") ;
}
}
MainActivity.java只是一个普通的Activity,没有什么难点,只不过我在这里实现了activity的生命周期,为了就是显示弹出activity的时候会调用什么生命周期,咱们在开发中可以注意一下。
3、要弹出的Activity-->Second.java
package com.jun.activityslidetop;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
public class Second extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.second) ;
//注意这里要有这句话,不然弹出的布局不是理想中的。
getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
finish() ;
}
}) ;
}
}
这个activity也没有什么特别的,只是一个设置布局参数和返回按钮事件的处理。当然想要弹出肯定不是这样的,这样的和普通的activity的切换方式有什么区别呢。
4、下面就要看真正的activity的模式了这里是决定activity切换的重点。res/styles.xml
以上的xml注释很详细不用多说,下面看一下弹出和离开的动画。在res/anim目录下。
(1)、slide_in_from_bottom.xml(从底部弹出的动画)
android:theme="@style/popup_dialog_anim"
android:configChanges="keyboardHidden|orientation">
三、由于弹出的activity是dialog样式的,所以当我们离开second.java时调用MainActivity中的onPuase()方法,再次弹出时调用onResume()方法。和普通的activity不太一样。这里说明一点Dialog样式的activity和Dialog是不一样的,如果我们弹出一个dialog的话,什么生命周期方法都不会调用的,除非你的dialog上面有处理activity的逻辑(比如点击确认按键打开一个新的activity)。
好了今天的内容就到这里了,如果朋友们有什么好的建议和意见都提出来我们一同进步。
最后附上源码下载地址:http://download.csdn.net/detail/android0012345/6461065