স্ক্রিনটি পূরণ করতে আমি কীভাবে একটি ডায়ালগ স্টাইলের ক্রিয়াকলাপ উইন্ডো পেতে পারি?


142

আমি ডায়লগ থিম সেট সহ একটি ক্রিয়াকলাপ ব্যবহার করছি এবং আমি চাই এটি পুরো পর্দা হোক। আমি উইন্ডো ম্যানেজারের মধ্য দিয়ে গিয়ে উইন্ডোটিকে পুরো প্রস্থ এবং উচ্চতায় ম্যানুয়ালি প্রসারিত করার জন্য সমস্ত ধরণের জিনিস চেষ্টা করেছিলাম, তবে কিছুই কার্যকর হয় না।

স্পষ্টতই, একটি ডায়ালগ উইন্ডো (বা ডায়ালগ থিম সহ একটি ক্রিয়াকলাপ) কেবলমাত্র এর বিষয়বস্তু অনুযায়ী প্রসারিত হবে, তবে এটি সর্বদা কার্যকর হয় না। উদাহরণস্বরূপ, আমি একটি অগ্রগতি বার চেনাশোনাটি প্রদর্শন করি যার প্রস্থ এবং উচ্চতা FILL_PARENT এ সেট করা হয়েছে (এর লেআউট ধারকটিও তাই করে) তবে এখনও, ডায়ালগটি স্ক্রিনটি পূরণ না করে অনেক ছোট অগ্রগতি বারের সাথে আবৃত করে ps

একটি ডায়ালগ উইন্ডোর অভ্যন্তরে ছোট কিছু প্রদর্শন করার উপায় থাকতে হবে তবে এটির সামগ্রীর আকার পরিবর্তন না করে কী এটি পুরো পর্দার আকারে প্রসারিত হবে?


2
আকর্ষণীয় দ্রষ্টব্য: যখন পিক্সেলগুলিতে লেআউট ধারকটির প্রস্থ এবং উচ্চতাটিকে একটি আসল মান হিসাবে সেট করা হয়, তখন ডায়ালগটি সেই অনুযায়ী আকার পরিবর্তন করে। তবে এটিকে FILL_PARENT এ সেট করার পরে, তা হয় না ...
ম্যাথিয়াস

সত্যি? ক্রিয়াকলাপটি তাত্ক্ষণিকভাবে সম্পাদনা করছে এমন লেআউটে কি এর কোনও পিতামাতৃীয় আত্মীয় বা লিনিয়ারলআউট ট্যাগ রয়েছে যা পূরণ_পরিবারের উচ্চতা এবং প্রস্থে সেট করা আছে? আমি একটি ডায়লগ থিম সহ কয়েকটি ক্রিয়াকলাপ বাস্তবায়ন করেছি এবং পুরো স্ক্রীনটি গ্রহণ করতে কোনও সমস্যা হয়নি।
ম্যাটিসি

হ্যাঁ, ক্রিয়াকলাপটি প্রস্থ এবং উচ্চতা উভয়ের জন্যই FILL_PARENT এ লাইনারিআউটআউট সেট করেছে।
ম্যাথিয়ায়াস

আমি সমস্যা সমাধানের মাধ্যমে একটি সমস্যা সমাধান করেছি, তবে যেহেতু এটি ভাল সমাধান নয়, তাই আমি প্রশ্নটি উন্মুক্ত রেখে দেব। আমি যা করেছি তা লিনিয়ারলআউটকে সাবক্লাস করা এবং তার অন-মেজার () পদ্ধতিটি ওভাররাইড করা ছিল যা কোনও বিন্যাস চক্রের সময় দর্শনটির আকার নির্ধারণ করার জন্য এবং এটি স্ক্রিনের প্রস্থ এবং উচ্চতায় স্থির করে দেওয়া হয়। যদিও এটি সঠিক নয়, যেহেতু এটি মেনু বারগুলির দ্বারা দখলকৃত স্থানটিকে বিবেচনায় নেয় না, তাই পাত্রে দৃশ্যমান হওয়ার চেয়ে ধারকটি আসলে লম্বা হবে (সমস্ত অদ্ভুত পার্শ্ব প্রতিক্রিয়া সহ শিশুদের অদৃশ্য অঞ্চলে অদৃশ্য হয়ে যায়) পর্দাটি).
ম্যাথিয়াস

আমি সঠিক সমাধানটি পেয়েছি, আমার উত্তর নীচে দেখুন।
ম্যাথিয়াস

উত্তর:


312

আমি সমাধানটি খুঁজে পেয়েছি:

আপনার ক্রিয়াকলাপে যার Theme.Dialogস্টাইল সেট রয়েছে, এটি করুন:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.your_layout);

    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}

এটি গুরুত্বপূর্ণ যে আপনি কল Window.setLayout() পর আপনাকে কল setContentView()অন্যথায় তা বাংলায় কাজ করবে না।


5
ধন্যবাদ, আমার সময় বাঁচিয়েছি, আমি কোথাও এই সন্ধান করতে পারতাম না! তবে কোনও ধারণা কেন আমাদের স্পষ্টভাবে কোডে নির্দিষ্ট করে রাখতে হবে, থিম সংলাপের সাথে ক্রিয়াকলাপের জন্য কেন পূর্ণ_পিতা XML এর মাধ্যমে কাজ করেন না?
বসে

3
আমার ডায়ালগটি এক্সএমএল দ্বারা নয়, এই পদ্ধতিতে নয়, প্রস্থ পূরণ করবে না। আমি নখ খাচ্ছি
এটাইমামা

6
এবং এটি হ'ল:import android.view.ViewGroup.LayoutParams;

11
FILL_PARENT এখন হ্রাস করা হয়েছে, পরিবর্তে MATCH_PARENT ব্যবহার করুন
আলেকজভি

4
এটি পুরো স্ক্রিনটি পূরণ করছে না, এটি প্রতিটি পাশের মতো ছোট প্যাডিংয়ের মতো।
মাচাডো

66

আপনি আপনার স্টাইল অ্যান্ড্রয়েডে এই মানগুলি যুক্ত করতে পারেন: উইন্ডোমিনউইথথমজর এবং অ্যান্ড্রয়েড: উইন্ডোমিনউইথথমিনোর

<style name="Theme_Dialog" parent="android:Theme.Holo.Dialog">
    ...
    <item name="android:windowMinWidthMajor">97%</item>
    <item name="android:windowMinWidthMinor">97%</item>
</style>

2
সবচেয়ে সহজ সমাধান। এটি অ্যাপকম্প্যাট সমর্থন লাইব্রেরির সাথেও কাজ করছে। ধন্যবাদ।
মুহাম্মদ সাকিব

এটি উত্তর গ্রহণ করা উচিত। এটি করার সবচেয়ে সঠিক এবং পরিষ্কার উপায়। প্যারেন্ট = "@ শৈলী / থিম.অ্যাপকম্প্যাট.লাইট.ডায়ালগ" ব্যবহার বিবেচনা করুন
কিরিল

দেখে মনে হচ্ছে এটি কাজ করা উচিত তবে এটি আমার পক্ষে হয় না। হুম, আমি ভাবছি কেন। সম্ভবত ২০১৪ সালের পর থেকে পরিস্থিতি পরিবর্তিত হয়েছে
স্কট বিগস

53

আমি কেবল নীচের মতো এটির জন্য পর্দার মাত্র 80% পূরণ করতে চাই

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        int screenWidth = (int) (metrics.widthPixels * 0.80);

        setContentView(R.layout.mylayout);

        getWindow().setLayout(screenWidth, LayoutParams.WRAP_CONTENT); //set below the setContentview

এটি তখনই কাজ করে যখন আমি getwindow ()। সেটলয়আউট ... সেটকন্টেন্টভিউ (..) এর নীচে রাখি works

ধন্যবাদ @ মাথিয়াস


11

আপনার ডায়ালগ_কাস্টম_লেআউটআউট.এক্সএমএল অন্য কোনও লেআউটের পরিবর্তে আপেক্ষিক লেআউটে মুড়িয়ে দিন hat এটি আমার পক্ষে কাজ করেছে।


1
এখানে একই, প্রস্থ এবং উচ্চতা পুরোপুরি ভুল ছিল এবং কীভাবে ঠিক করতে হবে তা বুঝতে পারেনি। মূল লেআউটটিকে রিলেটিভলআউটে রূপান্তর করা আমার সমস্যাগুলিও ঠিক করে দিয়েছে!
শার্পমোবাইলকোড

8

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

mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);

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


5

এই উত্তরটি যারা "থিম.এপকম্প্যাট.ডায়ালগ" বা অন্য কোনও "থিম.এপকম্প্যাট.ডায়ালগ" বংশধর "থিম.এপকম্প্যাট.লাইট.ডায়ালগ", "থিম.এপকম্প্যাট.ডায়নাইট.ডায়ালগ" ইত্যাদি ব্যবহার করেন তাদের পক্ষে কাজ করার সুযোগ নেই for আমাকে নিজেই অ্যাপকম্প্যাট ডায়ালগটি ব্যবহার করতে হবে কারণ আমি অ্যাপকম্প্যাটঅ্যাক্টিভিটি আমার সমস্ত ক্রিয়াকলাপের জন্য প্রসারিত হিসাবে ব্যবহার করি। এমন কোনও সমস্যা দেখা দেবে যা যদি আমরা স্বীকৃত উত্তরটি ব্যবহার করি তবে ডায়ালগটির প্রতিটি দিকে (উপরে, ডান, নীচে এবং বামে) প্যাডিং রয়েছে।

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.your_layout);

    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}

আপনার ক্রিয়াকলাপের স্টাইলে, এই কোডগুলি যুক্ত করুন

<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@null</item>
</style>

আপনি লক্ষ্য করতে পারেন যে, আমাদের ডায়ালগটিতে প্যাডিং উত্পন্ন করার সমস্যাটি হ'ল "অ্যান্ড্রয়েড: উইন্ডোব্যাকগ্রাউন্ড", সুতরাং এখানে আমি উইন্ডোটির পটভূমি বাতিল করে দেব।


2

শীর্ষ সর্বাধিক বিন্যাসে ন্যূনতম প্রস্থ সেট করুন।

android:minWidth="300dp"

উদাহরণ স্বরূপ:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="300dp">

<!-- Put remaining contents here -->

</LinearLayout>

2

ম্যাথিয়াসের উত্তর বেশিরভাগ ক্ষেত্রে সঠিক তবে এটি প্রতিটি পর্দায় একটি ছোট প্যাডিং রয়েছে বলে এখনও এটি পুরো পর্দাটি পূরণ করে না (@ হোমস দ্বারা নির্দেশিত)। তাঁর কোড ছাড়াও, আমরা থিম.ডায়ালগ স্টাইলটি প্রসারিত করে এটি ঠিক করতে পারি এবং এর মতো কিছু বৈশিষ্ট্য যুক্ত করতে পারি।

<style name="MyDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
</style>

তারপরে আমরা কেবল থিম সেট সহ ক্রিয়াকলাপটিকে ঘোষণা করি MyDialog:

<activity
    android:name=".FooActivity"
    android:theme="@style/MyDialog" />

1

এটি আমার মতো কারও পক্ষে সহায়ক হবে। কাস্টম সংলাপ শৈলী তৈরি করুন:

<style name="MyDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

ইন AndroidManifest.xmlচেয়েছিলেন কার্যকলাপের জন্য ফাইল সেট থিম:

<activity
        android:name=".CustomDialog"
        ...
        android:theme="@style/MyDialog"/>

এগুলি হ'ল, পদ্ধতিগুলিকে প্রগ্রেমেটিক্যালি বলার দরকার নেই।


এখনও প্রতিটি পক্ষের প্যাডিং দেখান (উপরে, ডান, নীচে এবং বাম) এবং যদি আমাদেরও স্ট্যাটাস বার দেখাতে হয় তবে এই সমাধান ব্যর্থ হবে
হেন্দ্রডাব্লুডি

পরীক্ষা করে দেখুন stackoverflow.com/a/39590004/3940133 যদি আপনি প্রতিটি পক্ষের প্যাডিং আছে
HendraWD

0

আপনার প্রকাশিত ফাইলে যেখানে আমাদের ক্রিয়াকলাপ সংজ্ঞায়িত হয়েছে

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

অ্যাকশন বার ছাড়াই

<activity android:name=".YourPopUpActivity"
            android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"/>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.