吳裕雄--天生自然ANDROID開發學習:4.1.2 Activity初窺門徑
阿新 • • 發佈:2020-08-29
package example.jay.com.activitytest1; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; public class MyActivity extends ActionBarActivity { private Button btnregister; private EditText editname; private RadioGroup rad; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); btnregister = (Button)findViewById(R.id.btnregister); editname = (EditText)findViewById(R.id.editname); rad = (RadioGroup)findViewById(R.id.radioGroup); btnregister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String name,sex = ""; Intent it = new Intent(MyActivity.this,MyActivity2.class); name = editname.getText().toString(); //遍歷RadioGroup找出被選中的單選按鈕 for(int i = 0;i < rad.getChildCount();i++) { RadioButton rd = (RadioButton)rad.getChildAt(i); if(rd.isChecked()) { sex = rd.getText().toString(); break; } } //新建Bundle物件,並把資料寫入 Bundle bd = new Bundle(); bd.putCharSequence("user",name); bd.putCharSequence("sex",sex); //將資料包Bundle繫結到Intent上 it.putExtras(bd); startActivity(it); //關閉第一個Activity finish(); } }); } }
package example.jay.com.activitytest1; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.widget.TextView; public class MyActivity2 extends ActionBarActivity { private TextView txtshow; private String name; private String sex; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_activity2); txtshow = (TextView)findViewById(R.id.txtshow); //獲得Intent物件,並且用Bundle出去裡面的資料 Intent it = getIntent(); Bundle bd = it.getExtras(); //按鍵值的方式取出Bundle中的資料 name = bd.getCharSequence("user").toString(); sex = bd.getCharSequence("sex").toString(); txtshow.setText("尊敬的"+name + " " + sex + "士"+"恭喜你,註冊成功~"); } }
2.多個Activity間的互動(後一個傳回給前一個)
3.知曉當前是哪個Activity
4.隨時關閉所有Activity
具體程式碼如下: public class ActivityCollector { public static LinkedList<Activity> activities = new LinkedList<Activity>(); public static void addActivity(Activity activity) { activities.add(activity); } public static void removeActivity(Activity activity) { activities.remove(activity); } public static void finishAll() { for(Activity activity:activities) { if(!activity.isFinishing()) { activity.finish(); } } } }
5.完全退出App的方法 上面說的是關閉所有Activity的,但是有些時候我們可能想殺死整個App,連後臺任務都殺死 殺得一乾二淨的話,可以使用搭配著下述程式碼使用:
實現程式碼: /** * 退出應用程式 */ public void AppExit(Context context) { try { ActivityCollector.finishAll(); ActivityManager activityMgr = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); activityMgr.killBackgroundProcesses(context.getPackageName()); System.exit(0); } catch (Exception ignored) {} }
6.雙擊退出程式的兩種方法: 1)定義一個變數,來標識是否退出 // 定義一個變數,來標識是否退出 private static boolean isExit = false; Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); isExit = false; } }; public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (!isExit) { isExit = true; Toast.makeText(getApplicationContext(), "再按一次退出程式", Toast.LENGTH_SHORT).show(); // 利用handler延遲傳送更改狀態資訊 mHandler.sendEmptyMessageDelayed(0, 2000); } else { exit(this); } return false; } return super.onKeyDown(keyCode, event);} 2)儲存點選時間: //儲存點選的時間 private long exitTime = 0; public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次退出程式", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { exit(); } return false; } return super.onKeyDown(keyCode, event); }
2)方法二: 通過style進行配置,這個是全域性的哦,就是所有的Activity都會載入這個動畫! 實現程式碼如下: ①在style.xml中自定義style: <!-- 預設Activity跳轉動畫 --> <style name="default_animation" mce_bogus="1" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/default_anim_in</item> <item name="android:activityOpenExitAnimation">@anim/anim_stay</item> <item name="android:activityCloseEnterAnimation">@anim/anim_stay</item> <item name="android:activityCloseExitAnimation">@anim/default_anim_out</item> </style> 解釋: 4個item分別代表: Activity A跳轉到Activity B時Activity B進入動畫; Activity A跳轉到Activity B時Activity A退出動畫; Activity B返回Activity A時Activity A的進入動畫 Activity B返回Activity A時ActivityB的退出動畫 ②然後修改下AppTheme: <style name="AppTheme" mce_bogus="1" parent="@android:style/Theme.Light"> <item name="android:windowAnimationStyle">@style/default_animation</item> <item name="android:windowNoTitle">true</item> </style> ③最後在appliction設定下: <application android:icon="@drawable/logo" android:label="@string/app_name" android:theme="@style/AppTheme" >
10.設定Activity全屏的方法: 1)程式碼隱藏ActionBar 在Activity的onCreate方法中呼叫getActionBar.hide();即可 2)通過requestWindowFeature設定 requestWindowFeature(Window.FEATURE_NO_TITLE); 該程式碼需要在setContentView ()之前呼叫,不然會報錯
3)通過AndroidManifest.xml的theme 在需要全屏的Activity的標籤內設定 theme = @android:style/Theme.NoTitleBar.FullScreen 11.onWindowFocusChanged方法妙用: 我們先來看下官方對這個方法的介紹:
12.定義對話方塊風格的Activity 直接設定下Activity的theme: android:theme="@android:style/Theme.Dialog"這樣就可以了,當然你可以再設定下標題,小圖示! //設定左上角小圖示 requestWindowFeature(Window.FEATURE_LEFT_ICON); setContentView(R.layout.main); getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, android.R.drawable.ic_lion_icon); //設定文字: setTitle(R.string.actdialog_title); //XML程式碼中設定:android:label="@string/activity_dialog"