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) 对于背景图片,使用ImageView
。 ImageViews
开箱即用 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
希望你明白了!编码愉快。
我开发了一个 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) 对于背景图片,使用ImageView
。 ImageViews
开箱即用 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
希望你明白了!编码愉快。