ฉันมีกิจกรรมชื่อwhereActity
ซึ่งมีข้อความโต้ตอบของเด็กด้วย ตอนนี้ฉันต้องการแสดงกิจกรรมนี้เป็นกล่องโต้ตอบสำหรับกิจกรรมอื่น
ฉันจะทำสิ่งนั้นได้อย่างไร
ฉันมีกิจกรรมชื่อwhereActity
ซึ่งมีข้อความโต้ตอบของเด็กด้วย ตอนนี้ฉันต้องการแสดงกิจกรรมนี้เป็นกล่องโต้ตอบสำหรับกิจกรรมอื่น
ฉันจะทำสิ่งนั้นได้อย่างไร
คำตอบ:
ในการเริ่มต้นกิจกรรมเป็นกล่องโต้ตอบฉันได้กำหนดไว้AndroidManifest.xml
ดังนี้:
<activity android:theme="@android:style/Theme.Dialog" />
ใช้คุณสมบัตินี้ภายในactivity
แท็กของคุณเพื่อไม่ให้ไดอะล็อกปรากฏในรายการแอพที่ใช้ล่าสุด
android:excludeFromRecents="true"
หากคุณต้องการหยุดการโต้ตอบ / กิจกรรมของคุณจากการถูกทำลายเมื่อผู้ใช้คลิกที่ด้านนอกของกล่องโต้ตอบ:
หลังจากที่setContentView()
คุณActivity
ใช้งาน:
this.setFinishOnTouchOutside(false);
ตอนนี้เมื่อฉันเรียกstartActivity()
มันจะแสดงเป็นข้อความโต้ตอบกับกิจกรรมก่อนหน้านี้แสดงเมื่อผู้ใช้กดปุ่มย้อนกลับ
โปรดทราบว่าถ้าคุณใช้ActionBarActivity
(หรือธีม AppCompat) คุณจะต้องใช้@style/Theme.AppCompat.Dialog
แทน
@style/Theme.AppCompat.Dialog
this.setFinishOnTouchOutside(false);
after setContentView()
เพื่อป้องกันไม่ให้กิจกรรมถูกทำลายเมื่อคุณคลิกนอกกล่องโต้ตอบที่คุณสร้าง
ใช้รหัสนี้เพื่อไม่ให้กิจกรรมการโต้ตอบปิดลงเมื่อผู้ใช้สัมผัสนอกกล่องโต้ตอบ:
this.setFinishOnTouchOutside(false);
ต้องใช้ API ระดับ 11
คุณสามารถกำหนดสไตล์นี้ในค่า / styles.xml เพื่อดำเนินการ Splash ที่เก่ากว่า:
<style name="Theme.UserDialog" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@drawable/trans</item>
</style>
และใช้ AndroidManifest.xml:
<activity android:name=".SplashActivity"
android:configChanges="orientation"
android:screenOrientation="sensor"
android:theme="@style/Theme.UserDialog">
@drawable/trans
: คุณควรจะสามารถใช้@android:color/transparent
ซึ่งจะสร้างการColorDrawable
ใช้เป็นพื้นหลัง
<item name="windowNoTitle">true</item>
(ไม่ใช่ "android") ดูที่นี่ ไม่แน่ใจเกี่ยวกับรายการอื่น ๆ
1 - คุณสามารถใช้กิจกรรมเดียวกับทั้งกล่องโต้ตอบและเต็มหน้าจอแบบไดนามิก:
โทรsetTheme(android.R.style.Theme_Dialog)
ก่อนโทรsetContentView(...)
และsuper.oncreate()
ในกิจกรรมของคุณ
2 - หากคุณไม่ได้วางแผนที่จะเปลี่ยนรูปแบบของธีมกิจกรรมที่คุณสามารถใช้ได้
<activity android:theme="@android:style/Theme.Dialog" />
(ดังกล่าวโดย @faisal khan)
<activity android:theme="@android:style/Theme.Dialog" />
) และตั้งค่าชุดรูปแบบของกิจกรรมเป็นกล่องโต้ตอบหรือกิจกรรมใน onCreate stackoverflow.com/a/35915764/2898715
หากคุณต้องการเวอร์ชั่นของ Appcompat
style.xml
<!-- Base application theme. -->
<style name="AppDialogTheme" parent="Theme.AppCompat.Light.Dialog">
<!-- Customize your theme here. -->
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
yourmanifest.xml
<activity
android:name=".MyActivity"
android:label="@string/title"
android:theme="@style/AppDialogTheme">
</activity>
<item name="windowNoTitle">true</item>
เพื่อให้มันใช้งานได้สำหรับฉัน ฉันยังเพิ่ม<item name="android:windowActionBar">false</item>
สำหรับการวัดที่ดี
<item name="android:windowNoTitle">true</item>
ยังใช้งานไม่ได้ (Android 5.0.1) และฉันต้องเปลี่ยนเป็น<item name="windowNoTitle">true</item>
หากกิจกรรมของคุณถูกแสดงผลเป็นกล่องโต้ตอบเพียงเพิ่มปุ่มลงใน xml ของกิจกรรมของคุณ
<Button
android:id="@+id/close_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Dismiss" />
จากนั้นแนบผู้ฟังคลิกในรหัส Java ของกิจกรรมของคุณ ในการฟังเพียงแค่โทรfinish()
Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
สิ่งนี้ควรยกเลิกกล่องโต้ตอบของคุณและนำคุณกลับสู่กิจกรรมการโทร
หากคุณต้องการลบส่วนหัวของกิจกรรม & ให้มุมมองที่กำหนดเองสำหรับกล่องโต้ตอบเพิ่มต่อไปนี้ในบล็อกกิจกรรมของรายการของคุณ
android:theme="@style/Base.Theme.AppCompat.Dialog"
และออกแบบกิจกรรมของคุณด้วยมุมมองที่คุณต้องการ
ตั้งค่าธีมในไฟล์รายการ android ของคุณ
<activity android:name=".LoginActivity"
android:theme="@android:style/Theme.Dialog"/>
และตั้งค่าสถานะโต้ตอบเมื่อสัมผัสเพื่อเสร็จสิ้น
this.setFinishOnTouchOutside(false);
สร้างกิจกรรมเป็นกล่องโต้ตอบนี่คือตัวอย่างเต็ม
AndroidManife.xml
<activity android:name=".appview.settings.view.DialogActivity" android:excludeFromRecents="true" android:theme="@style/Theme.AppCompat.Dialog"/>
DialogActivity.kt
class DialogActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_dialog)
this.setFinishOnTouchOutside(true)
btnOk.setOnClickListener {
finish()
}
}
}
activity_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0072ff"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="@dimen/_300sdp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/txtTitle"
style="@style/normal16Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Download"
android:textColorHint="#FFF" />
<View
android:id="@+id/viewDivider"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#fff"
android:backgroundTint="@color/white_90"
app:layout_constraintBottom_toBottomOf="@id/txtTitle" />
<TextView
style="@style/normal14Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Your file is download"
android:textColorHint="#FFF" />
<Button
android:id="@+id/btnOk"
style="@style/normal12Style"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginBottom="20dp"
android:background="@drawable/circle_corner_layout"
android:text="Ok"
android:textAllCaps="false" />
</LinearLayout>
</LinearLayout>
บางครั้งคุณสามารถได้รับการยกเว้นซึ่งได้รับด้านล่าง
เกิดจาก: java.lang.IllegalStateException: คุณต้องใช้ธีม Theme.AppCompat (หรือลูกหลาน) กับกิจกรรมนี้
ดังนั้นสำหรับการแก้ไขคุณสามารถใช้วิธีง่ายๆ
เพิ่มชุดรูปแบบของกิจกรรมของคุณในไฟล์ Manifest เป็นกล่องโต้ตอบสำหรับ appCompact
android:theme="@style/Theme.AppCompat.Dialog"
มันจะมีประโยชน์สำหรับใครบางคน