Android - 如何制作一个真正的假锁屏

Android - How to make a real fake lock screen

我开发了一个 Android 应用程序,我需要创建一个 "fake lockscreen"。我解释一下。

应用程序应该显示黑屏,就像屏幕被锁定一样(简单),然后我想在用户点击 lock/unlock phone 按钮时显示假锁屏。

我的问题是,当我使用当前壁纸设置应用程序背景时(使用壁纸管理器获取)背景不是 "cropped"。背景图像适合屏幕,而不是像 phone 中的 "home screen" 那样适合桌面数量。

我尝试使用 getBuiltInDrawable(FLAG_LOCK) 但它只能从 API 24 开始使用,当我尝试时,结果不是我所期望的 =/

有人对这里的问题有想法吗?

提前谢谢你。 巴蒂斯特.

好的,所以你需要

1) 使用没有操作栏的全屏主题创建您的 activity,因此它看起来不像一个应用程序。为此,您将在 styles.xml 中创建一个样式并将其应用到您的 manifest.xml

Full Screen Theme for AppCompat

2) 对于背景图片,使用ImageViewImageViews 开箱即用 scaleType 属性 允许您 select 不同的模式:FIT、中心裁剪等...

https://developer.android.com/reference/android/widget/ImageView.ScaleType.html

3) 创建输入 Pin 码的其余逻辑。并展示你不同的模拟图像。有一个非常适合您 "project" 的组件,它叫做 ViewFlipper,基本上可以让您将所有图像放入其中并 select 显示哪一个。您的根布局大致如下所示:

<ViewFlipper 
   android:id="@+id/flipper"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

   <!-- page 0: the lock screen mock -->
   <FrameLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

      <ImageView
          android:src="@drawable/mock_lock_screen"
          android:scaleType="centerCrop"
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>

       <EditText
          android:id="@+id/pinCode"
          android:layout_width="80dp"
          android:layout_height="wrap_content"
          android:layout_gravity="center"
          android:hint="PIN CODE" />
   </FrameLayout>

   <!-- page 1: chrome screen mock-->
   <ImageView
      android:src="@drawable/mock_chrome"
      android:scaleType="centerCrop"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

   <!-- page 2: wikipedia screen mock-->
   <ImageView
      android:src="@drawable/mock_wiki"
      android:scaleType="centerCrop"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

    .
    .
</ViewFlipper>

然后在activity中,您可以显示锁屏和任何模拟页面:

ViewFlipper mFlipper;

@Override
public void onCreate(Bundle savedInstanceState) {
   .
   .
   mFlipper = (ViewFlipper)findViewById(R.id.flipper);
  .
  .
  .
}

并更改显示的屏幕

  mFlipper.setDisplayedChild(0); // will show lock screen
  mFlipper.setDisplayedChild(1); // will show chrome mock
  mFlipper.setDisplayedChild(2); // will show wikipedia mock

希望你明白了!编码愉快。