Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 制作布局背景图像的可点击区域_Android_Android Layout_Android Linearlayout_Clickable - Fatal编程技术网

Android 制作布局背景图像的可点击区域

Android 制作布局背景图像的可点击区域,android,android-layout,android-linearlayout,clickable,Android,Android Layout,Android Linearlayout,Clickable,我使用LinearLayout为我的布局设置背景,如下所示: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity" android:layout_width="match_parent" android:layout

我使用
LinearLayout
为我的布局设置背景,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/back">

背面图像是:


如背景图所示,我设计了一些按钮的位置,现在我想让这些区域可以点击,我能做什么?thnx

这也许不能回答您的问题,但我有一个建议:


为什么不将背景设置为蓝色,然后在布局中放置按钮(也许你需要考虑改用TableLayout)?

你可以使用windowManager来实现这一点,但我认为最好像塔诺斯说的那样

//get the instance of WindowManager
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                 <WIDTH OF THE BUTTON>,
                 <HEIGHT OF THE BUTTON>,
                 WindowManager.LayoutParams.TYPE_APPLICATION_PANEL,
                 WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH|
                 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                 PixelFormat.TRANSPARENT);
    //make sure (0;0) is in the top left corner
         params.gravity = Gravity.TOP | Gravity.LEFT;
     params.x = <POSITION X OF THE BUTTON>
     params.y = <POSITION Y OF THE BUTTON>
//make an empty layout so you can get the click event
RelativeLayout layout = new RelativeLayout(this/*or your context here*/);
layout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //do stuff
            }
        });
windowManager.addView(layout, params);
//获取WindowManager的实例
WindowManager WindowManager=(WindowManager)context.getSystemService(context.WINDOW\u服务);
WindowManager.LayoutParams params=新建WindowManager.LayoutParams(
,
,
WindowManager.LayoutParams.TYPE_应用程序_面板,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|WindowManager.LayoutParams.FLAG_WATCH_outh_TOUCH|
WindowManager.LayoutParams.FLAG_不可聚焦| WindowManager.LayoutParams.FLAG_ALT_可聚焦|,
像素格式(透明);
//确保(0;0)位于左上角
params.gravity=gravity.TOP | gravity.LEFT;
参数x=
参数y=
//创建一个空布局,以便可以获取单击事件
RelativeLayout layout=新的RelativeLayout(此/*或此处的上下文*/);
layout.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
//做事
}
});
windowManager.addView(布局、参数);
如果要查看可单击区域的形状,可以在布局中添加与其父级大小匹配的视图