Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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 - Fatal编程技术网

Android 通过点击聊天头(小部件)保存网络/其他应用程序中的文本选择

Android 通过点击聊天头(小部件)保存网络/其他应用程序中的文本选择,android,Android,我试图做的是类似于Diigo的复制泡沫——一个类似Facebook的聊天头。从现在起称为Chathead,它基本上允许用户在外部应用程序/webb浏览器中选择文本,并通过单击Chathead将所选文本保存到应用程序的记事本活动中: 流程: 1.从另一个应用程序通过共享功能启动小部件 小部件显示1个按钮。单击按钮启动聊天室并关闭第一个小部件 用户现在可以选择一个文本字符串,然后单击聊天头。这将做两件事: a更改聊天头的文本。因此,例如,如果用户选择了et red ball,聊天头现在将显示一个标题

我试图做的是类似于Diigo的复制泡沫——一个类似Facebook的聊天头。从现在起称为Chathead,它基本上允许用户在外部应用程序/webb浏览器中选择文本,并通过单击Chathead将所选文本保存到应用程序的记事本活动中:

流程: 1.从另一个应用程序通过共享功能启动小部件

小部件显示1个按钮。单击按钮启动聊天室并关闭第一个小部件

用户现在可以选择一个文本字符串,然后单击聊天头。这将做两件事:

a更改聊天头的文本。因此,例如,如果用户选择了et red ball,聊天头现在将显示一个标题,称为red ball

b将文本字符串保存到Diigo中我的应用程序的另一个活动中,它将是Diio应用程序中的记事本。我还没有创建这个活动,因此下面没有示例代码

当扔掉聊天头时,就像Facebook聊天头一样。聊天室被摧毁/关闭

到目前为止,我掌握的情况如下:

ANDROIDMANIFEST.XML将“我的应用”添加到用户可以共享其他应用内容的应用列表中。此时,共享到我的应用程序将打开一个正常的活动,而不是小部件。此活动显示一个按钮,单击该按钮将启动聊天室。为了启动聊天室,我还在清单中定义了一个服务

<activity android:name=".NewOrExistingObjectPicker"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>

   <service
        android:name="kowkeekowks.trackabo.Flyer"
        android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <data android:mimeType="text/plain" />
    </intent-filter>
   </service>
java这是我的聊天室。问题:是否可能有一个按钮,用户可以移动和点击-即对onTouch和onClick都有响应?现在我有了连接到WindowManager本身的onTouch方法,我需要在按钮的背景中有一个较大的图像,以便将聊天头拖动到不同的位置

public class Flyer extends Service {
private ImageView chatHead;
private RelativeLayout parentlayout;
private WindowManager windowManager;

private RelativeLayout border;
int imageid = 1;
int nameid = 3;
Button button;

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    super.onCreate();

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    chatHead = new ImageView(this);

    chatHead.setImageResource(R.drawable.floating);

    chatHead.setId(imageid);

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.LEFT;
    params.x = 0;
    params.y = 100;

    parentlayout = new RelativeLayout(this);
    button = new Button(this);
    button.setText("Address");

    final RelativeLayout.LayoutParams params_imageview = new 
RelativeLayout.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT);

    params_imageview.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

    final RelativeLayout.LayoutParams params_name = new RelativeLayout.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT);

    params_name.addRule(RelativeLayout.ALIGN_RIGHT, imageid);
    params_name.addRule(RelativeLayout.ALIGN_TOP, imageid);


    final RelativeLayout.LayoutParams params_button = new RelativeLayout.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT
    );
    params_button.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

    parentlayout.addView(chatHead, params_imageview);
    parentlayout.addView(button, params_button);


    windowManager.addView(parentlayout, params);
    windowManager.updateViewLayout(parentlayout, params);

    parentlayout.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO: Set the selected string as button text. Save the selected string to another Activity in my app. 

        }
    });


    try {
        parentlayout.setOnTouchListener(new View.OnTouchListener() {
            private WindowManager.LayoutParams paramsF = params;
            private int initialX;
            private int initialY;
            private float initialTouchX;
            private float initialTouchY;

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        initialX = paramsF.x;
                        initialY = paramsF.y;
                        initialTouchX = event.getRawX();
                        initialTouchY = event.getRawY();
                        break;
                    case MotionEvent.ACTION_UP:
                        break;
                    case MotionEvent.ACTION_MOVE:
                        paramsF.x = initialX + (int) (event.getRawX() - initialTouchX);
                        paramsF.y = initialY + (int) (event.getRawY() - initialTouchY);
                        windowManager.updateViewLayout(parentlayout, paramsF);
                        break;
                }
                return false;
            }
        });
    } catch (Exception e) {
        // TODO: handle exception
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (parentlayout!= null) windowManager.removeView(parentlayout);
}
非常感谢你对我的帮助! 苏珊娜

public class Flyer extends Service {
private ImageView chatHead;
private RelativeLayout parentlayout;
private WindowManager windowManager;

private RelativeLayout border;
int imageid = 1;
int nameid = 3;
Button button;

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    super.onCreate();

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    chatHead = new ImageView(this);

    chatHead.setImageResource(R.drawable.floating);

    chatHead.setId(imageid);

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.LEFT;
    params.x = 0;
    params.y = 100;

    parentlayout = new RelativeLayout(this);
    button = new Button(this);
    button.setText("Address");

    final RelativeLayout.LayoutParams params_imageview = new 
RelativeLayout.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT);

    params_imageview.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

    final RelativeLayout.LayoutParams params_name = new RelativeLayout.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT);

    params_name.addRule(RelativeLayout.ALIGN_RIGHT, imageid);
    params_name.addRule(RelativeLayout.ALIGN_TOP, imageid);


    final RelativeLayout.LayoutParams params_button = new RelativeLayout.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT
    );
    params_button.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

    parentlayout.addView(chatHead, params_imageview);
    parentlayout.addView(button, params_button);


    windowManager.addView(parentlayout, params);
    windowManager.updateViewLayout(parentlayout, params);

    parentlayout.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO: Set the selected string as button text. Save the selected string to another Activity in my app. 

        }
    });


    try {
        parentlayout.setOnTouchListener(new View.OnTouchListener() {
            private WindowManager.LayoutParams paramsF = params;
            private int initialX;
            private int initialY;
            private float initialTouchX;
            private float initialTouchY;

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        initialX = paramsF.x;
                        initialY = paramsF.y;
                        initialTouchX = event.getRawX();
                        initialTouchY = event.getRawY();
                        break;
                    case MotionEvent.ACTION_UP:
                        break;
                    case MotionEvent.ACTION_MOVE:
                        paramsF.x = initialX + (int) (event.getRawX() - initialTouchX);
                        paramsF.y = initialY + (int) (event.getRawY() - initialTouchY);
                        windowManager.updateViewLayout(parentlayout, paramsF);
                        break;
                }
                return false;
            }
        });
    } catch (Exception e) {
        // TODO: handle exception
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (parentlayout!= null) windowManager.removeView(parentlayout);
}