শিরোনাম ছাড়াই ডায়ালগফ্রেগমেন্ট কীভাবে তৈরি করবেন?


358

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

এটি বিশেষভাবে বেদনাদায়ক, যেহেতু আমার কাস্টম ডায়ালগফ্র্যাগমেন্টটি একটি সাদা ব্যাকগ্রাউন্ড ব্যবহার করে, তাই পরিবর্তনটি খুব কুখ্যাত কারণ এটি বাদ দেওয়া উচিত নয়।

আমি আপনাকে আরও গ্রাফিকাল পদ্ধতিতে এটি দেখাই:

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

আমার ডায়ালগফ্রেগমেন্টের জন্য এখন এক্সএমএল কোডটি নিম্নরূপ:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:id="@+id/holding" 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:background="@drawable/dialog_fragment_bg"
        >
        <!-- Usamos un LinearLayout para que la imagen y el texto esten bien alineados -->
        <LinearLayout
            android:id="@+id/confirmationToast" 
            android:orientation="horizontal" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            >

            <TextView android:id="@+id/confirmationToastText" 
            android:layout_width="wrap_content"
            android:layout_height="fill_parent" 
            android:text="@string/help_dialog_fragment"
            android:textColor="#AE0000"
            android:gravity="center_vertical"
            />

        </LinearLayout>
        <LinearLayout
            android:id="@+id/confirmationButtonLL" 
            android:orientation="horizontal" 
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:gravity="center_horizontal"
            >    
            <Button android:id="@+id/confirmationDialogButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_marginBottom="60dp"
                android:background="@drawable/ok_button">
            </Button>
        </LinearLayout>
    </LinearLayout>
</ScrollView>

এবং ক্লাসের কোড যা ডায়ালগফ্র্যাগমেন্টটি কার্যকর করে:

public class HelpDialog extends DialogFragment {

    public HelpDialog() {
        // Empty constructor required for DialogFragment
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //Inflate the XML view for the help dialog fragment
        View view = inflater.inflate(R.layout.help_dialog_fragment, container);
        TextView text = (TextView)view.findViewById(R.id.confirmationToastText);
        text.setText(Html.fromHtml(getString(R.string.help_dialog_fragment)));
        //get the OK button and add a Listener
        ((Button) view.findViewById(R.id.confirmationDialogButton)).setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 // When button is clicked, call up to owning activity.
                HelpDialog.this.dismiss();
             }
         });
        return view;
    }

}

এবং মূল ক্রিয়াকলাপে নির্মাণ প্রক্রিয়া:

/**
 * Shows the HelpDialog Fragment
 */
private void showHelpDialog() {
    android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
    HelpDialog helpDialog = new HelpDialog();
    helpDialog.show(fm, "fragment_help");
}

ডায়ালগের সাথে সম্পর্কিত এই উত্তরটি এখানে Android এর সাথেও খাপ খায় কিনা জানি না : শিরোনাম ছাড়া ডায়ালগ কীভাবে তৈরি করবেন?

আমি কীভাবে এই শিরোনাম অঞ্চল থেকে মুক্তি পাব?


এই শো হেল্পডায়ালগ পদ্ধতিটি ফ্র্যাগমেন্টএটিভিটি বা ক্রিয়াকলাপ শ্রেণি থেকে কল করা হয় ??
Sjk

80
+1 ... আমি মনে করি এই প্রথম কোনও প্রশ্নটি পড়ার সময় আমি হেসেছিলাম
জেসন ক্রসবি

1
রসিকতার জন্য +1। আপনার সমস্যার গ্রাফিকাল ব্যাখ্যাটি হ'ল এই সমস্যাটি সম্পর্কে আমি ঠিক কেমন অনুভব করেছি!
লুইস আর্টোলা

উত্তর:


589

আপনার কোডটিতে এই লাইনটি যুক্ত করুন HelpDialog.onCreateView(...)

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

আপনি এইভাবে শিরোনাম ছাড়াই একটি উইন্ডো পেতে স্পষ্টভাবে জিজ্ঞাসা করছেন :)


সম্পাদনা

নীচের মতামত হিসাবে @DataGrahamএবং @Blundellনির্দেশিত হিসাবে , onCreateDialog()পরিবর্তে পদ্ধতিতে শিরোনাম-কম উইন্ডোটির জন্য অনুরোধ যুক্ত করা নিরাপদ onCreateView()। আপনি যখন নিজের খণ্ডটি এই হিসাবে ব্যবহার করছেন না তখন আপনি এনপিইকে এনওয়াইং করা রোধ করতে পারেন Dialog:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
  Dialog dialog = super.onCreateDialog(savedInstanceState);

  // request a window without the title
  dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
  return dialog;
}

61
অবশ্যই আপনি getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE)পাশাপাশি সুবিধা পদ্ধতিটিও ব্যবহার করতে পারেন ...
a.bertucci

8
এর পরিবর্তে অনক্রিটডায়ালগে এটি করতে চাইতে পারে, যদি আপনার খণ্ডটি কথোপকথন হিসাবে প্রদর্শিত না হয়।
ডেটাগ্রাহাম

2
@ a.bertucci আপনি সেরা! তবে আপনি যদি কখনও সেই অংশটিকে একটি সাধারণ খণ্ড হিসাবে যুক্ত করেন তবে আপনাকে getDialogএনপিই ফিরিয়ে দেবে
ব্লুন্ডেল

4
এটি আমার কথোপকথনের প্রস্থ সঙ্কুচিত করে। এই ইস্যুটির জন্য কোনও কাজের সমাধান?
ক্লকস্মিথে

2
@ ক্লকস্মিথ আপনার সংলাপটির android:layout_widthবিন্যাসে মূল দৃশ্যের জন্য বৈশিষ্ট্যটি সেট করা আছে wrap_content?
আতাউলম

78

ডায়ালগ খণ্ডটিতে সেট স্টাইল পদ্ধতি রয়েছে, যা জাভা ডক তৈরির আগে কল করা উচিত । এছাড়াও ডায়ালগের স্টাইল একই পদ্ধতিতে সেট করা যেতে পারে

public static MyDialogFragment newInstance() {
        MyDialogFragment mDialogFragment = new MyDialogFragment();
        //Set Arguments here if needed for dialog auto recreation on screen rotation
        mDialogFragment.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
        return mDialogFragment;
}

3
সর্বাধিক, আমি সেট টাইপ (STYLE_NO_TITLE, 0) ব্যবহার করার চেষ্টা করেছি। তবে ফলাফলটি হ'ল আমার ডায়লগটি প্রস্থের 1/4 অংশে কেটে গেছে, তাই ডায়ালগের বার্তাটি সমস্ত দেখানো হয়নি।
vliux

1
আমি মনে করি অ্যান্ড্রয়েড উত্সগুলি দেখানো থেকে কোডটি দুটি ক্ষেত্রেই আসলে একই। আমার একই সমস্যা হচ্ছে যেখানে এটি 1/4 আকারে কেটে দিচ্ছে যদিও :( এটি এখনও সমাধান হয়নি
অভিষেকমুখের্গ

1
এটি করার সেরা উপায় এটি।
শয়ফার

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

1
আপনার বিন্যাসের মূল দেখার সমস্ত সরাসরি শিশুদের ম্যাচ_প্যারেন্টের প্রস্থ হওয়া উচিত। তারপরে আপনি একটি সাধারণ প্রস্থ সহ একটি ডায়ালগ পাবেন।
নিকোলাসইস

22
FragmentManager manager = getSupportFragmentManager();
SettingsDialog sd = new SettingsDialog();
sd.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
sd.show(manager, "settings_dialog");

1
sd.setStyle (ডায়ালগফ্র্যাগমেন্ট। STYLE_NORMAL, android.R.style.Theme_Holo_Dialog_NoActionBar) আমি বলব
অ্যান্ড্রয়েডার

এত পরীক্ষার পরেও ওএমজি, এটিই কেবল কাজ করেছিল।
অ্যালেক্স

16

সহজ উপায় চেষ্টা করুন

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, 0);
}

স্যামসুং গ্যালাক্সি এস 4 এ সূক্ষ্মভাবে কাজ করে।
কুলমাইন্ড

11
public class LoginDialog extends DialogFragment {   
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.login_dialog, null);
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        return view;
    }   
}

10

থিমহোলো_ডায়ালগ_নোকশনবারে স্টাইলটি সেট করুন:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NORMAL, android.R.style.Theme_Holo_Dialog_NoActionBar);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.