当前位置: 首页 > 知识库问答 >
问题:

如何在Android中创建popover视图,如Facebook评论?

濮阳宏硕
2023-03-14

我想知道是否有人知道如何在Facebook Android应用程序中创建类似Facebook的popover视图以供评论。

这就是我的意思:

除了您可以拖动以取消它的句柄之外,它是原生的Android UI控件还是Facebook自己实现的?

共有3个答案

易骁
2023-03-14

您可以使用弹出窗口来完成此操作。http://developer.android.com/reference/android/widget/PopupWindow.html

当然,您需要自己设置样式并填写弹出窗口的内容。你可以从如何制作圆角布局中获得一些造型创意。。?

楚岳
2023-03-14

编辑:

事实上,尽管我使用了DialogFragment,但我很确定他们的弹出窗口没有使用DialogFragment(甚至根本没有对话框!)。原因是调整大小功能。如果这是您想要的,那么您不能使用DialogFragment。您只需将新视图添加到布局中即可。看起来facebook还有另一个视图,它位于你的墙和一个略微半透明的假弹出窗口之间,并监听点击以消除该视图。像这样的东西需要一些实际的努力和时间来构建,所以我不会为您制作这个。如果你对此有任何疑问,请告诉我,我可能会引导你找到你想要的解决方案。

原件:

我为您编写了弹出窗口:

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState == null) {
            F1.newInstance().show(getFragmentManager(), null);
        }
    }

    public static class F1 extends DialogFragment {

        public static F1 newInstance() {
            F1 f1 = new F1();
            f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Dialog);
            return f1;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            // Remove the default background
            getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

            // Inflate the new view with margins and background
            View v = inflater.inflate(R.layout.popup_layout, container, false);

            // Set up a click listener to dismiss the popup if they click outside
            // of the background view
            v.findViewById(R.id.popup_root).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dismiss();
                }
            });

            return v;
        }
    }
}

popup\u布局。xml:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:id="@+id/popup_root">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="72dp"
        android:layout_marginBottom="72dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:padding="20dp"
        android:clickable="true"
        android:background="@drawable/dialog_background">

        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textColor="#000"
            android:text="Content goes here!" />

    </FrameLayout>

</FrameLayout>

和dialog\u背景。xml(进入分辨率/可绘制):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="#FFF" />
    <corners android:topLeftRadius="20dp" android:topRightRadius="20dp"
         android:bottomLeftRadius="20dp" android:bottomRightRadius="20dp"/>
    <stroke android:color="#7F7F7F" android:width="1dp" />
</shape>

看起来是这样的:

只需添加您的视图内容,您就可以开始了!

孔星宇
2023-03-14

创建类似弹出窗口视图的最佳方法是使用弹出窗口,因为您可以将弹出窗口放置在任何特定视图位置(或屏幕的中央/顶部/底部)。您还可以使用DialogFragment实现相同的UI,但不能定位在特定的视图位置。

我这里有一个完整的工作代码https://gist.github.com/libinbensin/67fcc43a7344758390c3

第1步:创建您的自定义布局,例如,Facebook有一个带有ListViewEditTextHeader TextView

步骤2:将布局设置为弹出窗口

将布局充气以设置

LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View inflatedView = layoutInflater.inflate(R.layout.fb_popup_layout, null,false);

这个Layout有一个ListView,所以在布局中找到ListView并填充数据。您可以在此处拥有自己的视图

ListView listView = (ListView)inflatedView.findViewById(R.id.commentsListView);
listView.setAdapter(new ArrayAdapter<String>(TryMeActivity.this,
        R.layout.fb_comments_list_item, android.R.id.text1,contactsList));

现在,创建一个具有特定高度和宽度的PopupWindow实例。我更喜欢根据设备设置大小。

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);

popWindow = new PopupWindow(inflatedView, size.x - 50,size.y - 500, true );

设置弹出窗口的焦点。

popWindow.setFocusable(true);

使其可在弹出区域外部触摸时关闭弹出窗口

popWindow.setOutsideTouchable(true);

现在,用一个可绘制窗口为弹出窗口设置背景。可绘制的具有圆角半径的矩形。

  popWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.fb_popup_bg));

最后。在所需位置显示PopupWindow。我让它显示在屏幕的底部,带有一些X和Y位置

popWindow.showAtLocation(v, Gravity.BOTTOM, 0,150);  // 0 - X postion and 150 - Y position

您还可以设置一个动画以在PopUpWindow出现和消失时使用

popWindow.setAnimationStyle(R.anim.animation); // call this before showing the popup
 类似资料:
  • 我想要这个曲线幻灯片在我的应用程序

  • 问题内容: 我完全不了解这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。尽管我不断收到错误,但openssl无法识别为内部或外部命令。问题是,即使我可以解决这个问题,我该怎么办?之后怎么办? 问题答案: 这是你需要做的 从代码 提取中下载openSSl 。在C:/中创建一个文件夹-OpenSSL,然后在此处复制提取的代码。 检测debug.keystore文件路径。如果找不

  • 我试图在android中创建一个具有圆形边缘的视图。到目前为止,我找到的解决方案是定义一个具有圆角的形状,并将其用作该视图的背景。 下面是我所做的,定义一个可绘制的,如下所示: 现在我用它作为我的布局背景,如下所示: 这工作非常好,我可以看到视图有圆形的边缘。 但是我的布局中有许多其他的子视图,比如ImageView或MapView。当我在上面的布局中放置时,图像的角落不会被裁剪/裁剪,而是显示为

  • 我正在Springboot应用程序中的Mongo Db中创建一个视图。下面是相同的代码 我想添加allowDiskUse:true条件,因为我得到以下错误 堆栈跟踪:|/java.lang.Exception:[profile_event_view@stage[副本集:]]数据库错误!|___/Mongo服务器错误(MongoQueryException):查询失败,错误代码为292,错误消息为“

  • 问题内容: 我想使列表视图中的所有列表项都打开到一个新页面中,因此每个列表视图项都打开到一个我可以使用的新黑色页面上。我根本不知道该如何实现。我已经连续搜索了几个小时,找不到解决方案的答案。如果有人可以显示和/或解释如何执行此操作而不是提供链接,将不胜感激,但是两者之一都很有帮助。 到目前为止,这是我的代码: 这是在我的string.xml中 这是在我的activity_main.xml中。 我应

  • 我想创建一个应用程序,它可以将屏幕行为记录为视频,并以编程方式保存在设备上。有人能帮我吗?