আপনি কয়েকটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন এবং আইসিএসে দেখতে পান এমন কোনও সহায়তা ওভারলে কীভাবে তৈরি করব?


93

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

ES ফাইল এক্সপ্লোরার ES ফাইল এক্সপ্লোরার

উত্তর:


84

আসুন ধরে নেওয়া যাক আপনি সাধারণভাবে কল করবেন setContentView(R.layout.main)তবে প্রথমে আপনি এই ওভারলেটি দেখতে চান have

পদক্ষেপ # 1: FrameLayoutজাভা কোডে একটি তৈরি করুন এবং এটি পাস করুন setContentView()

পদক্ষেপ # 2: LayoutInflaterস্ফীত করতে ব্যবহার R.layout.mainকরুন FrameLayout

পদক্ষেপ # 3: এর LayoutInflaterমধ্যে ওভারলেটি স্ফীত করতে ব্যবহার করুন FrameLayout

পদক্ষেপ # 4: ব্যবহারকারী ওভারলে বরখাস্ত করার জন্য বোতামটি (বা যাই হোক না কেন) আলতো চাপলে ওভারলেটি removeView()ওভারলে থেকে সরিয়ে ফেলার জন্য কল করুন FrameLayout

যেহেতু ওভারলেটি পরবর্তীকালের সন্তানের, তাই FrameLayoutএটির সামগ্রীর শীর্ষে ভেসে উঠবে R.layout.main


6
@ এসুপার্জ ২৮: হ্যাঁ, ভাল, হাতে আঁকা তীরের মাথা এবং বুদবুদ ছাড়া। আপনি তাদের জন্য আপনার নিজের উপর। :-)
কমন্সওয়্যার

আপনি যা চান তা পরিচালনা করতে পেরেছি কিনা তা আমি জানি না, তবে এখানে অন্য বিকল্প রয়েছে। stackoverflow.com/questions/8841240/... উত্তর প্রদান CommonsWare, শুধু তীর সেট করার জন্য আমাকে যেটা কর্তৃক প্রদত্ত mantain পারেন, তীর সহ ইমেজের সাথে ইতিমধ্যে একটি resourceImage বা backgroundImage সঙ্গে নির্দেশাবলীর FrameLayout সংজ্ঞায়িত হয় (এবং স্বচ্ছতা)।
এডিসন স্যান্টোস

4
ফ্রেমলআউট থেকে নীচে থাকা বাচ্চাদের অবস্থানের সাথে কি এটি করার কোনও উপায় আছে?
4gus71n

@ কমন্সওয়্যার - স্যার যে কোনও ডিভাইস নির্বিশেষে এটি কাজ করবে?
র্যাট-এ-ট্যাট-এ-ট্যাট রাতাতুইলে

4
@ ব্যবহারকারী 3364963: জিনিসগুলির অবস্থান গতিশীলভাবে সামঞ্জস্য করুন। আমার উত্তর কিছুটা সরল করা হয়েছিল। আমি ধরে নিই যে তারা হাইলাইট হওয়া উপাদানগুলির অবস্থান নির্ধারণ করে এবং "কোচ চিহ্ন" এর স্থানাঙ্কগুলি সামঞ্জস্য করে। ViewGroup"কোচ চিহ্ন" স্তরটির জন্য একটি কাস্টম এটি পরিচালনা করতে পারে এবং লাইব্রেরি রয়েছে (উদাহরণস্বরূপ ShowcaseView) pattern প্যাটার্নের ক্যানড প্রয়োগগুলি সরবরাহ করে।
কমন্সওয়্যার

80

ইউএক্স আলোচনায় "কোচ চিহ্ন" হ'ল "সহায়তা ওভারলে" :-)

کوچ_মার্ক.এক্সএমএল হ'ল আপনার কোচ চিহ্নের বিন্যাস

কোচ_মার্ক_মাস্টার_ভিউইচ কোচ_মার্ক.এক্সএমএল শীর্ষ সর্বাধিক দর্শন (মূল) এর আইডি

public void onCoachMark(){

    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    dialog.setContentView(R.layout.coach_mark);
    dialog.setCanceledOnTouchOutside(true);
    //for dismissing anywhere you touch
    View masterView = dialog.findViewById(R.id.coach_mark_master_view);
    masterView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });
    dialog.show();
}

কোচ_মার্ক.এক্সএমএল এর নমুনা যুক্ত করা (ওদেড ব্রেইনার প্রদত্ত এই দুর্দান্ত সমাধানটিতে), সুতরাং পিপিএলটির পক্ষে কাজ করার উদাহরণটি দ্রুত দেখার জন্য অনুলিপি করা এবং পেস্ট করা সহজ।

এখানে কোচ_মার্ক.এক্সএমএল এর নমুনা - আপনার চিত্রে -> অঙ্কনযোগ্য / কোচ_মার্কগুলি পরিবর্তন করুন:

কোচ_মার্ক.এক্সএমএল

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/coach_mark_master_view">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
         <ImageView
             android:id="@+id/coach_marks_image"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:layout_centerInParent="true"
             android:layout_gravity="center_horizontal"
             android:src="@drawable/coach_marks" />
    </RelativeLayout>
</LinearLayout>

এবং প্যাডিং অপসারণ করতে optionচ্ছিকভাবে এই থিমটি ব্যবহার করুন:

<style name="WalkthroughTheme" parent="Theme.AppCompat">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

হ্যালো, আপনি এই ডায়ালগটি কীভাবে পর্দার সাথে মেলে ধরতে পারেন? ডকুমেন্টেশন থেকে A dialog is a small window that prompts [...]. A dialog does not fill the screen and is normally used for modal events [...].,। যদি আমি এই কোডটি ব্যবহার করি তবে আমি আমার মাস্টার ভিউটি স্ক্রিনের একটি ছোট অংশে সংকুচিত করি। যদি আমি সেট করি android:layout_width="640dp" android:layout_height="480dp"(এটি হ'ল আমি যে পর্দার সাথে পরীক্ষা করছি তার আসল মানগুলি), এটি সঠিকভাবে কাজ করে। (অবশ্যই এই একটি সম্ভবপর সমাধান নয়)
ocramot

@ ক্রোমোট: উপরের উদাহরণটি ম্যাচ_পিতা এবং উইন্ডোর কারণে পুরো পর্দা হওয়া উচিত F FEATURE_NO_TITLE
ওদেড ব্রেইনার

তারপরে অবশ্যই অন্য কোনও সমস্যা থাকতে হবে, কারণ আমি এটিকে
অন্যভাবে দেখছি

4
আমি জানি এটি কমপক্ষে কয়েক মাস পুরাতন তবে পূর্ণ পর্দার প্রশ্নটি কি কখনও আবিষ্কার করা যায়?
সিবিডড

4
যারা ডায়লগের থিমটি সেট করতে জানেন না তাদের জন্য, ডায়ালগটি কেবল ঠিক new Dialog(getContext(), R.style.WalkthroughTheme);
তেমনভাবে

4

আপনি এটি খুব দ্রুত করতে পারেন। লিনিয়ারলআউটের উদাহরণ হিসাবে আপনি যুক্ত করুন যেখানে আপনি আলফার সাথে একটি ছবি রেখেছিলেন যা আপনার সহায়তা তথ্যের সাথে সামঞ্জস্যপূর্ণ এবং আপনি কোনও ওভারলেয়ের মতো কী আঁকতে চান। আপনি আপনার ক্রিয়াকলাপের এক্সএমএল এ গানের দৃশ্যমানতার সাথে আপনার ক্রিয়াকলাপের বিন্যাসের পরে এই লেআউটটিকে রিলেটিভ লেআউটে রেখেছেন। আপনি যখন সাহায্যের তথ্য আঁকতে চান, আপনি কেবল এই দৃশ্যমানতাটি দৃশ্যমানতে সেট করার জন্য প্রয়োজন।

আমি আশা করি, আমি স্পষ্ট, যদি আপনার কোন প্রশ্ন থাকে, তবে দয়া করে তাদের উত্তর দিন।


আপনার ইনপুট জন্য ধন্যবাদ। আমি এটি এটি সম্পন্ন চিত্রিত। আমাকে নীচের উত্তরে ক্রেডিট দিতে হবে যদিও আমি এটি তৈরি করতে যাচ্ছি। এটি আরও পরিচালনাযোগ্য বলে মনে হচ্ছে এবং আমাকে আমার মূল ক্রিয়াকলাপের বিন্যাস পরিবর্তন করতে হবে না।
ssuperz28

1

বর্তমান ক্রিয়াকলাপের শীর্ষে প্রোগ্রামালিকভাবে কীভাবে ওভারলে লেআউট দেখায় তা আমার অন্য উত্তরটি দেখুন। ক্রিয়াকলাপের বিন্যাস.এক্সএমএল ওভারলে ত্বক সম্পর্কে কিছু জানার দরকার নেই। আপনি ওভারলেটি অর্ধ-স্বচ্ছ রাখতে পারেন, স্ক্রিনের কেবলমাত্র একটি অংশ, এক বা একাধিক পাঠ্যদর্শন এবং এতে বোতামগুলি কভার করতে পারেন ... প্রোগ্রামিয়ালি কীভাবে একটি বোতাম ওভারলে করবেন?

  • রেজ / লেআউট / বিরামযুক্ত। xml আপেক্ষিক লেআউট টেম্পলেট তৈরি করুন বা কোনও লেআউট টপলেভেল ব্যবহার করুন
  • ওভারলে ত্বক দেখানোর জন্য একটি ফাংশন তৈরি করুন
  • কী হ'ল লেআউট.এক্সএমএল-এ হ্যান্ডেল পাওয়া, অবজেক্ট দেখতে এক্সএমএল পার্স করতে লেআউটআইনফ্লেটার ক্লাস ব্যবহার করা, বর্তমান লেআউট স্ট্রাকচারটিতে ওভারলে ভিউ যুক্ত করা
  • আমার উদাহরণ ওভারলে অবজেক্টটিকে দৃশ্য কাঠামো থেকে সম্পূর্ণ অপসারণ করে ধ্বংস করতে একটি টাইমার ব্যবহার করে। এটি সম্ভবত আপনি যা চান তা কোনও ট্রেস ছাড়াই পরিত্রাণ পেতে চান।

আমার লক্ষ্যটি ছিল যে মূল ক্রিয়াকলাপগুলি কোনও ওভারলে ত্বক সম্পর্কে সচেতন নয়, ওভারলেগুলি আসে এবং যায়, বিভিন্ন বিভিন্ন ওভারলেগুলি এখনও ওভারলে 1.xML টেক্সট ফাইলগুলি টেম্পলেট হিসাবে ব্যবহার করতে সক্ষম হয় এবং বিষয়বস্তু প্রোগ্রামিয়ালি আপডেট করা উচিত। কমন্সওয়্যার আমাদের পোস্টে যা বলেছিল তা আমি খুব বেশি করি যা শুরু করার জন্য আসল প্রোগ্রাম কোডটি দেখায়।

দাবি অস্বীকার: ওপেনস "আপনার ইনপুটটির জন্য ধন্যবাদ। আমি এটি এটি সম্পন্ন করে দেখিয়েছি below নীচের উত্তরটির জন্য আমাকে ক্রেডিট দিতে হবে" মন্তব্যটি আমার উত্তর নয় তবে কমন্সওয়্যার উত্তর বলে। স্ট্যাকওভারফ্লো পোস্ট অর্ডার পরিবর্তন করেছে।

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