中配置 找到你所指定的activity中加上android:screenOrientation属性,它有以下几个参数: unspecified–默认值,由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向...如果用户旋转设备这屏幕会横竖屏切换 nosensor–忽略物理感应器,这样就不会随着用户旋转设备而更改了(”unspecified”设置除外) 移除 View 的背景色 setBackgroundResource...stateAlwaysHidden 当该Activity主窗口获取焦点时,软键盘总是被隐藏的,不管是确认导航到该Activity还是Activity被覆盖后显示出来。...stateAlwaysVisible 当该Activity主窗口获取焦点时,软键盘总是显示的,不管是确认导航到该Activity还是Activity被覆盖后显示出来。...系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。
改变 G 分量对应的系数 g 的值,增加到2倍,这样在矩阵运算后,图像会整体色调偏绿显示。 ?...MainActivity 类这里有一个地方要注意的就是,我们无法在 onCreate() 方法中获得 4x5 矩阵视图的宽高值,所以通过 View 的 post() 方法,在视图创建完毕后获得其宽高值。...的宽高 int mEtWidth; int mEtHeight; //保存20个edittext EditText[] mEts = new EditText[20];...RGB色是如何旋转的呢,首先用R、G、B三色建立三维坐标系,如下: ? 这里,我们把一个色彩值看成三维空间里的一个点,色彩值的三个分量可以看成该点对应的坐标(三维坐标)。...在图中,我们可以看到,在旋转后,原 R 在 R 轴的分量变为:R*cosα,且原G分量在旋转后在 R 轴上也有了分量,所以我们要加上这部分分量,因此最终的结果为 R’=R*cosα + G*sinα,同理
SensorManager对象,SensorManager对象代表系统的传感器管理服务; (2)调用SensorManager的getDefaultSensor(int type)方法来获取指定类型的传感器; (3)通常选择在Activity...0-180);第二个角度:表示手机顶部或尾部翘起的角度(x轴旋转-180-180); 第三个角度:表示手机左侧或者右侧翘起的角度(y轴旋转-90-...单位摄氏度; 光传感器(Light):代表手机设备所处环境的光的强度 压力传感器(Pressure):代表手机设备周围的压力的大小 Android系统对所有的传感器的处理方式完全相同,一个程序来介绍上面这些传感器的用法...该程序界面只是提供了几个文本框,分别用于显示不同的传感器数据。...); etPressure.setText(sb.toString()); break; } } } 上面的程序先在Activity的onCreate()方法里获取SensorManager对象,然后在Activity
在非触摸屏设备中接收事件和处理响应的控件是具有焦点(Focused)的控件。一个窗口中一个时间内只能有一个具有焦点的控件。...在早期具有滚轮设备的android系统中以及现在的智能TV电视应用中视图的焦点控制就非常重要了。...而在触摸设备上通常默认情况下只有EditText控件才具有焦点,而我们通常会遇到的一个问题就是当进入一个具有EditText的界面时键盘就会自动弹出,而且有时候可能无法消失,但需求可能是进入时不弹出键盘...比如某个视图层次下的根视图ROOT下有A,B,C三个子视图,而B下面又有B1,B2,B3三个子视图,而这时候B3是具有焦点的子视图,那么在B中的mFocued保存的是B3,而ROOT下的mFocued保存的是...通过setDescendantFocusability和requestFocus方法的配合就可以解决那种只有一个EditText且一进入就自动键盘弹出的问题。
Activity状态保存的基本使用 学习Activity的生命周期,我们知道,当Activity进入到paused或者stopped状态后,这个Activity的状态仍然保存着。...method stub super.onRestoreInstanceState(state); } 几乎Android框架中的每一个widget都适当的实现了这个方法,这样任何可见的UI更改活动在重新创建时自动保存和恢复...例如,EditText部件保存用户输入的任何文本,CheckBox部件保存是否被选中。我们唯一要做的工作就是提供一个惟一的ID(android:ID属性)为每个widget保存其状态。...尽管系统帮我们实现了UI组建的自动保存和恢复,但是有时候也需要去保存和恢复一些其他的成员变量。...所以我们可以用下面的办法,来测试Activity的状态保存。 就是旋转设置,让屏幕方向变化(当然前提是你没有锁定设置的旋转功能,Activity也没有设置屏幕方向)。
在真实设备上运行 如果有一个真实的Android设备,以下的步骤可以使我们在自己的设备上安装和运行应用程序: 手机设置 把设备用USB线连接到计算机上。...权重的值指的是每个部件所占剩余空间的大小,该值与同级部件所占空间大小有关。这就类似于饮料的成分配方:“两份伏特加酒,一份咖啡利口酒”,即该酒中伏特加酒占三分之二。...让输入框充满整个屏幕的宽度 为让 EditText 充满剩余空间,做如下操作: 在 content_my.xml 文件里,设置 [EditText>] 的 layout_weight 属性值为 1。...设置 EditText 权重后的效果如图 3: ? 图 3 因 EditText 窗体小组件被设置了全部权重,所以占据了 LinearLayout 的剩余空间。...(建立简单的用户界面)后,我们已经拥有了显示一个activity(一个界面)的app(应用),该activity包含了一个文本字段和一个按钮。
DialogFragment在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。...2、 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。...newFragment) .commit(); } } 可以看到,我们通过读取R.bool.large_layout,然后根据得到的布尔值,...左边为模拟器,右边为我的手机~~~~~ 7、屏幕旋转 当用户输入帐号密码时,忽然旋转了一下屏幕,帐号密码不见了~~~是不是会抓狂 传统的new AlertDialog在屏幕旋转时,第一不会保存用户输入的值...而通过DialogFragment实现的对话框则可以完全不必考虑旋转的问题。
,但是手机屏幕转过来后,我的EditText还是能显示123456。...简单来说:super.onSaveInstanceState(outState);它会帮我们保存Activity的相关视图,然后分别调用每个View的onSaveInstanceState方法,比如EditText...在自己的类中的这个方法就是保存了输入的内容。...就是会调用自己的这个方法,然后再把保存好的内容再赋值进去。...会自动恢复滚动位置等)。
1.TimePicker控件 最近感觉每个开发平台的控件基本都差不多,在Android中控件的事件和.net控件直接写事件有一定的区别,net事件可以直接界面进行事件的绑定哈。...在页面拖入控件后,默认是显示系统时间的。...android:layout_alignLeft="@+id/textView1" 6 android:layout_alignTop="@+id/textView1" /> 该控件可以通过...7 EditText myEdit=(EditText)findViewById(R.id.editText1); 8 myEdit.setText("当前时间为:...(1)在anim文件中建立一个set类型的xml文档。 1 <?xml version="1.0" encoding="utf-8"?
应用背景 在实际自动化项目运行过程中,很多时候App可以会出现各种异常,为了更好的定位问题,除了捕捉日志我们还需要对运行时的设备状态来进行截屏。从而达到一种“有图有真相”的效果。...截图方法 方法1 save_screenshot() 该方法直接保存当前屏幕截图到当前脚本所在文件位置。.../images/login.png') 实践案例 测试场景 在考研帮App登录页面输入用户名和密码之后截图,分别保存到当前文件和指定的文件路径。...from find_element.capability import driver driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext...('com.tal.kaoyan:id/login_password_edittext').send_keys('zxw2018') driver.save_screenshot('login.png
有两种方法可以将EditText显示为密码:在布局 XML 中静态指定此值,或通过从程序中切换显示来动态指定此值。...如果这两种情况中的任何一种,有所区分并显示在登录失败消息中,则攻击者可以猜测指定的 ID 是否存在。 为了阻止这种猜测,这两种情况不应该在登录失败消息中区分,并且该消息应该按照下面的方式显示。...自动登录功能 存在一个功能,可以完成成功登录过程一次后,通过省略下次登录的 ID /密码输入来执行自动登录。自动登录功能可以省去复杂的输入。...只有在恶意第三方造成的损害可以接受时,或者只有在可以采取足够安全措施的情况下,才能使用自动登录功能。例如,在网上银行应用的情况下,当设备由第三方运营时,可能会造成财务损失。...所以在这种情况下,与自动登录功能配套的安全措施是必需的。存在一些可能的应对措施,例如【在付款过程等财务流程前需要重新输入密码】,【设置自动登录时,请求用户注意并提示用户锁定设备】等。
系统会向该方法传递一个Bundle 对象,你可以在其中使用putString 和 putInt 等方法以键-值对形式保存有关 Activity 状态的信息。...如果没有状态信息需要恢复,则传递给您的Bundle是空值(如果是首次创建该 Activity,就会出现这种情况)。...Android 框架中几乎每个小部件都会根据需要实现此方法,以便在重建 Activity 时自动保存和恢复对 UI 所做的任何可见更改。...例如,EditText 小部件保存用户输入的任何文本,CheckBox小部件保存复选框的选中或未选中状态。您只需为想要保存其状态的每个小部件提供一个唯一的 ID(通过 android:id 属性)。...如果小部件没有 ID,则系统无法保存其状态。(默认情况下系统不会恢复储存成员值(变量)) 你只需旋转设备,让屏幕方向发生变化,就能有效地测试您的应用的状态恢复能力。
离开app并且一段时间后返回,不会丢失用户的使用进度。 设备发生屏幕旋转时不会crash或者丢失用户的使用进度。 然而,其中只有三个状态是静态的,这三个状态下activity可以存在一段比较长的时间。...仅仅当确认用户期待那些改变能够被自动保存的时候(例如正在撰写邮件草稿),才把那些数据存到永久存储 。...系统同样保存了每一个在布局中的视图的当前状态,如果用户在EditText组件中输入了text,它会被保存,因此不需要保存与恢复它。...默认情况下, 系统使用 Bundle 实例来保存每一个View(视图)对象中的信息(例如输入EditText 中的文本内容)。...这个方法会默认保存Activity视图的状态信息,如在 EditText 组件中的文本或 ListView 的滑动位置。
处理屏幕旋转导致的重建 当屏幕发生旋转时,如果我们没有在AndroidManifest.xml中,对其configChanges属性进行声明,那么就会导致Activity进行重建,此时,就需要重新加载Activity...在EditText控件中输入后,当屏幕旋转后,里面的内容就会不见,activity进行了重建,但是checkBox不会重建。...单例对象在需要的时候初始化 在使用单例时,我们应当仅在使用到该单例时才去初始化它,这里我们可以通过“静态初始化会在类被加载时触发”这一原理,来实现懒加载。...当我们需要将某些任务的生命周期和Activity分离开来,那么一般会使用Service,但是Service就需要我们进行手动管理,如果忘记,那么将会导致额外的内存占用,并且拥有Service进程的oom_adj值一般会高于没有...对于一些短时的后台任务,我们可以考虑采用IntentService,它的onHandleIntent回调是在异步线程中执行的,并且任务执行完毕后,该Service会自动销毁,不需要手动管理。
ViewModel 被设计用来以与生命周期相关的方式保存和管理 UI 相关的数据。ViewModel 允许数据在例如屏幕旋转这样的配置更改后依然保留。...如果你想让用户在应用运行在后台三个小时候后再返回到与之前完全相同的状态,你也需要将数据持久化。这是因为一旦你的活动进入后台,此时如果你的设备运行在低内存的情况下,你的应用进程是可以被终止的。...如果你允许在类似设备突然关机的情况下丢失数据,你可以在 'onStop()'回调的时候将其保存,这个方法在 activity 一进入后台的时候就会被调用。...注意,很多 UI 数据会自动地被保存和恢复: “该方法的默认实现保存了关于 activity 的视图层次状态的临时信息,例如 EditText 控件中的文本或者 ListView 控件中的滚动条位置。”...使用 CursorLoader 后,如果数据库其中的一个值发生改变,Loader 就会自动触发数据重新加载并且更新 UI。 ?
"false" //不能呼输入; android:focusableInTouchMode="false" //没有onTouch焦点,不可点击; 我的代码,失去焦点,点击后没有软键盘 EditText...--自动完成--> android:inputType="textAutoCorrect" 在EditText的右边输出一个drawable--> android:drawableTop="@drawable/xxx" 在EditText的左边输出一个drawable--> android:drawablePadding 该控件该怎样显示,例如设置以下值: "start"省略号显示在开头, "end"省略号显示在结尾,"middle"省略号显示在中间, "marquee"以跑马灯的方式显示(动画横向移动
stub super.onRestoreInstanceState(state); } 几乎Android框架中的每一个widget都适当的实现了这个方法,这样任何可见的UI更改活动在重新创建时自动保存和恢复...例如,EditText部件保存用户输入的任何文本,CheckBox部件保存是否被选中。我们唯一要做的工作就是提供一个惟一的ID(android:ID属性)为每个widget保存其状态。...尽管系统帮我们实现了UI组建的自动保存和恢复,但是有时候也需要去保存和恢复一些其他的成员变量。...所以我们可以用下面的办法,来测试Activity的状态保存。 就是旋转设置,让屏幕方向变化(当然前提是你没有锁定设置的旋转功能,Activity也没有设置屏幕方向)。...() 只有在系统即将要自动清理销毁Activity或Fragment前才会调用, 换句话说:你自己finish,他肯定不会调用的,必须是系统自己触发的, 比如 1, 由于重力感应 手机从竖屏变为横屏
2、Instrumentation 该框架基于JUnit,因此既可以直接使用Junit 进行测试。...二、测试应用 AndroidJUnit基于JUnit,使得我们既可以在JVM上运行本地单元测试(local unit tests),也可以在Android设备上进行仪器测试(instrumented tests...可以在编写集成和功能 UI 测试来自动化用户交互时,或者在测试具有模拟对象无法满足的 Android 依赖项时使用这些测试。...不过,由于 Gradle 会自动在构建时生成该文件,因此它在您的项目源集中不可见。您可以在必要时(例如需要为 minSdkVersion 指定其他值或注册测试专用的运行侦听器时)添加自己的清单文件。...> 做完以上工作后,我们一起来创建并运行Espresso测试。
整个过程 在移动设备上安装atx-agent(守护进程),随后atx-agent启动uiautomator2服务(默认7912端口)进行监听 在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的...首先设备连接到PC,并能够adb devices发现该设备。...Windows系统可以使用命令在桌面创建一个快捷方式: python -m weditor –shortcut # 或weditor --shortcut 在windows cmd中执行上述命令后,会在桌面上创建一个快捷方式...python -m weditor 启动后浏览器会自动打开一个网页,如下图: 重点说下这个部分 如何与手机连接起来呢?...我们可以看到手机元素的各种定位方法,在UI自动化写代码的时候,真的是非常的方面,手机页面和weditor是实时同步的。
领取专属 10元无门槛券
手把手带您无忧上云