如何在android中建立一个像弹出窗口一样的facebook评论?
Posted
技术标签:
【中文标题】如何在android中建立一个像弹出窗口一样的facebook评论?【英文标题】:how to build a facebook comment like popup in android? 【发布时间】:2015-01-03 21:24:09 【问题描述】:我想制作一个类似于 facebook android 应用程序的弹出框,它会在按下 cmets 按钮时打开。我想为我的应用程序设计相同类型的弹出窗口。谁能告诉我它是如何构建的,或者只是指导我设计这种东西的要求是什么。
谢谢。
【问题讨论】:
在对话框中使用 ***.com/questions/13341560/… 和edittext
【参考方案1】:
你可以通过
来实现弹出窗口
这里是在活动或片段上调用弹出窗口的过程。 Facebook 使用 Rebound Library 制作精彩的挥杆动画。但我为此使用了普通的 xml 动画文件。
popup_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_>
<LinearLayout
android:id="@+id/headerLayout"
android:layout_
android:layout_
android:minHeight="?attr/actionBarSize"
android:orientation="horizontal"
android:layout_alignParentTop="true"
android:gravity="center">
<TextView
android:layout_gravity="center"
android:layout_
android:layout_
android:text="Some One and 20 Others Like this"
android:textColor="@color/black"
android:textStyle="bold"
android:layout_margin="5dp"/>
</LinearLayout>
<ListView
android:id="@+id/commentsListView"
android:layout_
android:layout_
android:layout_below="@id/headerLayout"
android:layout_above="@+id/comment_section"
android:layout_marginBottom="0dp"/>
<LinearLayout
android:id="@+id/comment_section"
android:layout_
android:layout_
android:minHeight="50dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="5dp"
android:orientation="horizontal"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center"
>
<ImageView
android:layout_
android:layout_
android:maxHeight="30dp"
android:minHeight="20dp"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher"
/>
<EditText
android:id="@+id/writeComment"
android:hint="Write a Comment"
android:layout_
android:layout_
android:maxLines="2"
android:focusable="true"
android:layout_marginLeft="2dp"
android:textSize="12sp"
android:textColor="@color/black"
android:background="#00000000"/>
</LinearLayout>
</RelativeLayout>
style.xml 中的弹出动画
<!-- PopuP Enter Exit Animation -->
<style name="PopupAnimation" parent="Widget.AppCompat.PopupWindow">
<item name="android:windowEnterAnimation">@anim/bottom_up</item>
<item name="android:windowExitAnimation">@anim/bottom_down</item>
</style>
调用 PopUpWindow 的 Java 方法
// call this method when required to show popup
public void onShowPopup(View v)
LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// inflate the custom popup layout
inflatedView = layoutInflater.inflate(R.layout.popup_layout, null,false);
// find the ListView in the popup layout
ListView listView = (ListView)inflatedView.findViewById(R.id.commentsListView);
LinearLayout headerView = (LinearLayout)inflatedView.findViewById(R.id.headerLayout);
// get device size
Display display = getWindowManager().getDefaultDisplay();
final Point size = new Point();
display.getSize(size);
// mDeviceHeight = size.y;
DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
// fill the data to the list items
setSimpleList(listView);
// set height depends on the device size
popWindow = new PopupWindow(inflatedView, width,height-50, true );
// set a background drawable with rounders corners
popWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.popup_bg));
popWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
popWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
popWindow.setAnimationStyle(R.style.PopupAnimation);
// show the popup at bottom of the screen and set some margin at bottom ie,
popWindow.showAtLocation(v, Gravity.BOTTOM, 0,100);
在布局中添加列表的方法
void setSimpleList(ListView listView)
ArrayList<String> contactsList = new ArrayList<String>();
for (int index = 0; index < 10; index++)
contactsList.add("I am @ index " + index + " today " + Calendar.getInstance().getTime().toString());
listView.setAdapter(new ArrayAdapter<String>(MainActivity.this,
R.layout.popup_list_item, android.R.id.text1, contactsList));
动画文件 bottom_up.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="75%p" android:toYDelta="0%p"
android:fillAfter="true"
android:duration="400"/>
</set>
bottom_down.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="0%p" android:toYDelta="100%p" android:fillAfter="true"
android:interpolator="@android:anim/linear_interpolator"
android:duration="400" />
</set>
【讨论】:
谢谢你,我喜欢你的实现,但你能帮忙刷一下吗? @Pamparanpa 你有没有找到通过向下滑动关闭弹出窗口的任何解决方案? 嘿伙计们 .. 我刚刚找到了通过滑动关闭的解决方案 ... 我使用了这个库 github.com/r0adkll/Slidr .. 和 nestedScrollview 来监听 recycleview 位置 .. 谁能解释一下 R.layout.popup_list_item, android.R.id.text1。 text1 应该是布局的一部分(popup_list_item)@anuj Sharma以上是关于如何在android中建立一个像弹出窗口一样的facebook评论?的主要内容,如果未能解决你的问题,请参考以下文章