非全屏Activity实现,以及触摸消息的处理

本次主要针对,非全屏的Activity做些了解;

作为初学者,之前接触到的activity大部分情况,都是全屏显示;

想要实现局部窗口的时候,都是采用悬浮窗来替代activity;直到最近才偶然了解到通过Theme.Dialog也能将activity实现局部现实的效果;

1.利用eclipse生成一个helloword的工程;

2.修改res\values\styles.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="Theme.NotFullActivity" parent="android:style/Theme.Dialog">
        
        <item name="android:windowCloseOnTouchOutside">false</item>
        <item name="android:windowNoTitle">false</item>
        <item name="android:windowIsFloating">true</item>

    </style>

</resources>
android:windowCloseOnTouchOutside    点击activity窗口之外时,是否关闭activity;
android:windowNoTitle  是否有标题栏;
android:windowIsFloating  是否悬浮在其他activity之上;这里必须要设置为true,否则activity显示的时候,窗口虽然不是全屏,但是背景窗口任然是全屏的;

3.修改AndroidManifest.xml的主题风格为刚刚自定义的主题

android:theme="@style/Theme.NotFullActivity"

4.MainActivity.java修改窗口的大小

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        LayoutParams attributes = getWindow().getAttributes();
        
     attributes.dimAmount = 0.0f; //设置窗口之外部分透明程度 attributes.x
= 0; attributes.y = 0; attributes.width = 800; attributes.height = 1024; getWindow().setAttributes(attributes); getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); }
attributes.dimAmount  设置除acitvity之外的窗口,透明程度;
以下是将dimAmount分别设置为:0.0f 和 0.6f的效果对比


getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
这个是去掉activity对窗口之外的触摸消息响应(如果不设置此选项,那么如上图当中的:“浏览器”,“短信”都是不能点击的)

5.layout\activity_main.xml  随便加上俩控件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入:"/>

    <Button 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="111"/>
    
    <Button 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="222"/>

</LinearLayout>

 

附加几个andoird window属性的解释(没有测试过)转自:http://my.oschina.net/tedyin/blog/178376

<item name="windowBackground"> 窗体的背景 </item>
<item name="windowFrame">Dialog 是否有边框 </item>
<item name="windowNoTitle">窗体是否有标题</item>
<item name="windowFullscreen">false</item>        是否为全屏
<item name="windowOverscan">false</item>          是否要求窗体铺满整屏幕               
<item name="windowIsFloating">false</item>        窗体是否浮在下层之上
<item name="windowContentOverlay">@null</item>    设置窗体内容背景
<item name="windowShowWallpaper">false</item>     是否显示壁纸
<item name="windowTitleStyle">@android :style/WindowTitle</item>        窗体的标题栏Style
<item name="windowTitleSize">25dip</item>                              窗体文字大小



 窗体标题栏背景
<item name="windowTitleBackgroundStyle">@android :style/WindowTitleBackground</item>            窗体切换时的动画样式
<item name="android:windowAnimationStyle">@android :style/Animation.Activity</item>

在使用输入法时窗体的适配
<item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
<item name="windowActionBar">false</item>                    是否打开ActionBar
<item name="windowActionModeOverlay">false</item>            这个暂时不知道,希望大神能回答一下。
<item name="windowCloseOnTouchOutside">false</item>          是否再点击外部可关闭

<item name="android:windowIsTranslucent">false</item>    窗体是否半透明
<item name="android:backgroundDimEnabled">false</item>: 背景是否模糊显示

<item name="android:windowContentOverlay">@null</item>  自定义Titlebar时去掉多余的阴影。

 

posted on 2016-08-25 16:53  _seem 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/seem/p/5806298.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过以下步骤实现: 1. 创建一个 Android Activity,将其设置为全屏模式,然后将 flutter 的内容嵌入到该 Activity 中。 2. 在 Android Activity 中,通过 WindowManager 获取系统的 Window 窗口,并将当前的 Activity View 添加到窗口中。 3. 将 Flutter 的 MainActivity 注册为透明主题,并将其置于 Android Activity 之下,这样它就可以在 Android Activity 的底部运行,并且被 Android Activity 的 View 遮盖。 4. 在 Android Activity处理各种事件,例如按键、触摸和屏幕方向等。 具体实现方法可以参考以下步骤: 1. 在 AndroidManifest.xml 文件中注册 Flutter 的 MainActivity,并设置其主题为透明: ``` <activity android:name=".FlutterMainActivity" android:theme="@style/Theme.Transparent"> </activity> ``` 2. 在 Android Activity 的 onCreate() 方法中,将 Flutter 的 View 添加到当前 Activity 的 Window 中: ``` // 创建 FlutterView FlutterView flutterView = Flutter.createView( this, getLifecycle(), "home" ); // 将 FlutterView 添加到当前 Activity 的 Window 中 WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT ); WindowManager wm = getWindowManager(); wm.addView(flutterView, params); ``` 3. 在 Android Activity 的 onDestroy() 方法中,将 Flutter 的 View 从当前 Activity 的 Window 中删除: ``` // 从当前 Activity 的 Window 中删除 FlutterView WindowManager wm = getWindowManager(); wm.removeViewImmediate(flutterView); ``` 4. 在 Android Activity处理各种事件,例如按键、触摸和屏幕方向等。你可以在 Android Activity 中覆盖 onKeyDown()、onTouchEvent() 和 onConfigurationChanged() 方法来处理这些事件。 ``` @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // 处理返回按键事件 return true; } return super.onKeyDown(keyCode, event); } @Override public boolean onTouchEvent(MotionEvent event) { // 处理触摸事件 return super.onTouchEvent(event); } @Override public void onConfigurationChanged(Configuration newConfig) { // 处理屏幕方向变化事件 super.onConfigurationChanged(newConfig); } ``` 这样就可以实现在 Android Activity 中嵌套 Flutter 的全屏显示了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值