একটি ডায়ালগ হিসাবে অ্যান্ড্রয়েড ক্রিয়াকলাপ


257

আমার একটি ক্রিয়াকলাপের নাম রয়েছে whereActityযার মধ্যে শিশু ডায়ালগও রয়েছে। এখন, আমি এই ক্রিয়াকলাপটিকে অন্য ক্রিয়াকলাপের জন্য একটি ডায়ালগ হিসাবে প্রদর্শন করতে চাই।

আমি এটা কিভাবে করবো?

এখানে চিত্র বর্ণনা লিখুন


আপনি যদি কেবল কথোপকথন লোড করতে চান তবে আপনি অগ্রগতি
দক্ষিণ আগরওয়াল

উত্তর:


546

কথোপকথন হিসাবে ক্রিয়াকলাপ শুরু করার জন্য আমি এটি এর মধ্যে এটি সংজ্ঞায়িত করেছি AndroidManifest.xml:

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

activityআপনার ডায়ালগটি সম্প্রতি ব্যবহৃত অ্যাপ্লিকেশন তালিকায় উপস্থিত না থেকে বাঁচতে আপনার ট্যাগের অভ্যন্তরে এই সম্পত্তিটি ব্যবহার করুন

android:excludeFromRecents="true"

আপনি যদি ডায়ালগের বাইরে ব্যবহারকারী ক্লিক করেন তবে আপনার ডায়ালগ / ক্রিয়াকলাপ ধ্বংস হতে বাধা দিতে চান:

setContentView()আপনার Activityব্যবহারের পরে :

this.setFinishOnTouchOutside(false);

এখন যখন আমি startActivity()এটি ডায়ালগ হিসাবে প্রদর্শন করি তখন পূর্ববর্তী ক্রিয়াকলাপটি যখন ব্যবহারকারী পিছনের বোতামটি টিপায় তখন তা প্রদর্শিত হয়।

মনে রাখবেন যে আপনি যদি ActionBarActivity(বা অ্যাপকম্প্যাট থিম) ব্যবহার করছেন তবে আপনার @style/Theme.AppCompat.Dialogপরিবর্তে আপনাকে ব্যবহার করতে হবে।


186
অ্যান্ড্রয়েড: থিম = "@ অ্যান্ড্রয়েড: স্টাইল / থিম.ডায়ালগ" ব্যবহার করার উপায় তবে বাদ দিতে ভুলবেন না ফ্রমআরেন্টস = সত্য ব্যবহার করুন বা অন্যথায় আপনার ডায়লগটি সম্প্রতি ব্যবহৃত অ্যাপ্লিকেশনগুলিতে উপস্থিত হবে (হোম কীটি ধরে রাখুন)।
এমমানুয়েল

7
আমার ক্রিয়াকলাপটি ডায়লগ হিসাবে সম্পর্কিত হতে .. আমি ক্রিয়াকলাপটিকে ডায়ালগ হিসাবে তৈরি করেছিলাম তবে সমস্যাটি যখন আমি যখন কার্যকলাপের বাইরে ক্লিক করি তখন এটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায় .. ??? এর সাথে কি কোনও সমাধান আছে .. ??????
ওয়ালভারাইন

7
@ এমমানুয়েল, এটি অ্যান্ড্রয়েড হতে হবে: বাদ দিন থেকে ফ্রিআরসিেন্টস = "সত্য" ডাবল উদ্ধৃতিগুলি নোট করুন
সন্দীপ

43
মনে রাখবেন যে আপনি যদি অ্যাকশনবার্টিভিটি (বা অ্যাপকম্প্যাট থিম) ব্যবহার করছেন তবে আপনাকে ব্যবহার করতে হবে@style/Theme.AppCompat.Dialog
কোয়ান্টিন ক্লিন

8
@ ওলভারাইন, আপনি তৈরি করা ডায়ালগের বাইরে ক্লিক করার this.setFinishOnTouchOutside(false);পরে setContentView()ক্রিয়াকলাপটি ধ্বংস হতে আটকাতে পদ্ধতির পরে যুক্ত করুন।
অ্যাংগ্রায়ুডি এইচ

43

এই কোডটি ব্যবহার করুন যাতে ব্যবহারকারী ডায়লগ বাক্সের বাইরে স্পর্শ করলে ডায়ালগ ক্রিয়াকলাপটি বন্ধ না হয়:

this.setFinishOnTouchOutside(false);

এপিআই স্তর 11 প্রয়োজন


1
এপিআই <11 এর কোনও সমাধান আছে কি?
পি কে গুপ্তা

@ পিকেগুপ্ত, যদি তা আপনার কাছে গ্রহণযোগ্য হয় তবে আপনার পক্ষে কমপক্ষে এপিআই <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>

এবং এটি অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ব্যবহার করুন:

   <activity android:name=".SplashActivity"
          android:configChanges="orientation"
          android:screenOrientation="sensor"
          android:theme="@style/Theme.UserDialog">

2
পুনরায় @drawable/trans: আপনি ব্যাকগ্রাউন্ড হিসাবে ব্যবহার @android:color/transparentকরতে একটি তৈরি করতে পারে যা ব্যবহার করতে সক্ষম হওয়া উচিত ColorDrawable
TWiStErRob

1
<আইটেমের নাম = "অ্যান্ড্রয়েড: উইন্ডোব্যাকগ্রাউন্ড"> @ নাল </ i> << অন্য বিকল্প
টাচবোর্ডার

সমস্যাটি হ'ল কার্যকলাপটি পুরো স্ক্রীনটি পূরণ করছে তবে ডায়ালগ ওভারলে হিসাবে দেখায় না showing
শাজিল আফজাল

এটি <item name="windowNoTitle">true</item> (কোনও "অ্যান্ড্রয়েড" নয়)। এখানে দেখুন । অন্যান্য আইটেম সম্পর্কে নিশ্চিত না।
গ্যারি 99

23

1 - আপনি ডায়ালগ এবং পুরো স্ক্রিন উভয়ের মতোই ক্রিয়াকলাপটি গতিশীলভাবে ব্যবহার করতে পারেন:

কল setTheme(android.R.style.Theme_Dialog)করার আগে setContentView(...)এবং super.oncreate()আপনার ক্রিয়াকলাপে কল করুন ।

2 - আপনি যদি কার্যকলাপ থিমের স্টাইলটি পরিবর্তন করতে চান না তবে আপনি ব্যবহার করতে পারেন

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

(@ ফয়সাল খান উল্লেখ করেছেন)


কেবল একটি নোট: আমি যখন প্রোগ্রামিক পদ্ধতিটি ব্যবহার করি (প্রথম পদ্ধতি), তখন ডায়ালগ বাক্সের পিছনে সমস্ত কিছুই পুরোপুরি কালো হয়ে যায়; যদিও এটি অন্য পদ্ধতিতে কোনও সমস্যা ছিল না। খুব খারাপ ... আমি সত্যিই এটি প্রোগ্রামিকভাবে করতে চেয়েছিলাম .... Nexus 5, Android 6.0.1
এরিক

@ এরিক আপনি কি ব্ল্যাক আউট এর সমাধান খুঁজে পেয়েছেন ??
আনন্দ

1
@anand হ্যাঁ, উভয় সমাধান একসঙ্গে মিশ্রন নিষ্প্রদীপ সমস্যা সমাধান করা হয়েছে: Android স্পষ্ট (একটি ডায়ালগ থিম কার্যকলাপের সেট থিম <activity android:theme="@android:style/Theme.Dialog" />) এবং একটি ডায়ালগ বা একটি কার্যকলাপ কার্যকলাপের প্রোগ্রামেটিক্যালি সেট থিম onCreate মধ্যে stackoverflow.com/a/35915764/2898715
এরিক

21

আপনার যদি অ্যাপকম্প্যাট সংস্করণ দরকার হয়

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>ভাল পরিমাপ জন্য যোগ ।
এরিক

5
এছাড়াও আমার <item name="android:windowNoTitle">true</item>পক্ষে কাজ হয়নি (অ্যান্ড্রয়েড 5.0.1), এবং আমাকে পরিবর্তন করতে হয়েছিল<item name="windowNoTitle">true</item>
noti

17

যদি আপনার ক্রিয়াকলাপটি একটি কথোপকথন হিসাবে রেন্ডার করা হয় তবে কেবল আপনার ক্রিয়াকলাপের এক্সএমএলে একটি বোতাম যুক্ত করুন,

<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

আপনার অ্যান্ড্রয়েড মেনিফেস্ট ফাইলে থিমটি সেট করুন।

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

আপনার উত্তরটি অদ্ভুত দেখায় দয়া করে এক্স-বড় ফন্টগুলি ব্যবহার করবেন না।
কক্সঅনরোড

0

কিছু সময় আপনি নীচে প্রদত্ত ব্যতিক্রমটি পেতে পারেন

Java.lang.IllegalStateException দ্বারা সৃষ্ট: আপনার এই ক্রিয়াকলাপের সাথে থিম.অ্যাপকম্প্যাট থিম (বা বংশধর) ব্যবহার করা দরকার।

সমাধান করার জন্য আপনি সহজ সমাধান ব্যবহার করতে পারেন

অ্যাপকম্প্যাক্টের জন্য ডায়ালগ হিসাবে ম্যানিফেস্টে আপনার ক্রিয়াকলাপের থিম যুক্ত করুন।

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

এটি কারও পক্ষে সহায়ক হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.