PopupWindow 仿微信點贊和評論彈出,popupwindow贊和

來源:互聯網
上載者:User

PopupWindow 仿點贊和評論彈出,popupwindow贊和

朋友圈的點贊和評論功能,有2個組成部分:左下角的“更多”按鈕;點擊該按鈕後彈出的對話方塊;

PopupWindow,彈出框使用PopupWindow實現,這是點贊和評論的載體,具體要涉及 PopupWindow 點擊非視窗位置和再次點擊消失以及顯示位置的問題(根據相應更多按鈕的位置確定 PopupWindow 的顯示位置

  1 package com.example.cmm.helloworld;  2   3 import android.app.AlertDialog;  4 import android.content.Context;  5 import android.graphics.drawable.BitmapDrawable;  6 import android.support.v7.app.AppCompatActivity;  7 import android.os.Bundle;  8 import android.view.LayoutInflater;  9 import android.view.View; 10 import android.view.ViewGroup; 11 import android.widget.BaseAdapter; 12 import android.widget.ImageView; 13 import android.widget.ListView; 14 import android.widget.PopupWindow; 15 import android.widget.TextView; 16  17 import java.util.ArrayList; 18 import java.util.List; 19  20 public class MainActivity extends AppCompatActivity { 21  22     private PopupWindow mMorePopupWindow; 23     private int mShowMorePopupWindowWidth; 24     private int mShowMorePopupWindowHeight; 25  26     @Override 27     protected void onCreate(Bundle savedInstanceState) { 28  29         super.onCreate(savedInstanceState); 30  31         setContentView(R.layout.activity_main); 32  33         ListView lv = (ListView) findViewById(R.id.listview); 34  35         lv.setAdapter(new MyAdapter(MainActivity.this, getData())); 36  37     } 38  39     private List<Data> getData() { 40  41         List<Data> data = new ArrayList<>(); 42  43         data.add(new Data(R.drawable.xiaona, "薄荷栗", "我學過跆拳道,都給我跪下唱征服", "昨天")); 44         data.add(new Data(R.drawable.xueyan, "欣然", "走遍天涯海角,唯有我家風景最好,啊哈哈", "昨天")); 45         data.add(new Data(R.drawable.leishao, "陳磊_CL", "老子以後要當行長的,都來找我借錢吧,now", "昨天")); 46         data.add(new Data(R.drawable.yuhong, "永恒依然", "房子車子都到碗裡來", "昨天")); 47         data.add(new Data(R.drawable.lanshan, "藍珊", "你們這群傻×,我笑而不語", "昨天")); 48  49         return data; 50     } 51  52     class MyAdapter extends BaseAdapter { 53         private List<Data> listdata; 54         private Context context; 55  56         public MyAdapter(Context context, List<Data> listdata) { 57             this.context = context; 58             this.listdata = listdata; 59         } 60  61         @Override 62         public int getCount() { 63             return listdata.size(); 64         } 65  66         @Override 67         public Object getItem(int arg0) { 68             return listdata.get(arg0); 69         } 70  71         @Override 72         public long getItemId(int arg0) { 73             return arg0; 74         } 75  76         @Override 77         public View getView(int position, View convertView, ViewGroup parent) { 78  79             LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 80             convertView = inflater.inflate(R.layout.listview_item, null, false); 81  82             // 帶賦值地區 83             ImageView ivPortrait = (ImageView) convertView.findViewById(R.id.portrait); 84             TextView tvNickName = (TextView) convertView.findViewById(R.id.nick_name); 85             TextView tvContent = (TextView) convertView.findViewById(R.id.content); 86             TextView tvCreatedAt = (TextView) convertView.findViewById(R.id.created_at); 87             ImageView moreBtn = (ImageView) convertView.findViewById(R.id.more_btn); 88  89             // 賦值 90             Data data = listdata.get(position); 91             ivPortrait.setImageResource(data.getPortraitId()); 92             tvNickName.setText(data.getNickName()); 93             tvContent.setText(data.getContent()); 94             tvCreatedAt.setText(data.getCreatedAt()); 95  96             // 更多按鈕的點擊事件 97             moreBtn.setOnClickListener(new View.OnClickListener() { 98                 @Override 99                 public void onClick(View v) {100                     showMore(v);101                 }102             });103 104             return convertView;105         }106 107         /**108          * 彈出點贊和評論框109          *110          * @param moreBtnView111          */112         private void showMore(View moreBtnView) {113 114             if (mMorePopupWindow == null) {115 116                 LayoutInflater li = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);117                 View content = li.inflate(R.layout.layout_more, null, false);118 119                 mMorePopupWindow = new PopupWindow(content, ViewGroup.LayoutParams.WRAP_CONTENT,120                         ViewGroup.LayoutParams.WRAP_CONTENT);121                 mMorePopupWindow.setBackgroundDrawable(new BitmapDrawable());122                 mMorePopupWindow.setOutsideTouchable(true);123                 mMorePopupWindow.setTouchable(true);124 125                 content.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);126                 mShowMorePopupWindowWidth = content.getMeasuredWidth();127                 mShowMorePopupWindowHeight = content.getMeasuredHeight();128 129                 View parent = mMorePopupWindow.getContentView();130 131                 TextView like = (TextView) parent.findViewById(R.id.like);132                 TextView comment = (TextView) parent.findViewById(R.id.comment);133 134                 // 點贊的監聽器135                 like.setOnClickListener(new View.OnClickListener() {136                     @Override137                     public void onClick(View v) {138 139                         final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);140                         alert.setTitle("點贊");141                         alert.setNegativeButton("取消", null);142                         alert.show();143                     }144                 });145 146                 // 評論的監聽器147                 comment.setOnClickListener(new View.OnClickListener() {148                     @Override149                     public void onClick(View v) {150                         final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);151                         alert.setTitle("評論");152                         alert.setNegativeButton("取消", null);153                         alert.show();154                     }155                 });156             }157 158             if (mMorePopupWindow.isShowing()) {159                 mMorePopupWindow.dismiss();160             } else {161                 int heightMoreBtnView = moreBtnView.getHeight();162 163                 mMorePopupWindow.showAsDropDown(moreBtnView, -mShowMorePopupWindowWidth,164                         -(mShowMorePopupWindowHeight + heightMoreBtnView) / 2);165             }166         }167     }168 169     class Data {170         private int portraitId; // 頭像171         private String nickName; // 暱稱172         private String content; // 說說173         private String createdAt; // 發布時間174 175         public Data(int portraitId, String nickName, String content, String createdAt) {176             this.portraitId = portraitId;177             this.nickName = nickName;178             this.content = content;179             this.createdAt = createdAt;180         }181 182         public int getPortraitId() {183             return portraitId;184         }185 186         public String getNickName() {187             return nickName;188         }189 190         public String getContent() {191             return content;192         }193 194         public String getCreatedAt() {195             return createdAt;196         }197     }198 199 }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.