Просмотр за пределами диалоговых окон

Мне нужно что-то вроде этого:

playstorereview

Изображение профиля пользователя "выскакивает" по границам диалогов.

Я пробовал все: возиться с отсечением с любой возможной комбинацией под солнцем, динамически создавая представление после диалога и добавляя его в представление корневого содержимого, используя отдельное представление и загрузку с помощью Dialog.setCustomTitle(), взламывая методы Images onDraw() и применяя всевозможные оценки/позиционные хаки --- но независимо от того, какое изображение всегда получает обрезание и разделение пополам.

Я даже дошел до декомпиляции Play Store APK и посмотрел, как они это сделали. К сожалению, файлы ресурсов не дают многого, и я не могу найти что-либо в Smali.

Может ли кто-нибудь помочь? Пожалуйста...: - (

EDIT. Я просто говорю об изображении профиля пользователя в верхней части диалогового окна, а не о самом диалоге.

Ответ 1

диалоговый метод:

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>  

результат
Result picture

Ответ 2

Похоже, что они просто имеют округленное изображение внутри 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();

ВЫХОД

enter image description here

Ответ 3

Во-первых, вы должны сделать фон вашего диалога прозрачным. Для DialogFragment: fooobar.com/questions/495301/.... Для AlertDialog: fooobar.com/questions/94156/.... Во-вторых, объедините свои макеты таким образом, как это:

<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 - изображение заголовка

Ответ 4

Чтобы улучшить @MHP , вы также можете добавить 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>

Результат: введите описание изображения здесь