I tried the below code to create a popup window with a tooltip-like arrow on top. picture attached.
But I am getting something different as a result.
popup inflater :
LayoutInflater inflater = (LayoutInflater)
getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.popup, null);
mypopupWindow = new PopupWindow(view,500, RelativeLayout.LayoutParams.WRAP_CONTENT, true);
mypopupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
mypopupWindow.showAsDropDown(v,-153,0);
popup layout :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="50dp"
android:layout_marginTop="50dp"
android:background="@drawable/shadow_recta"
android:orientation="vertical"
android:gravity="center">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="text long text" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"/>
</LinearLayout>
drawable file :
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="top|center_horizontal" >
<rotate android:fromDegrees="0" android:toDegrees="-45"
android:pivotX="0%" android:pivotY="50%" >
<shape android:shape="rectangle">
<size android:width="24dp" android:height="24dp" />
<stroke android:color="@android:color/holo_blue_bright" android:width="1dp"/>
</shape>
</rotate>
</item>
<item>
<shape android:shape="rectangle">
<size android:width="206dp" android:height="76dp" />
<solid android:color="@android:color/white" />
<stroke android:color="@android:color/holo_blue_bright" android:width="1dp"/>
<corners android:radius="2dp" />
</shape>
</item>
<item android:gravity="top|center_horizontal">
<rotate
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fromDegrees="-45"
android:pivotX="-50%"
android:pivotY="60%"
android:toDegrees="35">
<shape android:shape="rectangle">
<solid android:color="@android:color/white" />
<size
android:width="24dp"
android:height="24dp" />
<stroke
android:width="1dp"
android:color="@android:color/holo_blue_bright" />
</shape>
</rotate>
</item>
</layer-list>
Please help me to create a box as in the expected image.
It's not that difficult, key points are three to make this
layer-list
Drawable
:The tooltip (triangle) must be fixed size.
The background must NOT be fixed size, since the content size is unknown.
Adjust the margin and padding (inside the
Drawable
).1. Create the
layer-list
Drawable
:2. Apply to
View
:Result:
Little Math:
24dp
.square root of (24^2)*2 = 33.9411
.16.9706
, so we take17
.Tips For applying vertical padding:
Modify the padding top of Background part (ex:
17dp + 8dp = 25dp
).Modify the margin top of Tooltip (rotated rectangle) part to cancel out (ex:
-12dp - 8dp = -20dp
).