android 朋友圈和qq空间同步或qq空间的评论布局 怎么实现 csdn

开发中分享操作往往经常遇到,而且还是一些比较大型一定的平台,如微信,QQ,微博等。写这篇博客主要是把微信的的分享和相关操作表达一下,分享可以包含:文字,视频,音乐,图片等分享。
分享可以有 分享给好友,群,朋友圈等。
效果如下图:(注意:功能根据自己的需要选择就可以了)
&&&&&&&&&&&&
准备工作:
微信开放平台创建应用,操作步骤请看博客:
成功之后得到AppId,放入项目中。
public class Constants {
// APP_ID 替换为你的应用从官方网站申请到的合法appId==
public static final String APP_ID = &wx1b73fd7b49ffa027&;
public static class ShowMsgActivity {
public static final String STitle = &showmsg_title&;
public static final String SMessage = &showmsg_message&;
public static final String BAThumbData = &showmsg_thumb_data&;
public class AppRegister extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
final IWXAPI api = WXAPIFactory.createWXAPI(context, null);
// 将该app注册到微信
api.registerApp(Constants.APP_ID);
文本分享代码:
// 初始化一个WXTextObject对象
WXTextObject textObj = new WXTextObject();
textObj.text =
// 用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textO
// 发送文本类型的消息时,title字段不起作用
msg.title = &Will be ignored&;
msg.description =
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction(&text&); // transaction字段用于唯一标识一个请求
req.message =
* 判断是否是朋友圈
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneS
// 调用api接口发送数据到微信
api.sendReq(req);
图片分享代码:(包含 本地图片,SD卡图片,网络图片)
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_img);
WXImageObject imgObj = new WXImageObject(bmp);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgO
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
// 设置所图;
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction(&img&);
req.message =
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneS
api.sendReq(req);
音乐分享代码
WXMusicObject music = new WXMusicObject();
music.musicUrl=&http://staff2./~wdw/softdown/index.asp/.ANDY.mp3&;
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject =
msg.title = &标题&;
msg.description = &描述信息&;
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb);
msg.thumbData = Util.bmpToByteArray(thumb, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction(&music&);
req.message =
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneS
api.sendReq(req);
视频分享代码
WXVideoObject video = new WXVideoObject();
video.videoUrl = &url....mp4&;//mp4视频路径
WXMediaMessage msg = new WXMediaMessage(video);
msg.title = &标题&;
msg.description = &描述信息&;
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb); msg.thumbData = Util.bmpToByteArray(thumb, true); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction(&video&); req.message = req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneS api.sendReq(req);
网页分享代码:
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = &&;
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = &标题&;
msg.description = &描述信息&;
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb);
msg.thumbData = Util.bmpToByteArray(thumb, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction(&webpage&);
req.message =
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneS
api.sendReq(req);
本文已收录于以下专栏:
相关文章推荐
现在我们给应用添加一个功能,能在应用内将消息分享给微信好友,或者分享到朋友圈中。
我们首先来到微信开放平台官网,跟着组织走,官网指南:
https://open./cgi-b...
前言在移动互联网浪潮中,联网APP已经把单机拍死在沙滩上,很多公司都希望自家应用能够有一套帐号系统,可是许多用户却并不一定买账:我凭啥注册你家应用的帐号?微博,微信,QQ几乎成了每个人手机中的必装应用...
近期项目增加分享(微信分享:好友及朋友圈)功能。主要用的就是WX的分享功能,于是就去微信官方开发者平台查看如何接入SDK。通过查看之后发现微信文档对于Android方面写的过于简单了。除了教授如何接入...
Android应用打包、多渠道打包、查看Android应用签名
在前面有一张已经分析过怎么用官方的demo分享微信信息了,在这里我就不再多说,其中关于在自己应用分享说得很简单,本文作者也是经过一番折腾才弄成功,为了以后让大家都少走弯路,决定在这里从头到尾介绍怎么在...
用微信提供的SDK来实现分享,步骤如下:
1.从https://open.下载Android相关的jar包,将libammsdk.jar加入到项目中。
2. 微信分享的核心类...
1.通过微信官网获得APPID和.jks文件。
(.jks文件的获得是通过AS中的Build-Generate Signed APK-如果已有.jks就选择已有的路径,对应好两次的密码。 )
Android微信登录以及分享集成步骤
前言实现分享到微信好友和朋友圈的功能其实很简单,官方文档其实还是比较详细的,只是在创建应用的过程比较费(dan)事(teng),好在微信的审核效率还可以,所以这篇博客简单为大家介绍下这个功能的实现,同...
他的最新文章
讲师:韦玮
讲师:陈守元
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)这就是一个底部弹出对话框,仿QQ空间微信朋友圈底部弹出对话框,用了一些普通的UI优化,以及添加了表情框等,需要用到类似功能的自行下载源码集成。
适用于新手及新学习Android的码友们,老玩家当然也可以看看,这个还是挺简单挺实用的,在后面会简略介绍实现方法及源代码,同时博客的最后还提供源代码和图片等资源github下载地址。
本部分内容主要讲解底部弹出框的实现,不讲解表情栏部分,需要查看表情栏部分实现的请查看这篇文章:
--------------------------------------------------------------------------------------------------------------------
Android实用视图动画及工具系列之六:通用表情栏,仿QQ微信聊天弹出表情选框:
--------------------------------------------------------------------------------------------------------------------
步骤一:创建外观样式
这个底部弹出对话框只用了两张图片,其他的都是通过drawable shape绘制实现,两个表情图:(其他图片资源在源代码内,需要的自行下载):
项目结构如下,其中faceview为表情栏部分,单独封装为模块,此处不用理会:
在drawable下新建chatform_face_selector.xml,表情符号点击样式:
&?xml version=&1.0& encoding=&UTF-8&?&
xmlns:android=&/apk/res/android&&
&item android:state_focused=&true& android:state_pressed=&true& android:drawable=&@drawable/chatform_flag_face2& /&
&item android:state_focused=&false& android:state_pressed=&true& android:drawable=&@drawable/chatform_flag_face2& /&
&item android:state_focused=&false& android:drawable=&@drawable/chatform_flag_face& /&
&/selector&
在drawable文件夹下新建chatform_sendmsgbg_selector.xml,回复按钮样式:
&?xml version=&1.0& encoding=&utf-8&?&
&selector xmlns:android=&/apk/res/android& &
&item android:state_focused=&true&&
&solid android:color=&#008ee0& /&
android:width=&1dp&
android:color=&#008ee0& /&
&corners android:radius=&3dp&/&
android:top=&1dp&
android:bottom=&1dp&
android:left=&1dp&
android:right=&1dp&/&
&item android:state_pressed=&true&&
&solid android:color=&#008ee0& /&
android:width=&1dp&
android:color=&#008ee0& /&
&corners android:radius=&3dp&/&
android:top=&1dp&
android:bottom=&1dp&
android:left=&1dp&
android:right=&1dp&/&
&solid android:color=&#00a2ff& /&
android:width=&1dp&
android:color=&#00a2ff& /&
&corners android:radius=&3dp&/&
android:top=&1dp&
android:bottom=&1dp&
android:left=&1dp&
android:right=&1dp&/&
&/selector&
在drawable下新建chatform_textinput_shape.xml,编辑框样式:
&?xml version=&1.0& encoding=&utf-8&?&
&shape xmlns:android=&/apk/res/android& &
&solid android:color=&#FFFFFF& /&
android:radius=&1dp&
android:topLeftRadius=&3dp&
android:bottomLeftRadius=&3dp&
android:topRightRadius=&3dp&
android:bottomRightRadius=&3dp&
android:width=&0.1dp&
android:color=&#BDC7D8& /&
android:left=&1dp&
android:top=&1dp&
android:right=&1dp&
android:bottom=&1dp&/&
步骤二:编写对话框布局和自定义对话框
在layout文件夹下创建dialog_replyform.xml,代码如下(com.jaiky.test.faceview.FaceView为引用自表情库,如果不需要可屏蔽):
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:orientation=&vertical& &
android:layout_width=&match_parent&
android:layout_height=&0.1dp&
android:background=&#b4b4b4& /&
&LinearLayout
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:background=&#f9f9f9&
android:gravity=&center_vertical&
android:orientation=&horizontal&
android:paddingBottom=&7dp&
android:paddingTop=&7dp& &
&ImageView
android:id=&@+id/dialog_reply_ivFace&
android:layout_width=&27dp&
android:layout_height=&27dp&
android:layout_marginLeft=&10dp&
android:layout_marginRight=&10dp&
android:layout_gravity=&center_vertical&
android:clickable=&true&
android:contentDescription=&@null&
android:src=&@drawable/chatform_face_selector& /&
android:id=&@+id/dialog_reply_etContent&
android:layout_width=&0dp&
android:layout_height=&wrap_content&
android:layout_weight=&1&
android:background=&@drawable/chatform_textinput_shape&
android:layout_gravity=&center_vertical&
android:gravity=&center_vertical&
android:hint=&填写回复内容...&
android:inputType=&text&
android:paddingBottom=&7dp&
android:paddingLeft=&10dp&
android:paddingRight=&10dp&
android:paddingTop=&7dp&
android:textColorHint=&#aaaaaa&
android:textSize=&13sp& /&
&LinearLayout
android:id=&@+id/dialog_reply_llBtnReply&
android:layout_width=&wrap_content&
android:layout_height=&30dp&
android:layout_gravity=&center_vertical&
android:layout_marginLeft=&10dp&
android:layout_marginRight=&10dp&
android:background=&@drawable/chatform_sendmsgbg_selector&
android:clickable=&true&
android:gravity=&center&
android:orientation=&horizontal&
android:paddingLeft=&8dp&
android:paddingRight=&8dp&
android:visibility=&visible& &
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:gravity=&center_horizontal&
android:text=&回复&
android:textColor=&#ffffff&
android:textSize=&13sp& /&
&/LinearLayout&
&/LinearLayout&
&com.jaiky.test.faceview.FaceView
android:id=&@+id/face_view&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:visibility=&gone& &
&/com.jaiky.test.faceview.FaceView&
&/LinearLayout&
在styles.xml文件中添加如下样式:
&!-- 无标题无背景对话框主题 --&
&style name=&MyNoFrame_Dialog& parent=&android:Theme.Dialog&&
&item name=&android:windowBackground&&@android:color/transparent&/item&
&item name=&android:windowNoTitle&&true&/item&
新建类ReplayDialog,继承自Dialog:
package com.jaiky.test.
import android.app.D
import android.content.C
import android.os.B
import android.os.H
import android.view.G
import android.view.W
import android.view.WindowManager.LayoutP
import android.view.inputmethod.InputMethodM
import android.widget.EditT
import android.widget.ImageV
import android.widget.LinearL
import com.jaiky.test.faceview.FaceV
* 回复对话框
* @author Jaiky
PS: Not easy to write code, please indicate.
public class ReplyDialog extends Dialog {
private FaceView faceV
private EditText etC
private ImageView ivF
private LinearLayout llBtnR
private Context mC
public ReplyDialog(Context context) {
super(context, R.style.MyNoFrame_Dialog);
mContext =
private ReplyDialog(Context context, int theme) {
super(context, theme);
mContext =
private void init() {
setContentView(R.layout.dialog_replyform);
// 设置宽度
Window window = getWindow();
window.setGravity(Gravity.BOTTOM);
LayoutParams lp = window.getAttributes();
lp.width = LayoutParams.MATCH_PARENT;
window.setAttributes(lp);
ivFace = (ImageView) findViewById(R.id.dialog_reply_ivFace);
etContent = (EditText) findViewById(R.id.dialog_reply_etContent);
llBtnReply = (LinearLayout) findViewById(R.id.dialog_reply_llBtnReply);
//此处绑定表情栏
faceView = (FaceView) findViewById(R.id.face_view);
faceView.setEdit(etContent);
faceView.setBtnView(ivFace);
// 弹出键盘
etContent.setFocusable(true);
etContent.setFocusableInTouchMode(true);
etContent.requestFocus();
new Handler().postDelayed(new Runnable() {
public void run() {
InputMethodManager inputManager = (InputMethodManager) mContext
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(etContent, 0);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public ReplyDialog setContent(String content) {
etContent.setText(content);
public ReplyDialog setHintText(String hint) {
etContent.setHint(hint);
public String getContent() {
return etContent.getText().toString();
public ReplyDialog setOnBtnCommitClickListener(
android.view.View.OnClickListener onClickListener) {
llBtnReply.setOnClickListener(onClickListener);
步骤三:Demo测试修改布局和主类
修改activity_main.xml内容如下:
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout
xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:id=&@+id/activity_main&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&
android:paddingBottom=&@dimen/activity_vertical_margin&
android:paddingLeft=&@dimen/activity_horizontal_margin&
android:paddingRight=&@dimen/activity_horizontal_margin&
android:paddingTop=&@dimen/activity_vertical_margin&
tools:context=&com.jaiky.test.replydialog.MainActivity&&
android:id=&@+id/tvShow&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:textSize=&20dp&
android:text=&Hello World!&/&
android:id=&@+id/btn1&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&回复&/&
&/LinearLayout&
修改MainActiivty类内容如下(注意包名):
package com.jaiky.test.
import android.os.B
import android.support.v7.app.AppCompatA
import android.text.H
import android.util.L
import android.view.V
import android.widget.B
import android.widget.TextV
import com.jaiky.test.faceview.FaceImageG
public class MainActivity extends AppCompatActivity {
Button btn1;
TextView tvS
FaceImageGetter mFaceImageG
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.btn1);
tvShow = (TextView) findViewById(R.id.tvShow);
mFaceImageGetter = new FaceImageGetter(this);
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final ReplyDialog replyDialog = new ReplyDialog(MainActivity.this);
replyDialog.setHintText(&回复某人的评论...&)
.setOnBtnCommitClickListener(new View.OnClickListener() {
public void onClick(View v) {
replyDialog.dismiss();
Log.d(&XXX&, replyDialog.getContent());
tvShow.setText(Html.fromHtml(replyDialog.getContent(), mFaceImageGetter, null));
--------------------------------------------------------------------------------------------------------------------
获取源代码及资源文件:
--------------------------------------------------------------------------------------------------------------------
欢迎转载,但请保留文章原始出处
本文已收录于以下专栏:
相关文章推荐
模仿微信朋友圈、QQ说说的评论的人,点赞人可点击效果,非原创这里只是转载一个github上的开源库
TextViewSpanClickable
Android实用视图动画及工具系列之六:通用表情栏,仿QQ微信聊天表情库,仿QQ微信聊天表情库框,这个目前市面上已经很多类似的功能了,我就不做多的累赘,本表情栏的优势在于便于集成,而且适用于多种环境...
手机QQ空间浏览好友动态时,可以直接对动态评论,点击某条评论,动态列表自动滚动,使输入框刚好在该评论下面,而不会覆盖住评论内容。如下图所示,
首先要实现输入框刚好在输入面板上面,且动态列表不会...
今天有一个同学问我,怎么使安卓应用的状态栏透明话,便想起将我这个简单的方法介绍给大家。
Google 在Android 4.4时给全屏阅读文字或玩游戏这种情景增加了透明状态栏和透明导航栏的功能,网上大...
Android实用视图动画及工具系列之四:多状态CheckBox,可设置大小尺寸和设置不可用的复选框,大家都知道在Android5.0以前,Android自带的checkbox不可以通过width和h...
小鹿又来了。。最近小鹿特别忙,忙到没时间发表博客了
参考地址:/itshare_240.html
本博客只是用来学习和自己方便阅读,我在网上找了很多类似的觉得很多都不符合条件,无意间看到了一个很不错的例子,就是上面的那...
如题,这是公司项目的一个功能模块,先上个效果图:
其次大致说说原理:
1,首先判断输入的字符,是否包含表情的文字,比如   这个表情对应的文件名为 emoji_1.png,它对应的文字描述 : [...
他的最新文章
讲师:韦玮
讲师:陈守元
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)方便使用的评论工具类,而且能监听到小键盘消失事件,能返回小键盘的高度,追踪评论位置。
只是评论功能,木有表情等其他的东东(表情目前都用VP+GV写的,正在尝试使用一个VIew来做分页)
具体文件中有注释,效果看下qq空间的评论就好。
工具使用方式
//第一种姿势
public void onItemClick(AdapterView&?& parent, final View view, int posi, long id) {
talkPopWindow = new TalkPopWindow(activity, new TalkPopWindow.OnSendMessage() {
public void onSendMessage(String msg) {
//发送消息哦
public void onRefreshlayout(int variation,int containerHeight) {
//在这里获得小键盘活动的高度之后,计算控件需要滑动的距离
talkPopWindow.calculateExternalOffset(dongtai_lv,view,variation,0);
talkPopWindow.pop();
//第二种姿势
View.OnClickListener onClickListener = new View.OnClickListener() {
public void onClick(final View v) {
if(talkPopWindow == null){
talkPopWindow = new TalkPopWindow(activity, new TalkPopWindow.OnSendMessage() {
public void onSendMessage(String msg) {
//发送你的消息
public void onRefreshlayout(int variation,int containerHeight) {
//在这里获得小键盘活动的高度之后,计算控件需要滑动的距离
//因为这里不是在onItemClick中,所以要拿到现在的item布局,需要按照层次获取父布局:我这里是两层
//当然你也可以使用别的方法,这里只是需要拿到item来计算高度
talkPopWindow.calculateExternalOffset(dongtai_lv,(View)(v.getParent().getParent()),variation,0);
talkPopWindow.pop();
工具类代码: &
package com.zhrt.dp.duanpian.liver_plugin.
import android.app.A
import android.content.C
import android.graphics.drawable.BitmapD
import android.os.H
import android.os.M
import android.view.G
import android.view.V
import android.view.ViewTreeO
import android.view.WindowM
import android.view.inputmethod.InputMethodM
import android.widget.B
import android.widget.EditT
import android.widget.ListV
import android.widget.PopupW
import com.zhrt.dp.duanpian.R;
* 用来显示聊天的布局,同时防止小键盘弹出导致播放内容高度的改变
* 为了保证每次都能正确监听小键盘的弹出与消失。pop不能复用,每次都要new哦
* Created by Eleven on .
public class TalkPopWindow {
public TalkPopWindow(Activity activity, OnSendMessage onSendMessage){
this.activity =
this.onSendMessage = onSendM
* 因为使用场景不同,所以这里可以用style标志来选取不同的布局,客官当然可以传id
* @param activity
* @param onSendMessage
* @param style
public TalkPopWindow(Activity activity, OnSendMessage onSendMessage, int style){
this.activity =
this.onSendMessage = onSendM
this.style =
OnSendMessage onSendM
//业务引用
EditT//通用输入器
B//通用发送按钮
PopupW//popWindow
当然也可以换成dialog,popwindow:不会引起视频的暂停等,但是没有复制粘贴功能;dialog:会引起视频的暂停,但是可以调起系统的复制粘贴功能
int style = 0;//输入部分样式
//兼容其他用途,设置syle
View view =//popView
View tempView =//输入View的布局
//逻辑属性
int containerHeight = 0;//tempView的高度:
int height = 0;//布局的高度
boolean toShow =//是不是第一次尝试显示,与显示机制有关
int[] location = new int[2];
public void pop(){
view = activity.getLayoutInflater().inflate(R.layout.pop_layout,null);
pw = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT);
if(style == 0){//区分style
et = (EditText) view.findViewById(R.id.et_danmuEdit);
bt = (Button) view.findViewById(R.id.bt_sendDanmu);
view.findViewById(R.id.danmutLinear).setVisibility(View.VISIBLE);
view.findViewById(mentLinear).setVisibility(View.GONE);
tempView = view.findViewById(R.id.danmutLinear);
et = (EditText) view.findViewById(mentEdit);
bt = (Button) view.findViewById(mentButton);
view.findViewById(R.id.danmutLinear).setVisibility(View.GONE);
view.findViewById(mentLinear).setVisibility(View.VISIBLE);
tempView = view.findViewById(mentLinear);
tempView.measure(0,0);
containerHeight = tempView.getMeasuredHeight();//计算输入布局的高度。
//监听布局的变化
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
et.getLocationOnScreen(location);
if(height == 0 && location[1] &0 ){
height = location[1];
int diff = height - location[1];
if(toShow && diff == 0){
if(diff & 0){
onSendMessage.onRefreshlayout(diff,containerHeight);
pw.dismiss();
view.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
pw.dismiss();
et.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
showSoftKeyboard(et,activity);
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(et.getText().toString().trim().length() & 0) {
onSendMessage.onSendMessage(et.getText().toString().trim());
et.setText(&&);
et.requestFocus();
et.setFocusable(true);
et.requestFocus();//获取焦点,光标出现
showSoftKeyboard(et,activity);
pw.setBackgroundDrawable(new BitmapDrawable());
pw.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
pw.setFocusable(true);
pw.setTouchable(true);
pw.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
pw.showAsDropDown(new View(activity), Gravity.BOTTOM, 0, 0);
pw.setOnDismissListener(new PopupWindow.OnDismissListener() {
public void onDismiss() {
onSendMessage.onRefreshlayout(0,containerHeight);
//万一某些机型小键盘自己关不掉,这里手动关掉即可
handler.sendEmptyMessageDelayed(1,200);//延迟再调一下小键盘,有的机型自己起不来
public static void showSoftKeyboard(EditText editText, Context context) {
if (editText != null && context != null) {
InputMethodManager imm = (InputMethodManager) context
.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, 0);
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what){
et.setFocusable(true);
et.requestFocus();//获取焦点,光标出现
showSoftKeyboard(et,activity);
* 用于计算需要便宜的高度
ListView listV
int screenHeight = 0;
int[] a = new int[2];
View ItemV
int softInputHeight = 0;
int changeHeight = 0;
int itemHeight = 0;
* @param scrollView
整体的滑动view //这里可以换成别的View 一些View没有smooth方法。客官可以自己换
* @param ItemView
需要定位的View,可以是itemView内部view
* @param softInputHeight
小键盘高度
* @param etrOffset
额外偏移高度。看你心情喽
public void calculateExternalOffset(ListView scrollView, View ItemView, int softInputHeight, int etrOffset) {
if (softInputHeight == 0) {
listView = scrollV
this.ItemView = ItemV
this.softInputHeight = softInputH
screenHeight = AppUtils.getScreenDispaly(activity)[1];
ItemView.getLocationOnScreen(a);
itemHeight = a[1]+ItemView.getHeight();
changeHeight = softInputHeight + containerH
scrollView.smoothScrollBy(itemHeight + changeHeight - screenHeight,100);
* 也可以使用scrollto,这样就不用算时间了。距离过长,时间太短,有可能滑动不彻底
* @param distance
public int suggestDuration(int distance){
distance = Math.abs(distance);
if(distance&300){
return 100;
if(distance&1200){
return 500;
if(distance&2000){
return 800;
return 1000;
public void dimiss(){
if(pw != null && pw.isShowing()){
pw.dismiss();
public interface OnSendMessage{
* @param msg
void onSendMessage(String msg);
* 小键盘顶起后引起的高度变化
* @param variation
小键盘的高度
* @param containerHeight
输入框的高度
请根据个人口味加料
void onRefreshlayout(int variation,int containerHeight);
资源地址:&http://download.csdn.net/detail/kumuip/9706913
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:607次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 qq空间怎么布局营销 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信