一、 Android開發——如何完全退出Activity
在網上看了好多大牛關於完全退出Android應用程序Activity的處理方式,我總結出一下幾個方法:
1、創建一個Activity的基類,重寫startActivity()方法,在裏面添加一句finish()。其他的Activity繼承這個基類,這樣在啓動一個新的Acitivty之前就可以退出前一個Acitivity。當然這樣有一個壞處是當返回時不能返回到前一個Activity,所以我們需要對finish()的Activity進行管理,不需要返回用到的就finnish(),需要的就不finish()。
2、創建一個Activity的基類,其他的Acticity都繼承這個基類。退出使用廣播,在需要退出的地方發送一個廣播。在基類中接收這個廣播。然後finish(),這樣就可以了。不用每個Activity都去寫代碼。這樣做有好多好處,基類+廣播可以做其他很多事情。
3、在要退出的Activity上點擊“退出菜單”時,從當前Activity跳轉到主Activity(我們打開程序最新啓動的Activity),通過Intent告知主Activity我要退出程序,主Activity再調用finish()方法即可。這一過程會很短暫,以致於我們沒觀察到Activity有任何切換就退出程序了! Intent intent = new
Intent(
this
, LoginActivity.
class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
自己管理: 將Activity放入集合進行管理
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import java.util.Stack;
/**
* Activity管理類
*/
public class AppManager {
private static Stack activityStack;
private static AppManager instance;
private AppManager() {
}
/**
* 單一實例
*/
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
/**
* 添加Activity到堆棧
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack();
}
activityStack.add(activity);
}
/**
* 獲取當前Activity(堆棧中最後一個壓入的)
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 結束當前Activity(堆棧中最後一個壓入的)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 結束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* 結束指定類名的Activity
*/
public void finishActivity(Class<!--?-->cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* 結束所有Activity
*/
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出應用程序
*/
@SuppressWarnings("deprecation")
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage(context.getPackageName());
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、 Android開發——android實現複雜table表格合併單元格
可以通過Tablelayout佈局的layout_span屬性實現,layout_span指定該單元格佔據的列數
1、Tablelayout簡介
Tablelayout類以行和列的形式對控件進行管理,每一行爲一個TableRow對象,或一個View控件。當爲TableRow對象時,可在TableRow下添加子控件,默認情況下,每個子控件佔據一列。 當爲View時,該View將獨佔一行。
2、TableLayout行列數的確定
TableLayout的行數由開發人員直接指定,即有多少個TableRow對象(或View控件),就有多少行。
TableLayout的列數等於含有最多子控件的TableRow的列數。如第一TableRow含2個子控件,第二個TableRow含3個,第三個TableRow含4個,那麼該TableLayout的列數爲4.
3、TableLayout可設置的屬性詳解
TableLayout可設置的屬性包括全局屬性及單元格屬性。
單元格屬性,有以下2個參數:
android:layout_column 指定該單元格在第幾列顯e799bee5baa6e997aee7ad94e59b9ee7ad9431333337613764示
android:layout_span 指定該單元格佔據的列數(未指定時,爲1)
示例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="3dip"
>
<!-- 1個TableLayout,用於描述表中單元格的屬性,包括:android:layout_column 及android:layout_span-->
<TextView
android:text="表:單元格設置:指定單元格屬性設置"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textSize="15sp"
android:background="#7f00ffff"/>
<TableLayout
android:id="@+id/table2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="3dip">
<TableRow>
<Button android:text="第0列"/>
<Button android:text="第1列"/>
<Button android:text="第2列"/>
</TableRow>
<TableRow>
<TextView android:text="我被指定在第1列" android:layout_column="1"/>
</TableRow>
<TableRow>
<TextView
android:text="我跨1到2列,不信你看!"
android:layout_column="1"
android:layout_span="2"
/>
</TableRow>
</TableLayout>
<TableRow>
<TextView
style="@style/peibitongzhidanDetail"
android:layout_weight="0.2"
android:layout_height="90dp"
android:gravity="left|center_vertical"
android:text="5" />
<TextView
style="@style/peibitongzhidanDetail"
android:layout_weight="1"
android:layout_height="90dp"
android:gravity="left|center_vertical"
android:text="受力鋼筋" />
<TableLayout
android:layout_width="0dp"
android:layout_height="90dp"
android:layout_weight="2"
>
<TableRow>
<TextView
style="@style/peibitongzhidanDetail"
android:layout_weight="1"
android:text="間距"
android:gravity="left|center_vertical"
android:paddingLeft="5dp" />
<TextView
android:id="@+id/tv9_"
style="@style/peibitongzhidanDetail"
android:layout_weight="1"
android:text="±10"
android:gravity="left|center_vertical"
android:paddingLeft="5dp" />
<TextView
android:id="@+id/tddffv1_ees"
style="@style/peibitongzhidanDetail"
android:layout_weight="1"
android:gravity="center"
android:text="實際偏差"
android:paddingLeft="5dp" />
</TableRow>
<TableRow>
<TextView
style="@style/peibitongzhidanDetail"
android:layout_weight="1"
android:text="排距"
android:gravity="left|center_vertical"
android:paddingLeft="5dp" />
<TextView
style="@style/peibitongzhidanDetail"
android:layout_weight="1"
android:text="±5"
android:gravity="left|center_vertical"
android:paddingLeft="5dp" />
<TextView
style="@style/peibitongzhidanDetail"
android:layout_weight="1"
android:gravity="center"
android:text="實際偏差"
android:paddingLeft="5dp" />
</TableRow>
</TableLayout>
</TableRow>