টুকরা বা ক্রিয়াকলাপে সরঞ্জামদণ্ড সহ সমন্বয়কারী বিন্যাস


95

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

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


4
হাই, আপনি কি কোনও সমাধান খুঁজে পেয়েছেন?
সের্গ

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

এখন কোন আপডেট বা এর থেকে ভাল সমাধান?
সাগর নায়ক

উত্তর:


56

আমার হিসাবে এটি প্রতিটি খণ্ডে অ্যাপবার এবং সরঞ্জামদণ্ড থাকা খুব অদ্ভুত বলে মনে হচ্ছে। তাই আমি ক্রিয়াকলাপে টুলবার সহ একক অ্যাপবারটি বেছে নিয়েছি।

সমন্বয়কারী FrameLayoutলেআউটের সাথে এই সমস্যাটি সমাধান করতে আপনাকে আপনার (বা অন্য কোনও লেআউট) এর আলাদা আচরণ নির্ধারণ করতে হবে যা আপনি ডিফল্ট আচরণকে ওভাররাইড করতে চান এমন প্রতিটি খণ্ড থেকে টুকরো টুকরো টুকরো করে রাখতে হবে।

ধরে নেওয়া যাক, আপনার ডিফল্ট আচরণ এটি app:layout_behavior="@string/appbar_scrolling_view_behavior"

তারপরে আপনার খণ্ড_অ্যাক্টিভিটি_এলআউটআউট.এক্সএমএলে আপনার এমন কিছু থাকতে পারে:

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/coordinator"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/dashboard_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.Toolbar"
            app:layout_scrollFlags="scroll|enterAlways"/>
    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:id="@+id/dashboard_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>

এবং প্রতিটি খণ্ডে আপনি প্রয়োগ করতে চান না app:layout_behavior="@string/appbar_scrolling_view_behavior"আপনাকে ওভাররাইড onAttachএবং এমন onDetachপদ্ধতিগুলি করতে হবে যা আপনার আচরণ পরিবর্তন করবে FrameLayout:

CoordinatorLayout.Behavior behavior;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    if(behavior != null)
        return;

    FrameLayout layout =(FrameLayout) getActivity().findViewById(R.id.dashboard_content);
    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) layout.getLayoutParams();

    behavior = params.getBehavior();
    params.setBehavior(null);

}

@Override
public void onDetach() {
    super.onDetach();
    if(behavior == null)
        return;

    FrameLayout layout =(FrameLayout) getActivity().findViewById(R.id.dashboard_content);
    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) layout.getLayoutParams();

    params.setBehavior(behavior);

    layout.setLayoutParams(params);

    behavior = null;
}

এর পরে সমন্বয়কারী লেআউট অ্যাপবার ইত্যাদির পতন ঘটবে না এবং খণ্ড লেআউটগুলি পুরো উচ্চতার হতে দেবে।


খুব ভাল, এটি চেষ্টা করে দেখতে হবে এবং এটি জিনিসগুলিকে সহজতর করে কিনা। ধন্যবাদ
mobilepotato7

যদি আপনি সহজ কিছু খুঁজে পান - আমাকে জানান। আমি ভাবি যে টুকরোগুলির জীবনচক্র চলাকালীন যেকোন মুহুর্তে সমন্বয়কারী আচরণ পরিবর্তন করা সম্ভব (যেমন আপনি সাধারণত কিছু স্টাফ সহ একটি পুনর্ব্যবহারকারী হন তবে বিরল ক্ষেত্রে এটি শূন্য হতে পারে এবং আপনি জানেন যে কেবল লোডার এর পরে onLoadFinished, এটি সম্ভব কেন্দ্রিক চিত্রটি প্রদর্শন করে দেখতে চাই যে এখানে কিছুই নেই, ঠিক যেমন ইনবক্স অ্যাপ্লিকেশনটিতে) তবে আমি এখনও এটি চেষ্টা করি নি। আজ পরে হতে পারে।
12 Шварц

ঠিক আছে, এটি বেশ ভাল কাজ করে। আমি এমন কোনও সহায়ককে ক্রেস্ট করেছি যা উপযুক্ত হলে সমন্বয়কারীকে সক্ষম / অক্ষম করার জন্য যত্ন নেয়, তাই আমি কেবল টুকরো টুকরো enableCoordinator(Activity activity)/ কল করি disableCoordinator(Activity activity)
25 Шварц

আপনার সহায়ক কোথায়, @ КлаусШварц? কখন ফোন করবেন?
সান্থিয়াগো

4
@ স্যান্থিয়াগো টুকরোটিতে
21 Шварц

8

এখানে আমার সমাধান

<!-- Put your fragment inside a Framelayout and set the behavior for this FrameLayout -->
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <!-- Your fragment -->
    <include layout="@layout/content_main" />

</FrameLayout>

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>


1

এই সত্যিই ভাল প্রশ্ন: উচিত Toolbarগুলি প্রয়োজন মতো কাজ করতে যে ActionBarএকটি অবস্থায় রাখা যাবে ActivityবাFragment ? বিভিন্ন প্রশ্ন এবং ডকুমেন্টেশনের চারপাশে অনুসন্ধান করার পরে, আমি এমন কোনও সমাধান খুঁজে পেলাম না যা সমস্ত ক্ষেত্রেই কভার থাকে। সুতরাং এটি আপনার পরিস্থিতির উপর নির্ভর করে যা যেতে হবে।

কেস 1: সরঞ্জামদণ্ড অবশ্যই অ্যাকশনবারের প্রতিস্থাপন হতে হবে

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

টুকরোগুলি থেকে অ্যাকশনবার (-Ahaviour) পরিবর্তন করাও সম্ভব, তবে আমি এটির সুপারিশ করব না, যেহেতু এটি আপনাকে কখন ট্র্যাকমেন্টটি অ্যাকশনবারে পরিবর্তন করেছে তা ট্র্যাক রাখতে বাধ্য করে। অ্যাকশনবার সেট করা একাধিকবার করা যায় কিনা তা আমি জানি না।

কেস 2: প্রতিটি খণ্ডের নিজস্ব (অংশের) সরঞ্জামদণ্ড থাকা উচিত

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

আমি আশা করি এটি একটি পছন্দ করতে সহায়তা করবে।

(আমি যদি কোনও (ভাষা) ভুল করে থাকি তবে দুঃখিত)


4
দুঃখিত তবে এটি নতুন ডিজাইনের লাইব্রেরির সাথে সম্পর্কিত সমস্যাগুলির সত্যই উত্তর দেয় না। অবশ্যই অ্যাকশনবার হিসাবে সরঞ্জামদণ্ডটি হ'ল উদ্দেশ্য, তবে বিভিন্ন ধরণের টুলবারগুলির জন্য একাধিক সমন্বয়কারী বিন্যাস থাকা জটিল হতে পারে। যা আমি পেয়েছি তা হ'ল প্রয়োজন অনুসারে সরঞ্জামদণ্ড অ্যানিমেট করা সম্ভব। আমার এখনও এটি আরও ভাল করে পরীক্ষা করা দরকার তবে এটির ভাল ফলাফল রয়েছে বলে মনে হচ্ছে
mobilepotato7
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.