संवाद के रूप में Android गतिविधि


257

मेरे पास एक गतिविधि है जिसका नाम whereActityबाल संवाद भी है। अब, मैं इस गतिविधि को अन्य गतिविधि के लिए एक संवाद के रूप में प्रदर्शित करना चाहता हूं।

मैं उसे कैसे कर सकता हूँ?

यहां छवि विवरण दर्ज करें


यदि आप केवल संवाद लोड करना चाहते हैं, तो आप प्रोग्रेसियोग्लॉग
दक्ष अग्रवाल

जवाबों:


546

संवाद के रूप में गतिविधि शुरू करने के लिए मैंने इसे इस तरह परिभाषित किया 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इसके बजाय उपयोग करने की आवश्यकता होगी ।


186
Android: theme = "@ android: style / Theme.Dialog" का उपयोग करने का तरीका है, लेकिन बाहर जाने के लिए इस्तेमाल न करें। यह सही है या फिर आपका डायलॉग हाल ही में उपयोग किए गए ऐप्स में दिखाई देगा (होम कुंजी दबाए रखें)।
इमैनुएल

7
मुझे गतिविधि से संवाद के रूप में संबंधित कठिनाई है .. मैंने गतिविधि को संवाद के रूप में बनाया है, लेकिन समस्या यह है कि जब मैं गतिविधि के बाहर क्लिक करता हूं तो यह स्वचालित रूप से बंद हो जाता है ... ??? क्या इससे संबंधित कोई समाधान है .. ??????
वूल्वरिन

7
@ इमानुएल, इसे एंड्रॉइड होना चाहिए: OuteFromRecents = "सही" डबल उद्धरण नोट करें
संदीप

43
ध्यान दें कि यदि आप ActionBarActivity (या AppCompat विषय) का उपयोग कर रहे हैं, तो आपको उपयोग करने की आवश्यकता होगी@style/Theme.AppCompat.Dialog
Quentin Klein

8
@Wolverine, जोड़े this.setFinishOnTouchOutside(false);के बाद setContentView()जब आप संवाद आपके द्वारा बनाए बाहर क्लिक करें नष्ट किया जा रहा से गतिविधि को रोकने के लिए विधि।
अंगरेजुड़ी एच।

43

इस कोड का उपयोग करें ताकि उपयोगकर्ता द्वारा संवाद बॉक्स के बाहर छूने पर संवाद गतिविधि बंद न हो:

this.setFinishOnTouchOutside(false);

एपीआई स्तर 11 की आवश्यकता है


1
क्या एपीआई <11 का कोई समाधान है?
पीके गुप्ता

@pkgupta, यदि यह आपके लिए स्वीकार्य है, तो आपको मेरे लिए कम से कम API <15 की चिंता नहीं करनी चाहिए क्योंकि वैसे भी उन पुराने संस्करणों का उपयोग करने वाले बहुत अधिक लोग नहीं हैं। वास्तव में, 2017 तक, मुझे लगता है कि 19 या 20 नया minSDK है।
नियॉन वॉरज

28

आप इस शैली को मूल्यों / शैलियों में परिभाषित कर सकते हैं।

   <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">

2
पुन @drawable/trans: आप का उपयोग करने में सक्षम होना चाहिए @android:color/transparentजो एक ColorDrawableपृष्ठभूमि के रूप में उपयोग करने के लिए पैदा करेगा ।
TWStStrrob

1
<आइटम का नाम = "android: windowBackground"> ​​@ null </ item> एक और विकल्प है
टचबर्डर

समस्या यह है कि गतिविधि पूरी स्क्रीन भर रही है, लेकिन डायलॉग ओवरले के रूप में नहीं दिखाई दे रही है।
शजील अफजल

यह <item name="windowNoTitle">true</item> (कोई "Android") नहीं है। देखें यहाँ । अन्य वस्तुओं के बारे में निश्चित नहीं है।
गैरी 99

23

1 - आप एक ही गतिविधि का उपयोग संवाद और पूर्ण स्क्रीन, गतिशील रूप से कर सकते हैं:

कॉल करने setTheme(android.R.style.Theme_Dialog)से पहले setContentView(...)और super.oncreate()अपनी गतिविधि में कॉल करें।

2 - यदि आप गतिविधि थीम शैली को बदलने की योजना नहीं बनाते हैं जिसका आप उपयोग कर सकते हैं

<activity android:theme="@android:style/Theme.Dialog" />

(@faisal khan द्वारा उल्लिखित)


बस एक नोट: जब मैं प्रोग्रामेटिक विधि (पहली विधि) का उपयोग करता हूं, तो संवाद बॉक्स के पीछे सब कुछ पूरी तरह से काला हो जाता है; हालांकि दूसरी विधि में यह कोई समस्या नहीं थी। बहुत बुरा ... मैं वास्तव में इसे प्रोग्रामिक रूप से करना चाहता था .... नेक्सस 5, एंड्रॉइड 6.0.1
एरिक

@ क्या आपको ब्लैक आउट का समाधान मिल गया है ??
आनंद

1
@anand हाँ, दोनों समाधान एक साथ संयोजन अंधकार समस्या ठीक होती है: एंड्रॉयड प्रकट (में एक संवाद विषय के लिए गतिविधि के सेट विषय <activity android:theme="@android:style/Theme.Dialog" />) और एक संवाद या एक गतिविधि के लिए गतिविधि के प्रोग्राम के रूप में सेट विषय onCreate में stackoverflow.com/a/35915764/2898715
एरिक

21

अगर आपको Appcompat Version की जरूरत है

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>

यह भी खूब रही। मुझे एक्शन बार हटाने की जरूरत थी। हालांकि मुझे XML को थोड़ा संशोधित करना पड़ा। मुझे <item name="windowNoTitle">true</item>इसे मेरे लिए काम करने के लिए जोड़ना था । मैंने भी <item name="android:windowActionBar">false</item>अच्छे उपाय के लिए जोड़ा ।
एरिक

5
इसके अलावा मेरे लिए <item name="android:windowNoTitle">true</item>काम (एंड्रॉयड 5.0.1) नहीं था, और मैं करने के लिए बदलना पड़ा<item name="windowNoTitle">true</item>
चना

17

यदि आपकी गतिविधि को एक संवाद के रूप में प्रस्तुत किया जा रहा है, तो बस अपनी गतिविधि के xml में एक बटन जोड़ें,

<Button
    android:id="@+id/close_button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Dismiss" />

फिर अपनी गतिविधि के जावा कोड में एक क्लिक श्रोता संलग्न करें। श्रोता में, बस बुलाओfinish()

Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});

यह आपके संवाद को खारिज कर सकता है, आपको कॉलिंग गतिविधि पर वापस लौटना चाहिए।


8

यदि आप गतिविधि शीर्ष लेख को निकालना चाहते हैं और संवाद के लिए एक कस्टम दृश्य प्रदान करते हैं, तो आप अपने गतिविधि गतिविधि में निम्नलिखित को जोड़ सकते हैं

android:theme="@style/Base.Theme.AppCompat.Dialog"

और अपनी गतिविधियों को अपने इच्छित दृश्य के साथ डिज़ाइन करें


2

अपने Android मैनिफ़ेस्ट फ़ाइल में थीम सेट करें।

<activity android:name=".LoginActivity"
            android:theme="@android:style/Theme.Dialog"/>

और समाप्त करने के लिए संवाद स्थिति को स्पर्श पर सेट करें।

this.setFinishOnTouchOutside(false);

1

संवाद के रूप में गतिविधि बनाएँ, यहाँ पूर्ण उदाहरण है

यहां छवि विवरण दर्ज करें

  1. AndroidManife.xml

    <activity android:name=".appview.settings.view.DialogActivity" android:excludeFromRecents="true" android:theme="@style/Theme.AppCompat.Dialog"/>

  2. DialogActivity.kt

    class DialogActivity : AppCompatActivity() {
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_dialog)
        this.setFinishOnTouchOutside(true)
    
        btnOk.setOnClickListener {
          finish()
        }
      }
    }
  3. 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>

कृपया अपने उत्तर को अजीब दिखाने के लिए x-बड़े फोंट का उपयोग न करें।
CopsOnRoad

0

कुछ बार आप नीचे दिए गए अपवाद को प्राप्त कर सकते हैं

इसके कारण: java.lang.IllegalStateException: आपको इस गतिविधि के साथ एक Theme.AppCompat विषय (या वंशज) का उपयोग करने की आवश्यकता है।

तो हल करने के लिए आप सरल समाधान का उपयोग कर सकते हैं

AppCompact के लिए संवाद के रूप में प्रकट में आप गतिविधि के विषय जोड़ें।

android:theme="@style/Theme.AppCompat.Dialog"

यह किसी के लिए मददगार हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.