前言:
上次說到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





沒有留言:
張貼留言