【Code-Snippet】Activity & Window

1. ConfigChanges

这是在AndroidManifest中设置的,效果是监听各种导致Activity重绘的参数的变化。例如,当设置了android:configChanges="orientation|screenSize"的时候,当横屏竖屏切换的时候,如果没有设置这个属性,Activity会重绘,若设置了,Activity不会重绘,而是会调用onConfigurationChanged方法。

<activity
    android:name=".Activity.LoadingActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:screenOrientation="portrait"
    android:theme="@style/FullscreenTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
复制代码
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}
复制代码
  • orientation : 横屏竖屏的切换
  • keyboardHidden :键盘的隐藏
  • screenSize :屏幕大小的变化

2. ScreenOrientation

指定Activity的屏幕方向

<activity
    android:name=".Activity.LoadingActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:screenOrientation="portrait"
    android:theme="@style/FullscreenTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
复制代码
  • landscape:限制界面为横屏,旋转屏幕也不会改变当前状态。
  • portrait:限制界面为竖屏,旋转屏幕也不会改变当前状态。
  • sensor:根据传感器定位方向,旋转手机90度,180,270,360,界面都会发生变化。
  • sensorLandscape:(横屏的旋转,不会出现竖屏的现象)根据传感器定位方向,旋转手机180度界面旋转。一般横屏游戏会是这个属性。
  • sensorPortrait:(竖屏的旋转,不会出现横屏的现象)根据传感器定位方向,旋转手机180度界面会旋转。
  • unspecified:由系统选择显示方向,不同的设备可能会有所不同。(旋转手机,界面会跟着旋转)
  • user:用户当前的首选方向。
  • nosensor:不由传感器确定方向。旋转设备的时候,界面不会跟着旋转。初始界面方向由系统提供。

3. Style-Windows设置

指定Activity的Style,或者是其他的,dialog也可以。

<activity
    android:name=".Activity.LoadingActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:screenOrientation="portrait"
    android:theme="@style/FullscreenTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
复制代码
<style name="DialogTransparent" parent="@android:style/Theme.Dialog">
    <item name="windowBackground"> 窗体的背景 </item>
    <item name="windowFrame">Dialog 是否有边框 </item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Activity</item>
    <item name="windowNoTitle">窗体是否有标题</item>
    <item name="windowFullscreen">false</item>  #是否为全屏
    <item name="windowShowWallpaper">false</item>     #是否显示壁纸
    <item name="windowTitleSize">25dip</item>        # 窗体文字大小
    <item name="windowCloseOnTouchOutside">false</item>  #是否再点击外部可关闭
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>
复制代码

属性说明:

  • windowBackground : 背景
  • windowAnimationStyle :窗口/Activity的动画
  • windowNoTitle :窗口有无Title
  • windowContentOverlay :当窗口加载完成前,制定最开始的图片。@null是没有。相信每个app都需要一个闪屏页 就是一个开始页面 对于新手来说 可能就直接一个activity 弄个背景图片 ,细心地同学也许会发现 每次启动 应用程序的时候 一开始显示的不是那个设置的背景图片 而是白色或黑色背景 可能时间很短这是为什么呢。再看看其他市面上的应用都是一开始就是显示背景图片 而没有白色背景 研究了很久 其实 设置一下主题就行了 给activity设置主题其中有一个属性
  • windowIsFloating : 是否浮现在activity之上
  • windowIsTranslucent :是否半透明
  • backgroundDimEnabled :是否允许背景灰暗

4. ActivityForResult用法

1.在 MainActivity 中调用:

startActivityForResult(new Intent(MainActivity.this,CaptureActivity.class),0x01);
复制代码
  • 参数一:是一个Intent
  • 参数二:是一个约定的结果代号

2.在 MainActivity 中重写 onActivityResult 方法

其中,resultCode 是之前约定的结果代号,data 为第二个页面传回来的数据。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode==0x01) {
        Log.e("---","jkfjlds");
    }
    super.onActivityResult(requestCode, resultCode, data);
}
复制代码

3.在第二个页面,使用:

//这里的 intent 是返回的 Intent
//这里的 setResult 是设置返回结果的 Intent,其还带有,约定的结果代号。
Intent intent = new Intent();
intent.putExtra("result",result_p);
setResult(0x01,intent);
finish();
复制代码

转载于:https://juejin.im/post/5c9107e3f265da60f16317b6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值