我想要这样的事情:
用户个人资料图片是"弹出"在对话框边界。
我已经尝试了所有方法:在阳光下使用每个可能的组合进行剪辑,在对话框之后动态创建视图并将其添加到根内容视图,使用单独的视图并使用Dialog.setCustomTitle加载(),黑客攻击图像onDraw()方法并应用各种边界/位置黑客 - 但无论图像总是被截断并分成两半。
我甚至已经去了解Play商店APK并看看他们是如何做到的。不幸的是,资源文件并没有给予太多帮助,我在Smali找不到任何东西。
有人可以帮忙吗?请...: - (
编辑:我只是专门讨论对话框顶部的用户个人资料图片,而不是对话框本身。
答案 0 :(得分:28)
对话框方法:
Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.mhp);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
mhp.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="57dp"
android:background="#f00"
android:orientation="vertical" >
</LinearLayout>
<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
结果
答案 1 :(得分:4)
看起来他们只是在ImageView中有一个圆形图像,并且从顶部开始有一个边距的布局,这是图像大小的一半,
因此,如果我的图片大小为100px
,我应该使用50dip
在所有屏幕中显示图片
dialog.xml
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="200dip"
android:layout_marginTop="50dip"
android:background="@android:color/holo_green_dark" >
</LinearLayout>
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:contentDescription="@string/app_name"
android:src="@drawable/download" />
然后你就得到了具有背景透明的对话框
Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog);
dialog.setCancelable(false);
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.show();
输出
答案 2 :(得分:3)
为了改善@ MHP的answer,您还可以添加cardView以使对话框的边角变为圆角。
类似的东西:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="57dp"
android:background="@android:color/transparent"
android:orientation="vertical">
<android.support.v7.widget.CardView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/llMainContents"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FAFAFA"
android:orientation="vertical"
app:cardCornerRadius="2dp" />
</LinearLayout>
<ImageView
android:id="@+id/ivIcon"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="8dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:contentDescription="@null"
android:src="@mipmap/ic_launcher" />
</RelativeLayout>
答案 3 :(得分:2)
首先,您应该使对话框的背景透明。 对于DialogFragment:https://stackoverflow.com/a/23729785。 对于AlertDialog:https://stackoverflow.com/a/19175448。 其次,以某种方式组合您的布局:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_marginTop="30dp"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@android:color/darker_gray">
<TextView
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="blablabla"/>
</RelativeLayout>
<ImageView
android:id="@+id/iv1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:src="@drawable/ic_launcher"/>
</RelativeLayout>
其中iv1是标题图像