首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏BennuCTech

    Android屏幕各部分详细介绍

    rootView和contentView 我们知道activity的view树最顶层是rootView,它是一个DocerView,可以通过view.getRootView()或getWindow(). 所以rootView = contentView + NavigatorBar 所以当全屏隐藏通知栏时,rootView就是屏幕大小。 首先上面知道rootView = contentView + NavigatorBar,但是如果NavigatorBar隐藏,rootView和contentView就一样高。 + 通知栏,这种情况再全屏时,realHeight和rootView就相等了(也等于contentView) 而当NavigatorBar显示的时候,rawHeight = rootView + 通知栏 其实可以通过比较rootView和contentView的bottom来判断。

    2.1K20编辑于 2022-02-24
  • 来自专栏Code

    Android视图绑定ViewBinding的使用

    NonNull public final TextView tvContent; private ActivityMainBinding(@NonNull ConstraintLayout rootView , @NonNull ImageView imgShow, @NonNull TextView tvContent) { this.rootView = rootView; } return bind(root); } @NonNull public static ActivityMainBinding bind(@NonNull View rootView String missingId; missingId: { ImageView imgShow = rootView.findViewById(R.id.img_show); )方法,除此之外还有两个inflate()重载方法,一般情况下我们使用这两个方法获得binding类的实例,这些方法都是public static的,通过bind(@NonNull View rootView

    3.3K10发布于 2021-09-07
  • 来自专栏张志敏的技术专栏

    设计模式之中介者模式

    { private readonly IMediator _mediator = new Mediator(); public MediatorDemo() { var rootView = new Grid(); rootView.RowDefinitions.Add(new RowDefinition()); rootView.RowDefinitions.Add (new RowDefinition()); rootView.ColumnDefinitions.Add(new ColumnDefinition()); rootView.ColumnDefinitions.Add (new ColumnDefinition()); rootView.ColumnDefinitions.Add(new ColumnDefinition()); var viewButton (displayLabel); this.Content = rootView; this.Width = 400; this.Height = 200;

    45410发布于 2020-08-10
  • 来自专栏啥都有专栏

    Android软键盘相关使用方法

    return false; } } 监听键盘处于打开还是关闭状态: private void setListenerToRootView() { final View rootView = getWindow().getDecorView().findViewById(android.R.id.content); rootView.getViewTreeObserver(). @Override public void onGlobalLayout() { boolean mKeyboardUp = isKeyboardShown(rootView Toast.LENGTH_SHORT).show(); } } }); } private boolean isKeyboardShown(View rootView (r); DisplayMetrics dm = rootView.getResources().getDisplayMetrics(); int heightDiff = rootView.getBottom

    1.1K30发布于 2020-07-09
  • 来自专栏向治洪

    React Native JSBundle拆包之原理篇

    : mAttachedRootViews) { // 将rootview测量并连接到 catalystInstance attachRootViewToInstance (rootView, catalystInstance); } } ReactMarker.logMarker(ATTACH_MEASURED_ROOT_VIEWS_END) 代码省略 } attachRootViewToInstance方法会将 rootview 与 catalystInstance 进行绑定。 ()); // 设置 rootView final int rootTag = uiManagerModule.addRootView(rootView); rootView.setRootViewTag ()); // 设置 rootView final int rootTag = uiManagerModule.addRootView(rootView); rootView.setRootViewTag

    4K30编辑于 2022-11-30
  • 来自专栏全栈程序员必看

    自定义键盘(二)[通俗易懂]

    (frameLayout, params); focusReplace = new EditText(context); rootView.addView(focusReplace, params2); = 0) { rootView.setTag("move"); //遍历所有的子View,让其向上移动改移动的高度 for (int i = 0; i < rootView.getChildCount (); i++) { if (rootView.getChildAt(i) ! 在键盘隐藏的时候: Object tag = rootView.getTag(); if (tag ! if (rootView.getChildAt(i) !

    1.5K20编辑于 2022-08-04
  • 来自专栏腾讯IVWEB团队的专栏

    React-Native 安卓预加载优化方案

    本文作者:ivweb 朱灵子 React-Native安卓预加载优化方案 本文针对使用React Native开发混合应用的过程中安卓端白屏时间较长的问题,提出了react-native安卓端RootView = null) { return; } ReactRootView rootView = new ReactRootView(activity); rootView.startReactApplication( ((ReactApplication) activity.getApplication( = null) { parent.removeView(rootView); } } catch (Throwable e) { 为了获取并使用预加载之后缓存在本地ArrayMap中的rootView,我们需要侵入activity的创建过程,因此我们需要对React-Native原生库库提供的ReactActivity进行改造,

    6.6K11发布于 2017-07-03
  • 来自专栏鸿蒙开发笔记

    HarmonyOS 开发实践——C-API版本XComponent接入

        surfaceId,    XComponentSurface(      // ···    surfaceId,    moduleName)  );}在XComponentSurface中创建rootView XComponentSurface(//···SurfaceId surfaceId,std::string const& appKey):   //···  m_nativeXComponent(nullptr),  m_rootView m_surfaceHandler(SurfaceHandler(appKey, surfaceId)) {    m_scheduler->registerSurface(m_surfaceHandler);    m_rootView = componentInstanceFactory->create(      surfaceId, facebook::react::RootShadowNode::Handle(), "RootView >(m_rootView);  }startSurface的时候主要做了以下的操作:在ArkTS侧创建XComponent,并设置id,type与libraryname属性。

    42810编辑于 2024-11-18
  • 来自专栏【Android开发基础】

    android Fragment单页面加载,避免重复加载(懒加载)分析

    boolean isFragmentVisible; private boolean isReuseView; private boolean isFirstVisible; private View rootView { super.setUserVisibleHint(isVisibleToUser); //setUserVisibleHint()有可能在fragment的生命周期外被调用 if (rootView ; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { if (rootView rootView : view, savedInstanceState); } @Override public void onDestroyView() { super.onDestroyView initVariable(); } private void initVariable() { isFirstVisible = true; isFragmentVisible = false; rootView

    2.2K10编辑于 2023-02-10
  • 来自专栏向治洪

    仿网易新闻页面效果

     = inflater.inflate(R.layout.fragment_menu, null);           findView(rootView);   return rootView ;       }   private void findView(View rootView) {           mDrawerList = (ListView) rootView.findViewById  = inflater.inflate(R.layout.fragment_right_menu, null);           findView(rootView);   return  rootView;       }   private void findView(View rootView) {       }   }   RightMenuFragment 布局文件 );   return rootView;       }   private void initData() {   for(int i=0;i<titles.length;i++)

    1.7K90发布于 2018-01-29
  • 来自专栏Code

    Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态

    return false; } } 监听键盘处于打开还是关闭状态: private void setListenerToRootView() { final View rootView = getWindow().getDecorView().findViewById(android.R.id.content); rootView.getViewTreeObserver(). @Override public void onGlobalLayout() { boolean mKeyboardUp = isKeyboardShown(rootView Toast.LENGTH_SHORT).show(); } } }); } private boolean isKeyboardShown(View rootView (r); DisplayMetrics dm = rootView.getResources().getDisplayMetrics(); int heightDiff = rootView.getBottom

    9K10发布于 2019-08-07
  • 来自专栏移动端开发

    事件分发机制

    我们来说一下,说说 hitTest 方法,看着下面这张图我们说,比如说你点击了屏幕中 C 的位置: 739006-20160912140718773-1711286254.png     1:点击的位置是在 RootView 当中,RootView 收到hitTest消息, 先调用RootView的pointInside:withEvent方法,判断点击的点是不是在RootView中,上面的例子是在RootView中,所以pointInside :withEvent方法返回YES,接下来会遍历 RootView 的子视图 View1 和 View2。     2:View1 和 View2 都是 RootView 的子视图,都会接收到 hitTest 消息,但记得遍历的顺序是从上到下,所以先判断 View1 界面,这时候调用 View1 的pointInside 3:调用 View2 pointInside:withEvent ,点击的点在 View2 当中,返回 YES,这时候 View2 就像我们刚开始时候的 RootView 一样,同样的过程去遍历它的子势图

    1.3K80发布于 2018-01-09
  • 来自专栏韩曙亮的移动开发专栏

    【错误记录】Android 应用漏洞修复处理 ( 截屏攻击漏洞 | Android 系统的截屏方式 | 通过 adb 命令截屏 |Android 截屏代码 | Android 设置禁止屏幕截屏代码 )

    就是这么实现的 ; 四、Android 截屏代码 在 Android 应用程序中 , 通过代码进行截屏 , 需要如下几个步骤 : 首先 , 获取 Activity 的 根 View 视图 ; View rootView (), rootView.getHeight(), Bitmap.Config.ARGB_8888); 最后 , 将 根 View 组件的内容 , 绘制到 Bitmap 对象上 ; rootView.draw 截屏并保存到指定文件 public static void takeScreenshot(Activity activity) { // 获取屏幕内容的视图 View rootView (); // 创建一个空的Bitmap,大小为屏幕的宽高 Bitmap screenshotBitmap = Bitmap.createBitmap(rootView.getWidth (), rootView.getHeight(), Bitmap.Config.ARGB_8888); // 将屏幕内容绘制到Bitmap上 rootView.draw

    1.5K10编辑于 2024-06-24
  • 来自专栏Android-薛之涛

    Android - 懒加载

    == null){ rootView = inflater.inflate(getLayoutId(), container, false); initView (rootView); } isViewCreated=true;//在onCreateView执行完毕,将isViewCreated改为true; return rootView; } 不同生命周期变量值的变更及涉及的相关代码: onStart @Override public void onStart() { super.onStart == null){ rootView = inflater.inflate(getLayoutId(), container, false); initView(rootView public abstract class BaseLazyLoadFragment extends Fragment { View rootView; /**当前Fragment

    1.6K20发布于 2018-10-15
  • 来自专栏向治洪

    slidingmenu开源效果

    );   return rootView;       }   private void initData() {   for(int i=0;i<titles.length;i++) ) {           mViewPager = (ViewPager) rootView.findViewById(R.id.mViewPager);           mAdapter =  = inflater.inflate(R.layout.fragment_test_content, container, false);            findView(rootView );   return rootView;       }   private void findView(View rootView) {           TextView txtLabel  = (TextView) rootView.findViewById(R.id.txtLabel);           txtLabel.setText(title);       }   }  

    82250发布于 2018-01-29
  • 来自专栏Code

    Android视图绑定ViewBinding的使用

    NonNull public final TextView tvContent; private ActivityMainBinding(@NonNull ConstraintLayout rootView , @NonNull ImageView imgShow, @NonNull TextView tvContent) { this.rootView = rootView; } return bind(root); } @NonNull public static ActivityMainBinding bind(@NonNull View rootView String missingId; missingId: { ImageView imgShow = rootView.findViewById(R.id.img_show); )方法,除此之外还有两个inflate()重载方法,一般情况下我们使用这两个方法获得binding类的实例,这些方法都是public static的,通过bind(@NonNull View rootView

    3.6K20发布于 2020-03-20
  • 来自专栏QQ空间开发团队的专栏

    ReactNative For Android 框架启动核心路径剖析

    上面是2016 React.js Conf FB 工程师分享的RN启动时序图,整个过程比较清晰,先启动终端运行时,随后由终端上下文去启动JS的运行时,进而布局,最后再由终端进行渲染,最后将View添加到RootView /** * ReactInstanceManagerImpl.java */ @Override public void attachMeasuredRootView(ReactRootView rootView = null) { attachMeasuredRootViewToInstance(rootView, mCurrentReactContext.getCatalystInstance() else{ Log.d(ReactConstants.QZONE_REACT_SRC_TAG,"attachMeasuredRootView do nothing"); } } 在绑定完RootView , CatalystInstance catalystInstance) { rootView.removeAllViews(); rootView.setId(View.NO_ID)

    6K00发布于 2016-10-13
  • 来自专栏全栈程序员必看

    android onresume方法,非静态方法’onResume’Android Studio

    非静态方法’onResume’Android Studio 我曾尝试使用rootView,但它没有工作='( public class vod extends Fragment { public static View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.vod, container, false); WebView wv = (WebView)rootView.findViewById(R.id.webView2 www.youtube.com/user/XX”); wv.addJavascriptInterface(new WebSocketFactory(wv), “WebSocketFactory”); return rootView

    68420编辑于 2022-08-22
  • 来自专栏独行猫a的沉淀积累总结

    android 自定义登陆对话框基类封装,且随着软键盘的弹起自动移动位置

    Dialog implements DialogInterface.OnDismissListener, DialogInterface.OnShowListener{ protected View rootView super.onCreate(savedInstanceState); //hideBottomUIMenu(); // showBottomUIMenu(); rootView = getBindingRoot(); if(rootView! =null){ setContentView(rootView); }else{ setContentView(getLayoutResid DataBindingUtil.inflate(LayoutInflater.from(context),R.layout.dialog_login,null,false); return rootView

    89710发布于 2020-12-01
  • 来自专栏JetPack

    浅析 JetPack Compose 是如何安装到View视图上

    //这个rootView就是R.id.content对应的FrameLayout的第一个子view,即ComposeView val rootView = contentChild return self self = parent parent = self.parent } return self } createAndxxxRecomposer(rootView ) 创建一个 Recomposer,并且将其赋值给rootView的扩展变量 compositionContext internal fun createAndInstallWindowRecomposer (rootView: View): Recomposer { //使用默认的工厂创建一个Recomposer val newRecomposer = factory.get() .createRecomposer(rootView) //将其赋值给rootView的compositionContext,而compositionContext也是一个扩展函数,通用使用tag

    1.6K64编辑于 2022-02-09
领券