কীভাবে একটি সতর্কতা ডায়ালগ তৈরি করতে পর্দার আকারের 90% পূরণ করা যায়?


303

আমি ঠিক ঠিক মতো একটি কাস্টম সতর্কতা ডায়ালগ তৈরি করতে এবং প্রদর্শন করতে পারি তবে আমার android:layout_width/height="fill_parent"ডায়ালগটিতে থাকা এক্সএমএল এটি সামগ্রীর মতোই বড়।

আমি যা চাই তা হ'ল ডায়লগ যা 20 পিক্সেলের প্যাডিং ব্যতীত পুরো স্ক্রীনটি পূরণ করে। তারপরে যে চিত্রটি ডায়ালগের অংশ সেটি স্বয়ংক্রিয়ভাবে পূর্ণ ডায়ালগ আকারে পূর্ণ_পরিবারের সাথে প্রসারিত হবে।

উত্তর:


355

এই আলোচনার গ্রুপ পোস্টে অ্যান্ড্রয়েড প্ল্যাটফর্ম বিকাশকারী ডায়ান হ্যাকোবারের মতে, ডায়ালগগুলি তাদের উইন্ডোর শীর্ষ স্তরের বিন্যাসের প্রস্থ এবং উচ্চতা সেট করে WRAP_CONTENT। ডায়ালগটি আরও বড় করতে আপনি এই পরামিতিগুলিতে সেট করতে পারেন MATCH_PARENT

ডেমো কোড:

    AlertDialog.Builder adb = new AlertDialog.Builder(this);
    Dialog d = adb.setView(new View(this)).create();
    // (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)

    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.copyFrom(d.getWindow().getAttributes());
    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
    lp.height = WindowManager.LayoutParams.MATCH_PARENT;
    d.show();
    d.getWindow().setAttributes(lp);

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

থিম.ডায়ালগ বাড়িয়ে এটি করা ভাল then (যদিও ডায়ালগটি স্বয়ংক্রিয়ভাবে একটি উপযুক্ত আলো বা গা dark় থিম বা মধুচাক্স হ্যালো থিম গ্রহণ করা আরও কিছু বেশি কাজ http: // এটি http://developer.android.com/guide/topics/ui/themes অনুযায়ী করা যেতে পারে । এইচটিএমএল # নির্বাচন থিম )


5
আমি উত্তরটি বুঝতে পারি না বা এটি আমার পক্ষে কার্যকর হয় না।
ডেভিড মোরালেস

4
এটি সত্য বলে মনে হচ্ছে না যে ডায়লগগুলি মোড়ানো_আপনি প্রশস্ত। জিনিসগুলি সংকীর্ণ হয়ে যায় এবং কেটে যায়। ডায়ালগটি কিছু সর্বাধিক পূর্বনির্ধারিত প্রস্থে সেট করা আছে বলে মনে হচ্ছে।
পিটার আজতাই

21
আমি এই প্রশ্নের উত্তর দেয় কিভাবে না? @Nmr দ্বারা প্রস্তাবিত কোডটি ডায়ালগটিকে স্ক্রিনের 90% হতে পারে? কারণ আমি এটি দেখতে চাই না। কথোপকথনটি কেবলমাত্র ফিলিং-প্রস্থে সেট করা আছে, তাই 90% নয়, 100% ঠিক আছে?
টেড

4
@ টেড, অ্যালার্টডায়ালগ দ্বারা ব্যবহৃত থিমটির একটি মার্জিন রয়েছে। সুতরাং ফলাফলটি পর্দার প্রান্তে পৌঁছায় না, এটি প্রায় 90% পূরণ করে। (এটি অবশ্যই 90% নয়, কেবল একটি নান্দনিক আনুমানিক 90%)
এনএমআর

8
স্রেফ কলিং করা হয়েছে d.getWindow ()। GetAttributes ()। প্রস্থ = উইন্ডো ম্যানেজ.লায়আউটপ্যারামস.ফিলল_প্যারেন্ট; শো কল করার আগে () কৌশলটি করবে। এছাড়াও, ডায়লগটির পটভূমি স্বচ্ছ হতে থাকায় আমার প্রদত্ত পদ্ধতিতে কিছু সমস্যা ছিল। যত তাড়াতাড়ি সরানো কপিফর্ম থেকে (() সমস্যাটি নিজেরাই স্থির হয়ে গেল Alex
আলেক্সি

182

এর RelativeLayoutপরিবর্তে আপনার কাস্টম ডায়ালগ লেআউটটি মোড়ানোর চেষ্টা করুন LinearLayout। এটা আমার জন্য কাজ করেছে।


2
এটা আমার জন্যও আছে। কেউ কি কারণ ব্যাখ্যা করতে পারেন !!
রোজিনা

রিলেটিভলআউট কীভাবে কাজ করার কথা বলে চলেছে বা কোনও সুখী দুর্ঘটনা যা চলে যেতে পারে?
তবুওtiti99

9
এটি 2019 এবং এটি এখনও কার্যকর। চিয়ার্স! সত্যই গ্রহণযোগ্য উত্তর হওয়া উচিত।
তেলানুব

@ cvarsendan আপনি কি উত্তরটি ব্যাখ্যা করতে পারবেন? এটা আমার জন্য কাজ করেছে। ধন্যবাদ!
জ্যাকো

3
ল্যান্ডস্কেপ অভিযোজনে কাজ করে না
জর্জ অরোকিয়াম

85

ডায়ালগ উইন্ডোতে FILL_PARENT উল্লেখ করা যেমন অন্যরা পরামর্শ দেয়, আমার পক্ষে কাজ করে নি (অ্যান্ড্রয়েড 4.0.০.৪ এ), কারণ এটি পুরো স্ক্রীনটি পূরণ করার জন্য কেবল কালো ডায়লগের পটভূমি প্রসারিত করেছে।

যা ভাল কাজ করে তা সর্বনিম্ন প্রদর্শনের মানটি ব্যবহার করে তবে কোডের মধ্যে এটি নির্দিষ্ট করে দেয় যাতে ডায়ালগটি স্ক্রিনের 90% লাগে।

তাই:

Activity activity = ...;
AlertDialog dialog = ...;

// retrieve display dimensions
Rect displayRectangle = new Rect();
Window window = activity.getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

// inflate and adjust layout
LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.your_dialog_layout, null);
layout.setMinimumWidth((int)(displayRectangle.width() * 0.9f));
layout.setMinimumHeight((int)(displayRectangle.height() * 0.9f));

dialog.setView(layout);

সাধারণভাবে শুধুমাত্র প্রস্থটি সামঞ্জস্য করা বেশিরভাগ ক্ষেত্রেই পর্যাপ্ত হতে হবে।


এটি 4.0 এবং এর উপরে সম্পূর্ণরূপে কাজ করবে বলে মনে হচ্ছে না। এটি স্ক্রিনের 90% পূরণ করে না। কোন ধারণা কেন? আমি এটি একটি মটোরোলা জুমে 4.0 এর সাথে করছি
রায়ান গ্রে

@ রায়ানগ্রি এটি আপডেটেড ওএস সহ একটি স্যামসাং নেক্সাস এস-এ আমার জন্য কাজ করছে। সংযোজনীয় তথ্য ব্যতীত আমি দুর্ভাগ্যক্রমে আপনাকে সহায়তা করতে অক্ষম।
কোমা

সুন্দর উত্তর মানুষ! আমাকে এখানে অনেক সাহায্য করেছে!
আরমান্ডো মার্কস সোব্রিনহো

83

আপনার কাস্টম ভিউ এক্সএমএল সেট করুন android:minWidthএবং রাখুন android:minHeight। এগুলি সতর্কতাটিকে কেবল সামগ্রীর আকার মোড়ানোর জন্য বাধ্য করতে পারে। এই মত একটি ভিউ ব্যবহার করে এটি করা উচিত:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:minWidth="300dp" 
  android:minHeight="400dp">
  <ImageView
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="@drawable/icon"/>
</LinearLayout>

3
হ্যাঁ এটির সাহায্যে আমি এটি একটি নির্দিষ্ট আকারে সেট করতে পারি তবে আমি চাই এটি 20 পিক্সেলের একটি প্যাডিংকে মাইনাস করে নিন। বা প্রস্থ = স্ক্রিনউইথের 90%।
ফ্যাবিয়ান

4
আমি ঘনত্ব স্বতন্ত্র পিক্সেল সর্বদা মাপা হয় যাতে কোনও স্ক্রিন 320x480dp হয় তাই 300x460dp ভিউ সমস্ত ক্ষেত্রে 20 ডিপি প্যাডিং হবে। বিকল্পভাবে আপনি স্ক্রিনের আকারটি এটির মতো দেখতে পেলেন: ডিসপ্লে ডিসপ্লে = ((উইন্ডো ম্যানেজার) গিস্টিস্টেম সার্ভিস (কনটেক্সট W উইন্ডো_SERVICE)) get getDefaultDisplay (); int প্রস্থ = display.getWidth (); এবং ম্যাক্সউইথ এবং ম্যাক্সহাইট অনুসারে সেট করুন।
jqpubliq

5
হুঁশিয়ারি থেকে হুম আমি ডিপি ধারণাটি বুঝতে। তবে যদি পর্দার অনুপাতটি 16: 9 বা 4: 3 হয়? অসমভাবে প্রসারিত করা হবে?
ফ্যাবিয়ান

2
না, পর্দার অনুপাত 2: 3 হলে ডিপি রেজোলিউশনটি কেবল 320x480 হবে, সুতরাং এই পদ্ধতিটি কাজ করবে না।
mhsmith

21
কি, এই উত্তর এতবার upvated হয় কেন? এটি একটি ভয়াবহ সমাধান যেহেতু ব্যবহারকারী কোন ডিভাইসের আকার ব্যবহার করছে তার সম্পূর্ণ বিবেচনা নেই।
জ্বিন

70

এমনকি সহজ কেবল এটি করুন:

int width = (int)(getResources().getDisplayMetrics().widthPixels*0.90);
int height = (int)(getResources().getDisplayMetrics().heightPixels*0.90);

alertDialog.getWindow().setLayout(width, height);

গৌণ দ্রষ্টব্য: getResferences () ক্রিয়াকলাপ প্রসঙ্গে উপলব্ধ।
nat101

এই উত্তরটি onCreateডিভাইস ঘোরার পরে একটি ডায়ালগ পুনরায় তৈরি করার চেষ্টা করার দৃশ্যের জন্য খুব সহায়ক ছিল । এই ক্ষেত্রে, আমরা বিন্যাসের যে কোনও কিছুর প্রস্থ / উচ্চতার উপর নির্ভর করতে পারি না, কারণ এটি এখনও তৈরি হয়নি; তবে ডিভাইসের দৈহিক প্রস্থ / উচ্চতা এখনও উপলব্ধ।
টিম বিগলেসেইন

4
আপনি যদি মাত্র একটি মাত্রা পরিবর্তন করতে চান ViewGroup.LayoutParams.WRAP_CONTENTতবে প্যারামিটারগুলির একটি হিসাবে পাস করুন
ভাদিম কোতোভ

কেবলমাত্র আপনার সমাধানটি আমার জন্য কাজ করেছে, ধন্যবাদ
স্বপ্নদর্শী

53
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

1
এটি আমার পক্ষে কাজ করেছে এবং মনোড্রয়েডে অনুবাদ করা সহজ ছিল যা এটির মতো কাজ করেছিল (যেখানে ডি একটি নতুন ডায়ালগ রয়েছে): ডি.উইন্ডো.সেটলয়আউট (উইন্ডোম্যানেজারলাউটপ্যারামস.ফিলপেন্ট, উইন্ডো ম্যানেজারলাউটপ্যারামস.ফিলপ্যারেন্ট);
জের্মাম

9
তবে 90% 100% এর মতো নয়। FILL_PARENT পুরো প্রস্থ, 90% নয়, 100% পূরণ করার ইঙ্গিত দেয়। রাইট?
টেড

@ টেড আপনি ঠিক বলেছেন। আপনি FILL_PARENTবর্তমান প্রদর্শনের প্রস্থের 90% প্রস্থ হিসাবে গণিত প্রস্থের সাথে বিকল্প করতে পারেন । তবে উত্তরটি আমি পছন্দ করি কারণ এটি অন্যদের চেয়ে সহজ।
এইচআরজে

26

এখানে অন্যান্য উত্তরগুলি সমস্তই বোঝায়, তবে ফ্যাবিয়ানের যা প্রয়োজন তা তা পূরণ করে নি। এখানে আমার একটি সমাধান। এটি নিখুঁত সমাধান নাও হতে পারে তবে এটি আমার পক্ষে কাজ করে। এটি এমন একটি ডায়ালগ দেখায় যা ফুলস্ক্রিনে রয়েছে তবে আপনি উপরে, নীচে, বাম বা ডানদিকে কোনও প্যাডিং নির্দিষ্ট করতে পারেন।

প্রথমে এটি আপনার res / মান / স্টাইল.এক্সএমএলে রাখুন:

<style name="CustomDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@color/Black0Percent</item>
    <item name="android:paddingTop">20dp</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsFloating">false</item>
</style>

আপনি দেখতে পাচ্ছেন যে আমার সেখানে অ্যান্ড্রয়েড রয়েছে: প্যাডিংটপ = 20 ডিপি মূলত আপনার যা প্রয়োজন। অ্যান্ড্রয়েড windowBackground = @ রং / Black0Percent মাত্র একটি রঙের কোড আমার color.xml উপর ঘোষিত হয়

মাঝামাঝি / মান / color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="Black0Percent">#00000000</color>
</resources>

সেই রঙের কোডটি ডায়ালগের ডিফল্ট উইন্ডো ব্যাকগ্রাউন্ডটিকে 0% স্বচ্ছ রঙের সাথে প্রতিস্থাপন করতে ডামি হিসাবে কাজ করে।

এর পরে কাস্টম ডায়ালগ লেআউটটি রেজ / লেআউট / ডায়লগ.এক্সএমএল তৈরি করুন

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialoglayout"
    android:layout_width="match_parent"
    android:background="@drawable/DesiredImageBackground"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edittext1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textSize="18dp" />

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Dummy Button"
        android:textSize="18dp" />

</LinearLayout>

অবশেষে এখানে আমাদের ডায়লগটি রয়েছে যা কাস্টম ভিউ সেট করে যা আমাদের ডায়ালগ.এক্সএমএল ব্যবহার করে:

Dialog customDialog;
LayoutInflater inflater = (LayoutInflater) getLayoutInflater();
View customView = inflater.inflate(R.layout.dialog, null);
// Build the dialog
customDialog = new Dialog(this, R.style.CustomDialog);
customDialog.setContentView(customView);
customDialog.show();

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


এটি জেলিবিনের জন্য কাজ করে এখনের জন্য আমি এটি অন্যান্য বুলি পরীক্ষা করতে সক্ষম হতে পারি না
সিনিয়র

সবচেয়ে পরিষ্কার এবং সবচেয়ে মার্জিত সমাধান বলে মনে হচ্ছে। Kitkat 4.4 এবং 4.3 এ কাজ করে।
ডেভিড

আমার একটি কাস্টম ডায়লগ রয়েছে এবং আমি এটি না হওয়া পর্যন্ত কিছুই কাজ করছে না , যাদুটি DialogFragmentযখন আপনি করেন তখন একটি কাস্টম ডায়ালগের সমস্ত ম্যাজিক (যা প্রসারিত হয় ) আসে: Dialog customDialog = new Dialog(context, STYLE);ধন্যবাদ, সত্যই, ধন্যবাদ।
সিয়েরিসিমো

এটি সাহায্য করে জেনে রাখা ভাল :)
আইকন্যাটক্লাউডগুলি

এটি ডায়লগ উইন্ডোটির জন্য একটি কবজির মতো কাজ করে! (মূল উইন্ডোটি ধুয়ে ফেলার জন্য আপনি একটি ব্ল্যাক 60 পার্সেন্টও সংজ্ঞায়িত করতে পারেন) দুর্ভাগ্যজনক পার্শ্ব প্রতিক্রিয়াটি হ'ল ডায়ালগটিতে আমার সমস্ত মতামত ডায়ালগের জন্য আমি যে
প্যাডিংগুলি

25

আপনি (JUST) উইন্ডো ডায়ালগ প্রস্থের জন্য শতাংশ ব্যবহার করতে পারেন।

হলো থিম থেকে এই উদাহরণটি দেখুন:

<style name="Theme.Holo.Dialog.NoActionBar.MinWidth">
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
</style>

 <!-- The platform's desired minimum size for a dialog's width when it
     is along the major axis (that is the screen is landscape).  This may
     be either a fraction or a dimension. -->
<item type="dimen" name="dialog_min_width_major">65%</item>

আপনাকে কেবল এই থিমটি প্রসারিত করতে হবে এবং "মেজর" এবং "মাইনর" এর মানগুলি 65% পরিবর্তে 90% এ পরিবর্তন করতে হবে।

শুভেচ্ছা।


1
ডায়লগ দিয়ে এটি ব্যবহার করতে আপনার ডায়ালগ নির্মাতা কনস্ট্রাক্টারে আপনার কাস্টম শৈলীটি পাস করুন :)
সোসাইট অক্টোব

22

নিম্নলিখিতটি আমার পক্ষে ভাল কাজ করেছে:

    <style name="MyAlertDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
        <item name="windowFixedWidthMajor">90%</item>
        <item name="windowFixedWidthMinor">90%</item>
    </style>

(দ্রষ্টব্য: উইন্ডোমিনউইথথমজর / মাইনর পূর্ববর্তী উত্তরে যেমন পরামর্শ করা হয়েছে তেমন কৌশলটি করেনি My আমার ডায়লগগুলি সামগ্রীর উপর নির্ভর করে আকার পরিবর্তন করতে থাকে)

এবং তারপর:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyAlertDialogTheme);

3
এখন পর্যন্ত সেরা উত্তর। আমার জন্য নিখুঁতভাবে কাজ করেছেন!
পবন

আমি ভাবছি: কোডের মাধ্যমে শতাংশে নির্ধারিত এমন বিশেষ মাত্রার মান আমি কীভাবে পেতে পারি?
অ্যান্ড্রয়েড বিকাশকারী

18

প্রকৃত 90% গণনার সাথে সমাধান:

@Override public void onStart() {
   Dialog dialog = getDialog();
   if (dialog != null) {
     dialog.getWindow()
        .setLayout((int) (getScreenWidth(getActivity()) * .9), ViewGroup.LayoutParams.MATCH_PARENT);
   }
}

যেখানে getScreenWidth(Activity activity)নিম্নলিখিতটি সংজ্ঞায়িত করা হয়েছে (সর্বোত্তমভাবে কোনও ইউটিলস শ্রেণিতে রাখা হয়েছে):

public static int getScreenWidth(Activity activity) {
   Point size = new Point();
   activity.getWindowManager().getDefaultDisplay().getSize(size);
   return size.x;
}

ডায়লগের মতো কাজ করা উচিত এমন একটি অ্যাপক্যাম্প্যাটাক্টিভিটির জন্য কবিতার মতো কাজ করে

আমি
এটির

@ Dr.aNdRO কিভাবে? কোন লাইন? আপনি কি নিশ্চিত যে এটি কোডের এই টুকরা এবং অন্য কোনও এসএমটি নয়?
মেহমেট কে

.setLayout () আমি এই লাইনে পৌঁছে যাচ্ছি, যখন আমি এটিকে র‌্যাপ
কন্টেন্টে


10

ডিভাইসের প্রস্থ পান:

public static int getWidth(Context context) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    WindowManager windowmanager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
    return displayMetrics.widthPixels;
}

তারপরে 90% ডিভাইস ডায়ালগ তৈরির জন্য এটি ব্যবহার করুন,

Dialog filterDialog = new Dialog(context, R.style.searchsdk_FilterDialog);

filterDialog.setContentView(R.layout.searchsdk_filter_popup);
initFilterDialog(filterDialog);
filterDialog.setCancelable(true);
filterDialog.getWindow().setLayout(((getWidth(context) / 100) * 90), LinearLayout.LayoutParams.MATCH_PARENT);
filterDialog.getWindow().setGravity(Gravity.END);
filterDialog.show();

8

ঠিক আছে, এটির আগে আপনাকে এই কথোপকথনের উচ্চতা এবং প্রস্থ নির্ধারণ করতে হবে (ডায়ালগ.শো ())

সুতরাং, এই জাতীয় কিছু করুন:

dialog.getWindow().setLayout(width, height);

//then

dialog.show()

আমার জন্য মাত্রা নির্ধারণ করে না। এপিআই> = 21.
ওডিস

7

আমি ভাবতে পারি সবচেয়ে সহজ উপায় -

যদি আপনার ডায়ালগটি উল্লম্ব লিনিয়ারলআউট থেকে তৈরি হয় তবে কেবল একটি "উচ্চতা পূরণ" ডামি ভিউ যুক্ত করুন, এটি পর্দার পুরো উচ্চতা দখল করবে।

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:weightSum="1">

    <EditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/editSearch" />

    <ListView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/listView"/>


   <!-- this is a dummy view that will make sure the dialog is highest -->
   <View
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_weight="1"/>

</LinearLayout>

লক্ষ্য করুন android:weightSum="1"LinearLayout গুণাবলী এবং android:layout_weight="1"ডামি দেখুন গুণাবলী মধ্যে


নিস! এটি আমার ওয়েবভিউটিকে অত্যন্ত স্বল্প সংক্ষেপে শুরু করা এবং অনপেজফিনিশড পরে পূর্ণ উচ্চতায় প্রসারিত করা থেকে বিরত রাখে। যশ!
ন্যান্সি

6

ঠিক আছে, এটির আগে আপনাকে এই কথোপকথনের উচ্চতা এবং প্রস্থ নির্ধারণ করতে হবে (ডায়ালগ.শো ())

সুতরাং, এই জাতীয় কিছু করুন:

dialog.getWindow().setLayout(width, height);

//then

dialog.show()

এই কোডটি পেয়ে আমি এটিকে কিছু পরিবর্তন করেছি:

dialog.getWindow().setLayout((int)(MapGeaGtaxiActivity.this.getWindow().peekDecorView().getWidth()*0.9),(int) (MapGeaGtaxiActivity.this.getWindow().peekDecorView().getHeight()*0.9));

তবে, ডিভাইসটির অবস্থান পরিবর্তন করলে ডায়ালগ আকার পরিবর্তন করতে পারে। মেট্রিক্স পরিবর্তিত হলে সম্ভবত আপনাকে নিজেরাই পরিচালনা করতে হবে। পিডি: পিকডেকরভিউ, সূচিত করে যে ক্রিয়াকলাপে লেআউটটি সঠিকভাবে শুরু হয়েছে অন্যথায় আপনি ব্যবহার করতে পারেন

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int wwidth = metrics.widthPixels;

পর্দার আকার পেতে


6

আপনার ডায়লগ অবজেক্টটি আরম্ভ করার পরে এবং সামগ্রীটির দৃশ্য সেট করুন। এটি করুন এবং উপভোগ করুন।

(ক্ষেত্রে আমি 90% প্রস্থে এবং 70% উচ্চতায় সেট করছি কারণ প্রস্থ 90% এটি সরঞ্জামদণ্ডের ওপরে হবে)

DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = (int) ((int)displaymetrics.widthPixels * 0.9);
int height = (int) ((int)displaymetrics.heightPixels * 0.7);
d.getWindow().setLayout(width,height);
d.show();

4

আমার উত্তরটি কোমার উপর ভিত্তি করে তবে এটি অন স্টার্টকে ওভাররাইড করার প্রয়োজন হয় না তবে কেবলমাত্র ক্রিসেট ভিউ যা আপনি নতুন টুকরো তৈরি করার সময় প্রায় সবসময়ই ডিফল্টরূপে ওভাররাইড হয়।

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.your_fragment_layout, container);

    Rect displayRectangle = new Rect();
    Window window = getDialog().getWindow();
    window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

    v.setMinimumWidth((int)(displayRectangle.width() * 0.9f));
    v.setMinimumHeight((int)(displayRectangle.height() * 0.9f));

    return v;
}

আমি এটি অ্যান্ড্রয়েড 5.0.1 এ পরীক্ষা করেছি।


3

কাস্টম সংলাপের প্রস্থের জন্য আমার বৈকল্পিক এখানে:

DisplayMetrics displaymetrics = new DisplayMetrics();
mActivity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = (int) (displaymetrics.widthPixels * (ThemeHelper.isPortrait(mContext) ? 0.95 : 0.65));

WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = width;
getWindow().setAttributes(params);

সুতরাং ডিভাইস ওরিয়েন্টেশন উপর নির্ভর করে (ThemeHelper.isPortrait(mContext) ) এর ডায়ালগের প্রস্থ হয় 95% (প্রতিকৃতি মোডের জন্য) বা 65% (ল্যান্ডস্কেপের জন্য) হবে। এটি লেখকটি চেয়েছিলেন আরও কিছুটা তবে এটি কারওর পক্ষে কার্যকর হতে পারে।

আপনাকে একটি ক্লাস তৈরি করতে হবে যা ডায়ালগ থেকে প্রসারিত এবং এই কোডটি আপনার মধ্যে putোকাতে হবে onCreate(Bundle savedInstanceState)

সংলাপের উচ্চতার জন্য কোডটি এর সাথে সমান হওয়া উচিত।


কী ThemeHelper? আমার প্রকল্পে এই ক্লাসটি উপলব্ধ নেই।
নেমি

ThemeHelperআমার প্রয়োজনের জন্য কেবল একটি সহায়ক শ্রেণি। isPortrait(Context)ডিভাইসের স্ক্রিন ওরিয়েন্টেশন প্রতিকৃতি বা ল্যান্ডস্কেপ কিনা তা এর পদ্ধতিতে ফিরে আসে।
গোষ্ঠী

এটি একবারে যদি ডায়লগ লোড হয়ে যায় এবং তারপরে আমরা ওরিয়েন্টেশনটি পরিবর্তন করি তবে এটির প্রাথমিক সেটিংসটি
onCreate

3
public static WindowManager.LayoutParams setDialogLayoutParams(Activity activity, Dialog dialog)
    {
        try 
        {
            Display display = activity.getWindowManager().getDefaultDisplay();
            Point screenSize = new Point();
            display.getSize(screenSize);
            int width = screenSize.x;

            WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
            layoutParams.copyFrom(dialog.getWindow().getAttributes());
            layoutParams.width = (int) (width - (width * 0.07) ); 
            layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
            return layoutParams;
        } 
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }

3

উপরের উত্তরগুলি বেশিরভাগই ভাল তবে পুরোপুরি আমার জন্য কোনওটিই কাজ করেনি। সুতরাং আমি @nmr থেকে উত্তরটি সংযুক্ত করে এটি পেয়েছি।

final Dialog d = new Dialog(getActivity());
        //  d.getWindow().setBackgroundDrawable(R.color.action_bar_bg);
        d.requestWindowFeature(Window.FEATURE_NO_TITLE);
        d.setContentView(R.layout.dialog_box_shipment_detail);

        WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); // for activity use context instead of getActivity()
        Display display = wm.getDefaultDisplay(); // getting the screen size of device
        Point size = new Point();
        display.getSize(size);
        int width = size.x - 20;  // Set your heights
        int height = size.y - 80; // set your widths

        WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
        lp.copyFrom(d.getWindow().getAttributes());

        lp.width = width;
        lp.height = height;

        d.getWindow().setAttributes(lp);
        d.show();

3
    ...
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    Dialog d = builder.create(); //create Dialog
    d.show(); //first show

    DisplayMetrics metrics = new DisplayMetrics(); //get metrics of screen
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int height = (int) (metrics.heightPixels*0.9); //set height to 90% of total
    int width = (int) (metrics.widthPixels*0.9); //set width to 90% of total

    d.getWindow().setLayout(width, height); //set layout

3
লেআউটটি সেট করার আগে ডায়ালগটি দেখানো আমার পক্ষে কাজ করে।
অ্যাঞ্জেল কোহ

2

যদি আপনি সীমাবদ্ধ লেআউটটি ব্যবহার করে থাকেন তবে স্ক্রিনের শতকরা এক ভাগ পূরণ করতে আপনি এর ভিতরে যে কোনও দৃশ্য সেট করতে পারেন:

layout_constraintWidth_percent = "0.8"

সুতরাং, উদাহরণস্বরূপ, যদি আপনার ডায়ালগের ভিতরে কোনও স্ক্রোলভিউ থাকে এবং আপনি এটিকে স্ক্রিনের উচ্চতার শতাংশে সেট করতে চান। এটি এমন হবে:

<ScrollView
            android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintHeight_percent="0.8">

আশা করি এটি কাউকে সাহায্য করবে !!


2

সতর্কতা ডায়ালগটি এই থিমটি দিন

<style name="DialogTheme" parent="Theme.MaterialComponents.Light.Dialog.MinWidth">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="android:windowMinWidthMajor">90%</item>
    <item name="android:windowMinWidthMinor">90%</item>
</style>

আপনি কি আপনার কোডটির জন্য কিছু ব্যাখ্যা যোগ করতে পারেন?
ইগোর মাইয়্যুক

1

এখানে একটি সংক্ষিপ্ত উত্তর যা আমার পক্ষে কাজ করেছে (API 8 এবং API 19 তে পরীক্ষিত)।

Dialog mDialog;
View   mDialogView;
...
// Get height
int height = mDialog.getWindow()
.getWindowManager().getDefaultDisplay()
.getHeight();

// Set your desired padding (here 90%)
int padding = height - (int)(height*0.9f);

// Apply it to the Dialog
mDialogView.setPadding(
// padding left
0,
// padding top (90%)
padding, 
// padding right
0, 
// padding bottom (90%)
padding);


1

আপনার পছন্দসই-সক্ষম ডায়ালগটি প্রদর্শনের জন্য কাস্টমডায়ালগের মতো একটি স্টাইল @ শৈলী.এক্সএমএল ব্যবহার করা উচিত।

<style name="CustomDialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@color/colorWhite</item>
        <item name="android:editTextColor">@color/colorBlack</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>

এবং Activity.java তে এই স্টাইলটি ব্যবহার করুন

Dialog dialog= new Dialog(Activity.this, R.style.CustomDialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.custom_dialog);

এবং আপনার কাস্টম_ডায়ালগ.এক্সএমএলটি আপনার লেআউট ডিরেক্টরিতে থাকা উচিত

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

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="20dp"
        android:id="@+id/tittle_text_view"
        android:textColor="@color/colorBlack"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="10dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp">

        <EditText
            android:id="@+id/edit_text_first"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:hint="0"
            android:inputType="number" />

        <TextView
            android:id="@+id/text_view_first"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:gravity="center"/>

        <EditText
            android:id="@+id/edit_text_second"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:hint="0"
            android:layout_marginLeft="5dp"
            android:inputType="number" />

        <TextView
            android:id="@+id/text_view_second"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:gravity="center"/>

    </LinearLayout>

</LinearLayout>

0
    final AlertDialog alertDialog;

    LayoutInflater li = LayoutInflater.from(mActivity);
    final View promptsView = li.inflate(R.layout.layout_dialog_select_time, null);

    RecyclerView recyclerViewTime;
    RippleButton buttonDone;

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mActivity);
    alertDialogBuilder.setView(promptsView);

    // create alert dialog
    alertDialog = alertDialogBuilder.create();

    /**
     * setting up window design
     */
    alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);


    alertDialog.show();

    DisplayMetrics metrics = new DisplayMetrics(); //get metrics of screen
    mActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int height = (int) (metrics.heightPixels * 0.9); //set height to 90% of total
    int width = (int) (metrics.widthPixels * 0.9); //set width to 90% of total

    alertDialog.getWindow().setLayout(width, height); //set layout
    recyclerViewTime = promptsView.findViewById(R.id.recyclerViewTime);


    DialogSelectTimeAdapter dialogSelectTimeAdapter = new DialogSelectTimeAdapter(this);
    RecyclerView.LayoutManager linearLayoutManager = new LinearLayoutManager(this);
    recyclerViewTime.setLayoutManager(linearLayoutManager);
    recyclerViewTime.setAdapter(dialogSelectTimeAdapter);

    buttonDone = promptsView.findViewById(R.id.buttonDone);
    buttonDone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            alertDialog.dismiss();

        }
    });

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