Android 通过点击聊天头(小部件)保存网络/其他应用程序中的文本选择
我试图做的是类似于Diigo的复制泡沫——一个类似Facebook的聊天头。从现在起称为Chathead,它基本上允许用户在外部应用程序/webb浏览器中选择文本,并通过单击Chathead将所选文本保存到应用程序的记事本活动中: 流程: 1.从另一个应用程序通过共享功能启动小部件 小部件显示1个按钮。单击按钮启动聊天室并关闭第一个小部件 用户现在可以选择一个文本字符串,然后单击聊天头。这将做两件事: a更改聊天头的文本。因此,例如,如果用户选择了et red ball,聊天头现在将显示一个标题,称为red ball b将文本字符串保存到Diigo中我的应用程序的另一个活动中,它将是Diio应用程序中的记事本。我还没有创建这个活动,因此下面没有示例代码 当扔掉聊天头时,就像Facebook聊天头一样。聊天室被摧毁/关闭 到目前为止,我掌握的情况如下: ANDROIDMANIFEST.XML将“我的应用”添加到用户可以共享其他应用内容的应用列表中。此时,共享到我的应用程序将打开一个正常的活动,而不是小部件。此活动显示一个按钮,单击该按钮将启动聊天室。为了启动聊天室,我还在清单中定义了一个服务Android 通过点击聊天头(小部件)保存网络/其他应用程序中的文本选择,android,Android,我试图做的是类似于Diigo的复制泡沫——一个类似Facebook的聊天头。从现在起称为Chathead,它基本上允许用户在外部应用程序/webb浏览器中选择文本,并通过单击Chathead将所选文本保存到应用程序的记事本活动中: 流程: 1.从另一个应用程序通过共享功能启动小部件 小部件显示1个按钮。单击按钮启动聊天室并关闭第一个小部件 用户现在可以选择一个文本字符串,然后单击聊天头。这将做两件事: a更改聊天头的文本。因此,例如,如果用户选择了et red ball,聊天头现在将显示一个标题
<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);
}