如何创建一个按钮,它将停留在所有窗口的顶部,并可以点击打开另一个类似的android覆盖活动?
我是android编程新手。我使用系统覆盖和服务创建了一个按钮。现在我想要的是点击那个按钮,然后得到另一个包含5个以上按钮的覆盖窗口。但问题是,该按钮不采取任何点击,不允许我打开另一个覆盖窗口。下面是我用来绘制按钮的xml代码--如何创建一个按钮,它将停留在所有窗口的顶部,并可以点击打开另一个类似的android覆盖活动?,android,overlay,system,transparency,Android,Overlay,System,Transparency,我是android编程新手。我使用系统覆盖和服务创建了一个按钮。现在我想要的是点击那个按钮,然后得到另一个包含5个以上按钮的覆盖窗口。但问题是,该按钮不采取任何点击,不允许我打开另一个覆盖窗口。下面是我用来绘制按钮的xml代码-- 有什么想法吗,伙计们?我的时间不多了。请最好使用片段进行此操作使用片段创建视图,在片段上方覆盖一个按钮。您能用一些详细代码详细说明这个概念吗?@SIVAKUMAR J.我的点子快用完了。如何创建一个片段视图以覆盖所有其他窗口?你知道,我是新手。你能给我看一些代码的例子
有什么想法吗,伙计们?我的时间不多了。请最好使用片段进行此操作使用片段创建视图,在片段上方覆盖一个按钮。您能用一些详细代码详细说明这个概念吗?@SIVAKUMAR J.我的点子快用完了。如何创建一个片段视图以覆盖所有其他窗口?你知道,我是新手。你能给我看一些代码的例子吗?@gandharva。我不能理解这个概念。我需要知道如何实现这个概念。请,任何教程也可以帮助。我可以解释这个概念。假设您有一个根布局,比如说相对布局,它包含一个框架布局(具有全宽和全高)和一个覆盖在右上角的按钮。现在在Activity类中,您掌握了FrameLayout并将其替换为fragment1。如果需要更改屏幕,请将fragment1替换为fragment2。等等如果我想让按钮像屏幕上的facebook聊天图标一样移动,会发生什么?你能给我一个建议吗?@gandharvaI知道有一个类在这种情况下会很有帮助,它是ViewDragHelper。你能给我提供一个示例链接,我可以从中清楚地理解它的用法吗?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:id="@+id/l1"
android:layout_height="fill_parent"
tools:context=".OverlayActivity" >
<Button
android:id="@+id/mainButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"
android:gravity="center_vertical"
android:layout_alignParentRight="true"
android:layout_centerInParent="true"
android:clickable="true"
android:visibility="visible"
android:focusable="true">
</Button>
@Override
public void onCreate() {
super.onCreate();
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View oView = layoutInflater.inflate(R.layout.activity_overlay, null);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
0 | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT);
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(oView, params);
Button button = (Button)oView.findViewById(R.id.mainButton);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(OverlayService.this, "GotCha!!! ", Toast.LENGTH_LONG).show();
}
});
ViewGroup vg = (ViewGroup)oView.findViewById(R.id.l1);
final Display metrics = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
vg.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getActionMasked()){
case MotionEvent.ACTION_MOVE:
int x = (int)event.getX() - offset_x;
int y = (int)event.getY() - offset_y;
int w = metrics.getWidth()-100;
int h = metrics.getHeight()-100;
if(x > w){
x = w;
}
if(y > h){
y = h;
}
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
new ViewGroup.MarginLayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
lp.setMargins(x, y, 0, 0);
selected_item.setLayoutParams(lp);
break;
default:
break;
}
return true;
}
});
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getActionMasked()){
case MotionEvent.ACTION_DOWN:
offset_x = (int)event.getX();
offset_y = (int)event.getY();
selected_item = v;
break;
default:
break;
}
return false;
}
});
}