Android 仿微信点赞和评论弹出框
Android仿微信点赞和评论弹出框
在 Android 开发中,模仿微信朋友圈的点赞和评论弹出框是一个常见需求。下面我们将详细描述如何实现这个功能。
一、布局设计首先,我们需要设计一个弹出框的布局。这里我们使用了一个 `LinearLayout` 作为弹出框的根容器,包含两个子控件:点赞和评论区域,以及关闭按钮。
```xml
android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal"> android:layout_width="24dp" android:layout_height="24dp" android:src="@drawable/ic_like" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:textColor="333333" /> android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal"> android:layout_width="0dp" android:layout_weight="1" android:layout_height="40dp" android:hint="输入评论..." /> android:layout_width="24dp" android:layout_height="24dp" android:src="@drawable/ic_close" />
```
二、弹出框的控制接下来,我们需要实现弹出框的显示和隐藏。我们使用 `PopupWindow` 类来实现这个功能。
```java// PopupWindowHelper.javapublic class PopupWindowHelper {
private Context context;
private View contentView;
public PopupWindowHelper(Context context, View contentView) {
this.context = context;
this.contentView = contentView;
}
public void showPopupWindow(View anchorView) {
// 创建PopupWindow对象 PopupWindow popupWindow = new PopupWindow(contentView,
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
// 设置背景颜色 popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
// 设置焦点监听器 contentView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// 弹出框获得焦点时,显示它 popupWindow.showAsDropDown(anchorView);
} else {
// 弹出框失去焦点时,隐藏它 popupWindow.dismiss();
}
}
});
// 显示弹出框 popupWindow.showAsDropDown(anchorView);
}
public void dismissPopupWindow() {
contentView.clearFocus();
}
}
```
三、发评论和关闭按钮的点击事件最后,我们需要实现发评论和关闭按钮的点击事件。
```java// MainActivity.javapublic class MainActivity extends AppCompatActivity {
private PopupWindowHelper popupWindowHelper;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化PopupWindowHelper对象 popupWindowHelper = new PopupWindowHelper(this, findViewById(R.id.popup_layout));
// 绑定关闭按钮的点击事件 findViewById(R.id.close_iv).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
popupWindowHelper.dismissPopupWindow();
}
});
// 绑定发送评论按钮的点击事件 findViewById(R.id.send_btn).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
String comment = ((EditText) findViewById(R.id.comment_et)).getText().toString();
Toast.makeText(MainActivity.this, "评论:" + comment, Toast.LENGTH_SHORT).show();
popupWindowHelper.dismissPopupWindow();
}
});
}
// 弹出框的显示和隐藏 public void showPopupWindow(View view) {
popupWindowHelper.showPopupWindow(view);
}
public void dismissPopupWindow() {
popupWindowHelper.dismissPopupWindow();
}
}
```
通过以上步骤,我们实现了一个简单的弹出框,包含点赞和评论区域,以及关闭按钮。用户可以在弹出框中输入评论,并点击发送按钮发送评论。