Android如何退出全屏的Activity

2018-08-02 17:53 更新

編寫: roya 原文:https://developer.android.com/training/wearables/ui/exit.html

默認(rèn)情況下,用戶通過(guò)從左到右滑動(dòng)退出Android Wear activities。如果應(yīng)用含有水平滾動(dòng)的內(nèi)容,用戶首先滑動(dòng)到內(nèi)容邊緣,然后再次從左到右滑動(dòng)即退出app。

對(duì)于更加沉浸式的體驗(yàn),比如在應(yīng)用中可以任意方向地滾動(dòng)地圖,這時(shí)我們可以在應(yīng)用中禁用滑動(dòng)退出手勢(shì)。然而,如果我們禁用了這個(gè)功能,那么我們必須使用Wearable UI庫(kù)中的DismissOverlayView類實(shí)現(xiàn)長(zhǎng)按退出UI模式讓用戶退出應(yīng)用。當(dāng)然,我們需要在用戶第一次運(yùn)行我們應(yīng)用的時(shí)候提醒用戶可以通過(guò)長(zhǎng)按退出應(yīng)用。

更多關(guān)于退出Android Wear activities的設(shè)計(jì)指南,請(qǐng)查看Breaking out of the card。

禁用滑動(dòng)退出手勢(shì)

如果我們應(yīng)用的用戶交互模型與滑動(dòng)退出手勢(shì)相沖突,那么我們可以在應(yīng)用中禁用它。為了禁用滑動(dòng)退出手勢(shì),需要繼承默認(rèn)的theme,然后設(shè)置android:windowSwipeToDismiss 屬性為false

<style name="AppTheme" parent="Theme.DeviceDefault">
    <item name="android:windowSwipeToDismiss">false</item>
</style>

如果我們禁用了這個(gè)手勢(shì),那么我們需要實(shí)現(xiàn)長(zhǎng)按退出UI模型來(lái)讓用戶退出我們的應(yīng)用,下面的章節(jié)會(huì)介紹相關(guān)內(nèi)容。

實(shí)現(xiàn)長(zhǎng)按退出模式

要在activity中使用DissmissOverlayView類,添加下面這個(gè)節(jié)點(diǎn)到layout文件,讓它全屏且覆蓋在所有其他view上。例如:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

    <!-- other views go here -->

    <android.support.wearable.view.DismissOverlayView
        android:id="@+id/dismiss_overlay"
        android:layout_height="match_parent"
        android:layout_width="match_parent"/>
<FrameLayout>

在我們的activity中,取得DismissOverlayView元素并設(shè)置一些提示文字。這些文字會(huì)在用戶第一次運(yùn)行我們的應(yīng)用時(shí)提醒用戶可以使用長(zhǎng)按手勢(shì)退出應(yīng)用。接著用GestureDetector檢測(cè)長(zhǎng)按動(dòng)作:

public class WearActivity extends Activity {

    private DismissOverlayView mDismissOverlay;
    private GestureDetector mDetector;

    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        setContentView(R.layout.wear_activity);

        // Obtain the DismissOverlayView element
        mDismissOverlay = (DismissOverlayView) findViewById(R.id.dismiss_overlay);
        mDismissOverlay.setIntroText(R.string.long_press_intro);
        mDismissOverlay.showIntroIfNecessary();

        // Configure a gesture detector
        mDetector = new GestureDetector(this, new SimpleOnGestureListener() {
            public void onLongPress(MotionEvent ev) {
                mDismissOverlay.show();
            }
        });
    }

    // Capture long presses
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return mDetector.onTouchEvent(ev) || super.onTouchEvent(ev);
    }
}

當(dāng)系統(tǒng)檢測(cè)到一個(gè)長(zhǎng)按動(dòng)作,DismissOverlayView會(huì)顯示一個(gè)退出按鈕。如果用戶點(diǎn)擊它,那么我們的activity會(huì)被終止。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)