Android如何退出全屏的Activity

2018-08-02 17:53 更新

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

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

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

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

禁用滑動退出手勢

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

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

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

實現(xiàn)長按退出模式

要在activity中使用DissmissOverlayView類,添加下面這個節(jié)點到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è)置一些提示文字。這些文字會在用戶第一次運行我們的應(yīng)用時提醒用戶可以使用長按手勢退出應(yīng)用。接著用GestureDetector檢測長按動作:

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)檢測到一個長按動作,DismissOverlayView會顯示一個退出按鈕。如果用戶點擊它,那么我們的activity會被終止。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號