前言:
上次說到PopupWindow在Android 7 以上產生的bug,這邊提供另外一種解決方式。
同場加映:http://nikeru8.blogspot.tw/2017/03/androidpopupwindowpopupview-popupwindow.html
可以使用自定義的Dialog。
這方法是使用Activity當作Dialog來使用
實作:
先來說明此次會動到的地方。
創建一個專案後。
直接開啟一個新的Activity。
Java ActivityName取名為DialogActivity
LayoutName取名為activity_dialog
先設定背景圖片
參考:http://nikeru8.blogspot.tw/2017/03/textview.html
在drawable資料夾內創建一個背景圖片,取名為rectangle_drawable。
drawable/rectangle_drawable
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:topLeftRadius="5sp" android:topRightRadius="5sp" android:bottomLeftRadius="5sp" android:bottomRightRadius="5sp" /> <solid android:color="@android:color/white" /> <stroke android:width="2dip" android:color="#0290D2" /> </shape>
接下來設計一下您想要的Dialog Layout
activity_dialog.xml |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:orientation="vertical" android:background="@drawable/rectangle_drawable"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_margin="18dp" android:padding="5dp" android:text="Hello" android:textColor="@color/dark_text" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_margin="18dp" android:padding="5dp" android:text="@android:string/ok" android:onClick="clickfinish" /> </LinearLayout>
DialogActivity.java
public class DialogActivity extends Activity {//這邊請extands Activity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 這一行是來取消TitleBar用的 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_dialog); } public void clickfinish(View view) { finish(); } }
讓畫面帶到AndroidManifest
<activity android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog"/>
讓這個Activity繼承Dialog的主題!
差不多完成囉!
接下來直接在MainActivity內連接Button接到DialogActivity就行了。
activity_main |
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.chat.a015865.customdialog.MainActivity"> //這是一個BUTTON <TextView android:onClick="onClickMe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClickMe (View view) { Intent intent = new Intent(this, DialogActivity.class); startActivity(intent); } }
現在跑跑看吧!
一個自定義的Dialog就完成囉!
如果要在這個自定義的Dialog內帶資料回MainActivity,直接使用Bundle 或是 startActivityForResult都行。
DEMO:
https://drive.google.com/open?id=0Byk75IYx-dKXcDdBYjJrZ2ZUTzg
沒有留言:
張貼留言