求教如何实现类似 windows 上置顶的非模态对话框效果

youaresmart 2013-08-30 02:50:26
希望可以实现如下功能,求思路或者方法。。

类似于置顶的浮动窗口,但希望只是一个 app 内部的,不希望是全局的。这个浮动窗口里可以自己设置 layout,浮动窗口本身也可以自由移动.

如图,红色框部分是一个置顶的浮动窗口,按住M部分时,可以随意拖动,右边有3个按钮1,2,3 也可以随意点击。
同时,也可以对后面的activity上的控件进行操作,点击A1,A2按钮也是可以响应的,并且浮动窗口不消失。

思路1, 使用 Dialog, Dialog显示的时候,不知道如何可以让后面Activity 上的控件也响应操作,并且Dialog不消失
思路2, 使用popupWindow, popupWindow似乎是模态的,窗口跳出的时候,后面的控件就不响应了。
思路3, 添加一个View, 但是不知道如何才能实现,在View 上面继续添加控件或者layout


求教,谢谢

...全文
67 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
youaresmart 2013-08-30
引用 1 楼 dani[/quote
[quote=引用 2 楼 DrSmart 的回复:] fragment专门解决该问题的
感谢关注
回复
youaresmart 2013-08-30
[quote=引用 1 楼 danielinbiti 的回复:] 同一界面用多个View吧,方便,用RelativeLayout的方式。再处理手指拖到 如... .. it works, thank you so much!!
回复
DrSmart 2013-08-30
fragment专门解决该问题的
回复
danielinbiti 2013-08-30
同一界面用多个View吧,方便,用RelativeLayout的方式。再处理手指拖到 如 test_float.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff" >
    <Button 
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="测试"
        />

</LinearLayout>
float_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"  
  android:gravity="center"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
	<RelativeLayout 
	    android:id="@+id/rlfloatView"
	        android:layout_width="200px"
	        android:background="#F42B2B"
	        android:layout_gravity="center"
	        android:layout_height="200px" >
	        
	        <Button 
	            android:layout_width="100px"
	            android:layout_height="100px"
	            android:layout_centerInParent="true"
	            />
	</RelativeLayout>
</LinearLayout>
activity
@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//loadText(); //commend by danielinbiti
		layoutFloat();
	}
	private void layoutFloat(){
		setContentView(R.layout.test_float);
		LinearLayout.LayoutParams lp  =
				 new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
		this.addContentView(getFloatView(),lp);
	}
	private void moveFloat(){
		RelativeLayout rl = (RelativeLayout)findViewById(R.id.rlfloatView);
		rl.setTop(rl.getTop()+10);
		rl.setLeft(rl.getLeft()+10);
		rl.setRight(rl.getRight()+10);
		rl.setBottom(rl.getBottom()+10);
	}
        private View getFloatView(){
		return LayoutInflater.from(this).inflate(R.layout.float_layout, null);
	}
        public boolean onTouchEvent(MotionEvent event){
        //点击事件没处理拖动,只是一个方式 comment by danielinbiti 20130830
    	if(event.getAction()==MotionEvent.ACTION_DOWN){
    		this.moveFloat();
    	}
    	return super.onTouchEvent(event);
    }
回复
相关推荐
发帖
Android
创建于2009-10-09

7.8w+

社区成员

移动平台 Android
申请成为版主
帖子事件
创建了帖子
2013-08-30 02:50
社区公告
暂无公告