精华内容
下载资源
问答
  • 2021-05-27 09:18:41

    系统获取大于等于9.0才有

    decorView.rootWindowInsets?.displayCutout.safeInsetTop (kotlin)

    华为

    判断

    val cl: ClassLoader = context!!.classLoader

    val HwNotchSizeUtil: Class = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil")

    val get = HwNotchSizeUtil.getMethod("hasNotchInScreen")

    ret = get.invoke(HwNotchSizeUtil) as Boolean

    获取

    val cl = context!!.classLoader

    val HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil")

    val get: Method = HwNotchSizeUtil.getMethod("getNotchSize")

    ret = get.invoke(HwNotchSizeUtil) as IntArray

    小米

    判断

    com.bilibili.droid.SystemProperties.get("ro.miui.notch", "0") == "1"

    获取

    val res = context!!.resources

    var resourceId = res.getIdentifier("notch_height", "dimen", "android");

    if (resourceId > 0) {

    return res.getDimensionPixelSize(resourceId);

    }

    resourceId = res.getIdentifier("status_bar_height", "dimen", "android");

    if (resourceId > 0) {

    return res.getDimensionPixelSize(resourceId);

    }

    小米有些版本可以通过notch_height获取,有些版本没有直接获取状态栏高度

    魅族

    判断

    var fringeDevice = false

    try {

    val clazz = Class.forName("flyme.config.FlymeFeature")

    val field = clazz.getDeclaredField("IS_FRINGE_DEVICE")

    fringeDevice = field.get(null) as Boolean

    } catch (e: Exception) {

    }

    if (fringeDevice) {

    // 判断隐藏刘海开关(默认关)

    val isFringeHidden = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {

    Settings.Global.getInt(window.getContext().getContentResolver(),

    "mz_fringe_hide", 0) == 1

    } else {

    true //当做默认值

    }

    return !isFringeHidden

    }

    return false

    获取

    val res = context!!.resources

    var notchHeight = 0

    val fhid = res.getIdentifier("fringe_height", "dimen", "android")

    if (fhid > 0) {

    notchHeight = res.getDimensionPixelSize(fhid)

    }

    VIVO

    判断

    try {

    val cl =context.classLoader

    val vivoFtFeature = cl.loadClass("android.util.FtFeature")

    val get = vivoFtFeature.getMethod("isFeatureSupport", Int::class.javaPrimitiveType!!)

    //表示是否有凹槽

    val VIVO_HAS_NOTCH_DISPLAY:Int = 0x00000020

    return get.invoke(vivoFtFeature, VIVO_HAS_NOTCH_DISPLAY) as Boolean

    } catch (e: Exception) {

    return false

    }

    获取

    27dp

    OPPO

    判断

    return window.context.packageManager

    .hasSystemFeature("com.oppo.feature.screen.heteromorphism");

    获取

    80

    oppo和vivo是默认的高度,没有厂商api

    更多相关内容
  • 【IT168 手机讯】3月30日消息,尽管很多用户在审美上无法接受刘海屏,认为这个设计影响美观,但不可否热的是现在大部分安卓手机都要采用这样的设计来满足提升屏占比的需求。回顾3月份Android阵营涌现出了大量刘海...

    【IT168 手机讯】3月30日消息,尽管很多用户在审美上无法接受刘海屏,认为这个设计影响美观,但不可否热的是现在大部分安卓手机都要采用这样的设计来满足提升屏占比的需求。回顾3月份Android阵营涌现出了大量刘海设计的新机,例如刚刚亮相的华为P20系列、OPPO R15以及vivo X21,而且即将到来的一加6、LG G7等旗舰也会采用类似设计。那么如何更好利用刘海空间呢?除了手机厂商的优化之外,用户也可以通过第三方软件的方式进行修改调整。

    354c89ccb7c3b2bc17c2110b2aa90f4a.png

    华为P20系列在设置界面中内置了隐藏刘海的功能,对于其他手机来说也可以使用这项功能,在XDA论坛上有一款应用程序可以实现隐藏刘海瓶的功能。这款应用名称为Nacho Notch — Notch Hider,正如字面意思能够隐藏刘海空间,自然依然会显示时钟、通知等相关信息。

    ce9f9b10872d8cf4a6ee9ea348e464df.png

    应用描述中写到Nacho Notch在设备进入竖屏的时候会将状态栏变成黑色,从而更好的契合刘海。如果你的手机没有刘海设计,但是想要黑色的状态栏,那么你也可以使用这款应用程序。这款APP能够动态查找状态栏的高度,所以用户不需要进行手动处理。这款应用没有图标也不会出现多任务操作中。

    展开全文
  • 刘海屏是指某些设备显示屏上的一个区域延伸到显示面,...Android 在搭载 Android 9(API 级别 28)及更高版本的设备上正式支持刘海屏。请注意,设备制造商也可以选择在搭载 Android 8.1 或更低版本的设备上支持刘海屏。

    刘海屏是指某些设备显示屏上的一个区域延伸到显示面,这样既能为用户提供全面屏体验,又能为设备正面的重要传感器留出空间。Android 在搭载 Android 9(API 级别 28)及更高版本的设备上正式支持刘海屏。请注意,设备制造商也可以选择在搭载 Android 8.1 或更低版本的设备上支持刘海屏。

    本篇来自:Android 设备兼容-支持刘海屏

     

    选择您的应用如何处理刘海区域

    如果不希望您的内容与刘海区域重叠,请确保您的内容不与状态栏和导航栏重叠,这样做一般就足够了。

    如果您要将内容呈现到刘海区域中,则可以使用 WindowInsets.getDisplayCutout() 来检索 DisplayCutout 对象,该对象包含每个刘海区域的安全边衬区和边界框。您可以使用这些 API 来检查您的内容是否与刘海区域重叠,以便根据需要重新放置。

    ⚠️ 注意:要在多个 API 级别管理刘海实现,您还可以使用 AndroidX 库(可通过 SDK 管理器获得)中的 DisplayCutoutCompat

    Android 还允许您控制是否在刘海区域内显示内容。窗口布局属性 layoutInDisplayCutoutMode 控制您的内容如何呈现在刘海区域中。您可以将 layoutInDisplayCutoutMode 设为以下某个值:

    • LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT - 这是默认行为,如上所述。在竖屏模式下,内容会呈现到刘海区域中;但在横屏模式下,内容会显示黑边。
    • LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - 在竖屏模式和横屏模式下,内容都会呈现到刘海区域中。
    • LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER - 内容从不呈现到刘海区域中。

    您可以通过编程或在 Activity 中设置样式来设置刘海模式。以下示例定义了一种样式,您可以使用它将 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 属性应用到 Activity。

    <style name="ActivityTheme">
          <item name="android:windowLayoutInDisplayCutoutMode">
            shortEdges <!-- default, shortEdges, never -->
          </item>
        </style>

       

    下面几部分更详细地介绍了不同的刘海模式。

     #1. 默认行为

    默认情况下,在未设置特殊标志的竖屏模式下,在带刘海屏的设备上,状态栏的大小会调整为至少与刘海一样高,而您的内容会显示在下方区域。在横屏模式或全屏模式下,您的应用窗口会显示黑边,因此您的任何内容都不会显示在刘海区域中。

    #2. 将内容呈现在短边刘海区域中

    对于某些内容(如视频、照片、地图和游戏),呈现在刘海区域中是一种很好的方法,这样能够为用户提供沉浸感更强的全面屏体验。如果设置了 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES,则在竖屏模式和横屏模式下,内容都会延伸到显示屏的短边上的刘海区域,而不管系统栏处于隐藏还是可见状态。请注意,窗口无法延伸到屏幕的长边上的刘海区域。使用此模式时,请确保没有重要内容与刘海区域重叠。

    请注意,Android 可能不允许内容视图与系统栏重叠。要替换此行为并强制内容延伸到刘海区域,请通过 View.setSystemUiVisibility(int) 方法将以下任一标志应用于视图可见性:

    • SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    • SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    • SYSTEM_UI_FLAG_LAYOUT_STABLE

    下面是一些 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 示例:

    #3. 从不将内容呈现在刘海区域中

    如果设置了 LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER,则不允许窗口与刘海区域重叠。

    此模式应该用于暂时设置 View.SYSTEM_UI_FLAG_FULLSCREEN 或 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 的窗口,以避免在设置或清除了该标志时执行另一种窗口布局。

    请查看下面的 LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 示例:

     

    支持刘海屏的最佳做法

    使用刘海屏时,请务必考虑以下几点:

    • 不要让刘海区域遮盖任何重要的文本、控件或其他信息。
    • 不要将任何需要精细轻触识别的交互式元素放置或延伸到刘海区域。刘海区域中的轻触灵敏度可能要比其他区域低一些。
    • 避免对状态栏高度进行硬编码,因为这样做可能会导致内容重叠或被切断。如有可能,请使用 WindowInsetsCompat 检索状态栏高度,并确定要对您的内容应用的适当内边距。
    • 不要假定应用会占据整个窗口,而应使用 View.getLocationInWindow() 来确认应用的位置。不要使用 View.getLocationOnScreen()。
    • 务必妥善处理进入或退出全屏模式。
    • 对于竖屏模式下的默认刘海行为,如果刘海区域位于顶部边缘,并且窗口未设置 FLAG_FULLSCREEN 或 View.SYSTEM_UI_FLAG_FULLSCREEN,则窗口可以延伸到刘海区域。同样,如果刘海区域位于底部边缘,并且窗口未设置 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION,则窗口可以延伸到刘海区域。在全屏模式或横屏模式下,窗口的布局方式应确保其不与刘海区域重叠。
    • 如果您的应用需要进入和退出全屏模式,请使用 shortEdges 或 never 刘海模式。默认刘海行为可导致应用中的内容在全屏模式转换过程中上下移动,如下图所示:
    • 在全屏模式下,在使用窗口坐标与屏幕坐标时应保持谨慎,因为在显示黑边的情况下,您的应用不会占据整个屏幕。由于显示黑边,因此根据屏幕原点得到的坐标与根据窗口原点得到的坐标不再相同。您可以根据需要使用 getLocationOnScreen() 将屏幕坐标转换为视图坐标

     

    对于避免对状态栏高度进行硬编码,因为这样做可能会导致内容重叠或被切断。如有可能,请使用 WindowInsetsCompat 检索状态栏高度,并确定要对您的内容应用的适当内边距。

    ### 以下介绍如何检索状态栏高度,并设置适当内边距:

    1. 获取状态栏高度:

    /**
     * get statusBar height
     *
     * @param context
     * @return statusBar height
     */
    private fun getStatusBarHeight(context: Context): Int {
        try {
            var result = 0
            val resourceId =
                context.resources.getIdentifier("status_bar_height", "dimen", "android")
            if (resourceId > 0) {
                result = context.resources.getDimensionPixelSize(resourceId)
            }
            return result
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return 0
    }
    

    2. 贴上 layout_header.xml 文件,并设置 view layoutParams 的高度:

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <View android:id="@+id/view_status_bar"
            android:layout_width="wrap_content"
            android:layout_height="25dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"/>
    
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/layout_header"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:layout_constraintTop_toBottomOf="@+id/view_status_bar"
            tools:ignore="MissingConstraints">
    
            <ImageView
                android:id="@+id/header_image_back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
            <TextView
                android:id="@+id/header_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#D9D9D9"
                android:textSize="16sp"
                android:textStyle="bold"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                tools:text="测速历史" />
    
            <ImageView
                android:id="@+id/header_image_action"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    
    </androidx.constraintlayout.widget.ConstraintLayout>

     

    /**
     * get statusBar height
     *
     * @param context
     * @return statusBar height
     */
    private fun getStatusBarHeight(context: Context): Int {
        try {
            var result = 0
            val resourceId =
                context.resources.getIdentifier("status_bar_height", "dimen", "android")
            if (resourceId > 0) {
                result = context.resources.getDimensionPixelSize(resourceId)
            }
            return result
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return 0
    }
    
    
    fun View.adaptStatusBarHeight() {
        val pH = getStatusBarHeight(context)
        Logger.d("StatusBarHeight", "status_bar_height = $pH")
        if (pH > 0){
            val params = this.layoutParams
            params.height = pH
            layoutParams = params
        }
    }
    
    view_status_bar?.adaptStatusBarHeight()

    贴上简单的效果:

     

    ----------------------  补充说明   ------------------------

    * 1. 上面贴的代码是做了状态栏浸透及状态栏半透明效果(StatusBarUtil.setTranslucentForImageView(this, 50, null)),适配了状态栏高度不一致问题(即设置适当内边距)  

    * 2. 额外添加了 view_status_bar, 是为了兼容,如果我在隐藏header的时候,app内容也需要这个适当内边距,以免内容错位至状态栏。

    * 3. 这里的代码可以放到 BaseActivity/BaseFragment 中,做全局处理。(注意添加适当的判断)

     

    展开全文
  • 一、先看加载页如下图(图片加了个黑框,方便看清效果) 二、AndroidManifest.xml清单文件中配置如下,改成首先进入加载页) ...action android:name="android.intent.action.MAIN" /> .

    适用版本(因为一些方法被高版本弃用或淘汰,可能效果不太好,以下版本验证可用):

    android {
        compileSdkVersion 28
        buildToolsVersion '28.0.0'
        defaultConfig {
            applicationId "cn.ch**g.di***enge.livew***per"
            minSdkVersion 16
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }

    一、先看加载页如下图(图片加了个黑框,方便看清效果)

    二、AndroidManifest.xml清单文件中配置如下,改成首先进入加载页

            <activity android:name=".activity.LoadActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
    
            <activity android:name=".activity.MainActivity">
    
            </activity>

    三、AndroidManifest.xml清单文件主题样式改成如下,(去除标题栏)

    android:theme="@style/AppTheme"对应的样式文件
     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <item name="android:windowNoTitle">true</item>
     </style>

    四、activity_load.xml布局文件如下,图片src改成你的

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:background="@mipmap/gradient_back"
        tools:context="cn.cheng.dierrenge.livewallpaper.activity.LoadActivity">
    
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="centerInside"
            android:maxWidth="300dp"
            android:src="@mipmap/load"
            />
    
    </LinearLayout>

     五、系统窗口UI工具类如下

    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Build;
    import android.support.annotation.RequiresApi;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    
    /**
     * Created by SecondPersonality on 2021/9/6.
     *
     * 系统UI工具类
     */
    public class SysWindowUi {
    
        /**
         * noStateBarAndNavigationBar 为true时,隐藏系统状态栏和导航栏用于加载页,
         * noStateBarAndNavigationBar 为false时,透明沉浸式系统状态栏和导航栏用于其他页面
         * @param activity
         * @param noStateBarAndNavigationBar
         */
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) // 跳过低版本没有此api的编译报错
        public static void hideStatusNavigationBar(Activity activity, Boolean noStateBarAndNavigationBar) {
    
            if (Build.VERSION.SDK_INT < 16) {
                activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
            } else {
    
                if (Build.VERSION.SDK_INT >= 28) {
                    // 设置窗口占用刘海区
                    WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
                    lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
                    activity.getWindow().setAttributes(lp);
                }
    
                int uiFlags =
                        // 稳定布局(当StatusBar和NavigationBar动态显示和隐藏时,系统为fitSystemWindow=true的view设置的padding大小都不会变化,所以view的内容的位置也不会发生移动。)
                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                // 主体内容占用系统导航栏的空间
                                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                // 沉浸式(避免某些用户交互造成系统自动清除全屏状态。)
                                | View.SYSTEM_UI_FLAG_IMMERSIVE;
    
    
                if (!noStateBarAndNavigationBar) {
                    uiFlags = uiFlags
                            // 在不隐藏StatusBar状态栏的情况下,将view所在window的显示范围扩展到StatusBar下面
                            |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            // 状态栏字体颜色设置为黑色这个是Android 6.0才出现的属性   默认是白色
                            | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
    
                } else {
                    // 隐藏导航栏
                    uiFlags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    
                    if (Build.VERSION.SDK_INT >= 28) {
                        // 隐藏状态栏
                        uiFlags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
                    } else {
                        // 版本小于28不能设置占用刘海区,加载页布局使用白色背景,达到同样的效果
                        uiFlags = uiFlags
                                // 状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏
                                |View.SYSTEM_UI_FLAG_LOW_PROFILE
                                // 在不隐藏StatusBar状态栏的情况下,将view所在window的显示范围扩展到StatusBar下面
                                |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
                    }
    
                }
    
                activity.getWindow().getDecorView().setSystemUiVisibility(uiFlags);
    
                //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
                activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    
                //将导航栏设置成透明色
                activity.getWindow().setNavigationBarColor(Color.TRANSPARENT);
    
                //将状态栏设置成透明色
                activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
    
            }
    
        }
    }
    

     六、LoadActivity.class加载页activity如下

    import android.content.Intent;
    import android.os.Build;
    import android.os.Handler;
    import android.support.annotation.RequiresApi;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import cn.cheng.dierrenge.livewallpaper.R;
    import cn.cheng.dierrenge.livewallpaper.util.SysWindowUi;
    
    /**
     * Created by YanGeCheng on 2021/9/6.
     *
     * 加载页activity
     */
    public class LoadActivity extends AppCompatActivity {
    
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // 设置隐藏状态栏和导航栏
            SysWindowUi.hideStatusNavigationBar(this, true);
    
            setContentView(R.layout.activity_load);
    
    
    
            //加载后跳转
            new Handler().postDelayed(() -> {
                jump();
            },3000);
            
        }
    
        private void jump() {
            Intent intent = new Intent();
            intent.setClass(LoadActivity.this, MainActivity.class);
            startActivity(intent);
            this.finish();
        }
    }

           以上就完成了一个完美隐藏系统状态栏和导航栏的加载页,接下来就可以开始愉快的安卓应用之旅!

    展开全文
  • 笔者最近开发一款视频同步演示产品,主要功能是:多台手机设备在手机专卖店展台区同步播放宣传视频,即在任何时间打开任一台设备都要同步播放视频,达到宣传产品和整体化一的用户体验,原理即在服务器打开网页播放...
  • 在做项目的时候图片全屏预览时发现使用全面屏后,图片会闪动一下,带着问题来梳理一下Android 全面屏、沉浸式状态栏和刘海屏的概念和方法。 一、全面屏 1.1 向后倾斜 1.2 沉浸模式 1.3 粘性沉浸模式 二、沉浸式状态...
  • 前言 前段时间帮朋友搞了一个app,中间没更新blog,项目上线后,要开始还技术债了,后面会针对项目中用到的技术点,...不过不管你怎样,Android 也要跻入 “刘海屏” 的行列,尤其是 Android P 发布之后,也从系统...
  • 如果您在改变尺寸的视图中将位图用作背景,您会注意到,当视图根据屏幕尺寸或视图中的内容增大或缩小时,Android 会缩放您的图片。这通常会导致明显的模糊或其他缩放失真。解决方案是使用九宫格位图,..
  • Android 在搭载 Android 9(API 级别 28)及更高版本的设备上正式支持刘海屏。请注意,设备制造商也可以选择在搭载 Android 8.1 或更低版本的设备上支持刘海屏 在带刘海屏的设备上有什么要求 为了确保一致性和应用...
  • 最近在做一个Android项目,需要全屏,网上搜了方法后可以把上方状态栏隐藏,但是不知道什么情况,我的水滴屏在隐藏后原位置出现的是黑条,很烦。 然后尝试了很多方法,包括直接用android studio的fullscreen ...
  • 一条边缘最多只能包含一个刘海。 一台设备不能有两个以上的刘海。 设备的两条较长边缘上不能有刘海。 在未设置特殊标志的竖屏模式下,状态栏的高度必须至少与刘海的高度持平。 默认情况下,在全屏模式或横屏...
  • 一、前期基础知识储备image话不多说,这么多刘海屏手机今年集中爆发,所以尽管刘海屏不好看,但是还是要适配。2017年苹果X开启了刘海屏时代...淡出视野这一点是确定的),所以Android手机对于刘海屏的适配也是比较重...
  • 试了很多种方法,只有这种满屏效果最好。... View.SYSTEM_UI_FLAG_HIDE_NAVIGATION用来隐藏底部悬浮条,WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES用来在android高版本满屏,穿过摄像头。
  • Android 刘海屏的适配

    千次阅读 2019-04-01 17:31:18
    1、Android8.0以上的适配说明 主要说明国内外几大主流产商:小米、oppo、vivo、华为、三星、Google。 小米 MIUI Notch 屏适配说明 Notch 机型在界面上会带来两个问题: 顶部内容会被 Notch 遮挡 如何处理耳朵区...
  • Android 在搭载 Android 9(API 级别 28)及更高版本的设备上正式支持刘海屏。请注意,设备制造商也可以选择在搭载 Android 8.1 或更低版本的设备上支持刘海屏。 本主题介绍如何实现对带刘海屏的设备的支持,包括...
  • 2.针对所有屏幕尺寸进行测试 3.声明特定的屏幕尺寸支持 4.支持刘海屏 (1)在带刘海屏的设备上有什么要求 (2)选择您的应用如何处理刘海区域 (3)默认行为 (4)将内容呈现在短边刘海区域中 (4)...
  • 刘海的出现,很多人会吐槽丑,所以厂家想到了隐藏刘海的方式(掩耳盗铃),比如下面是Redmi K30的设置页面: 第二种没啥特别,就是状态栏强制为黑色。这里我怀疑因为这个设置,导致在有刘海的手机上,ScreenHeight...
  • 一大波 Android 刘海屏来袭,全网\Maybe/最全适配技巧!一、序Hi,大家好,我是承香墨影!Apple 一直在引领设计的潮流,自从 iPhone X 发布之后,"刘海屏" 就一直存在争议。不过不管你怎样,Android 也要...
  • Android刘海适配完全攻略

    千次阅读 2019-06-04 15:50:57
    但用户体验的提升,越来越多的Android厂家逐渐开始在自家旗舰机上使用刘海屏,尤其是 Android P 发布之后,也从系统级支持凹槽屏幕设计。 目前在国内比较常见的就是 OPPO x21 和 华为 P20。对于刘海屏,在享受其...
  • 一、序 Hi,大家好,我是承香墨影!...Apple 一直在引领设计的潮流,自从 iPhone X 发布之后,”刘海屏” 就...不过不管你怎样,Android 也要跻入 “刘海屏” 的行列,尤其是 Android P 发布之后,也从系统级...
  • 刘海屏 萨瑞刘海屏API接口 &lt;meta-data android:name="android.compatible_notch" android:value="true"/&gt; 参考:...
  • android兼容huawei手机刘海屏解决方案

    万次阅读 2018-06-13 18:36:19
    android刘海屏解决方案大全,android huawei刘海屏的适配谷歌在安卓P版本中已经提供了统一的适配方案,可是在安卓O版本上如何适配呢?本文将详细介绍华为安卓O版本刘海屏适配方案。使用华为提供的刘海屏SDK进行适配...
  • 1 Android屏幕适配的度量单位和相关概念 建议在阅读本文章之前,可以先阅读快乐李同学写的文章《Android屏幕适配的度量单位和相关概念》,这篇文章包含了阅读本文的一些基础知识,推荐阅读。 2 Android屏幕适配的...
  • 前言在React Native开发中,我们通常通过StatusBar组件控制状态栏的背景色、文字颜色、显示隐藏:backgroundColor="blue"barStyle="light-content"/>initialRoute={{statusBarHidden: true}}renderScene={(route,...
  • 引言 首先先翻译一下 notch   即 凹痕 的意思,那我们就认为是 ...但是,现在有个问题,就是 google 的 Android 系统中在官方发布齐刘海屏幕方案之前,这些手机厂商已经进行了刘海屏的开发了,所以我们从a...
  • 如果您在改变尺寸的视图中将位图用作背景,您会注意到,当视图根据屏幕尺寸或视图中的内容增大或缩小时,Android 会缩放您的图片。这通常会导致明显的模糊或其他缩放失真。解决方案是使用九宫格位图,这种特殊格式的...
  • Android 刘海屏 适配

    2019-05-12 21:25:31
    Android 刘海屏 适配主要有三种方案 第一,LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 模式 在该模式下,如果当前应用没有设置页面全屏显示,则显示逻辑,与正常情况一样 @Override protected void onCreate(@...
  • 安卓适配刘海屏手机

    2019-05-16 13:52:03
    安卓开发中,我们除了需要适配不同手机的手机分辨率外,还需要适配手机上的虚拟状态栏和导航栏的高度,这其中又不乏有一些手机的手机屏幕格外的与众不同,比如今天我们需要了解的“刘海屏”。什么是“刘海屏”?...
  • ​ uniwebview2是一个在Android和IOS移动端平台下的Unity内置浏览器插件。主要是用来在游戏界面的最上面显示运营开发的web活动或者论坛等网页。 为什么 ​ Unity自带了一个打开网址url的函数接口 Application....

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 307
精华内容 122
关键字:

安卓12开发隐藏屏幕刘海

友情链接: Deca_linux_package.zip