সাপোর্ট লাইব্রেরি সহ ফ্লোটিংএ্যাকশনবটন উদাহরণ


129

সম্প্রতি, আমি এই পোস্টগুলি পড়েছি:

অ্যান্ড্রয়েড ডিজাইন সমর্থন লাইব্রেরি

অ্যান্ড্রয়েড সমর্থন লাইব্রেরি, পুনর্বিবেচনা 22.2.0

FloatingActionButton

তবে, তাদের কেউই আমাকে নতুন তৈরি সম্পর্কে বিস্তারিত উদাহরণ দেয় না FloatingActionButton । বুঝতে অসুবিধা, আমি এই প্রশ্নটি জিজ্ঞাসা করি।

কেউ কি আমাকে এ সম্পর্কে একটি উদাহরণ দিতে পারেন?

যে কোনও সহায়তা অনেক প্রশংসা করা হয়। আগাম ধন্যবাদ.

সম্পাদনা

আমি শুধু কিছু সমস্যা খুঁজে পায় FloatingActionButton(FAB), এবং আমি অন্য উত্তর উন্নতি করতে চাই। আমার উত্তর নীচে দেখুন।


উত্তর:


274

সুতরাং আপনার build.gradleফাইলে এটি যুক্ত করুন:

compile 'com.android.support:design:27.1.1'

অ্যান্ড্রয়েডএক্স দ্রষ্টব্য: পুরানো সমর্থন লাইব্রেরিগুলি প্রতিস্থাপন করতে গুগল নতুন অ্যান্ড্রয়েডএক্স এক্সটেনশন লাইব্রেরি চালু করছে । অ্যান্ড্রয়েডএক্স ব্যবহার করতে, প্রথমে নিশ্চিত হয়ে নিন যে আপনি নিজের gradle.propertiesফাইলটি আপডেট করেছেন build.gradle, সেট compileSdkVersionকরতে 28(অথবা উচ্চতর) সেট করেছেন এবং আগেরটির পরিবর্তে নিম্নলিখিত লাইনটি ব্যবহার করুন compile

implementation 'com.google.android.material:material:1.0.0'

এরপরে, আপনার themes.xmlবা styles.xmlযে কোনও ক্ষেত্রে, আপনি এটি সেট করেছেন তা নিশ্চিত করুন - এটি আপনার অ্যাপ্লিকেশনটির অ্যাকসেন্ট রঙ - এবং আপনার এফএবির রঙ আপনি যদি ওভাররাইড না করেন (নীচে দেখুন):

        <item name="colorAccent">@color/floating_action_button_color</item>

বিন্যাসের এক্সএমএলে:

<RelativeLayout
 ...
 xmlns:app="http://schemas.android.com/apk/res-auto">

       <android.support.design.widget.FloatingActionButton
            android:id="@+id/myFAB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_plus_sign"
            app:elevation="4dp"
            ... />

</RelativeLayout>

অথবা আপনি যদি উপরে অ্যান্ড্রয়েডএক্স ম্যাটেরিয়াল লাইব্রেরি ব্যবহার করছেন তবে আপনি পরিবর্তে এটি ব্যবহার করতে পারবেন:

<RelativeLayout
 ...
 xmlns:app="http://schemas.android.com/apk/res-auto">

       <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/myFAB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:srcCompat="@drawable/ic_plus_sign"
            app:elevation="4dp"
            ... />

</RelativeLayout>

আপনি ডক্সে আরও বিকল্প দেখতে পারেন (এখানে উপাদানীয় ডক্স) ( setRippleColorইত্যাদি) তবে নোটের একটি হ'ল:

    app:fabSize="mini"

আর একটি আকর্ষণীয় - কেবলমাত্র একটি এফএবির পটভূমি রঙ পরিবর্তন করতে, যুক্ত করুন:

    app:backgroundTint="#FF0000"

(উদাহরণস্বরূপ এটিকে লাল রূপে পরিবর্তন করতে) উপরের এক্সএমএল এ প্রবেশ করুন।

যাইহোক, কোডে, ক্রিয়াকলাপ / খণ্ডের ভিউ স্ফীত হওয়ার পরে ...

    FloatingActionButton myFab = (FloatingActionButton)  myView.findViewById(R.id.myFAB);
    myFab.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            doMyThing();
        }
    });

পর্যবেক্ষণ:

  • যদি আপনার কাছে এমন একটি বাটন থাকে যা "সীম" এর দুটি দৃষ্টিভঙ্গি বিভক্ত করে (উদাহরণস্বরূপ, রিলেটিভলআউট ব্যবহার করে), বলুন, সীমানাকে অতিক্রম করতে একটি নেতিবাচক নীচের বিন্যাসের মার্জিন রয়েছে, আপনি একটি সমস্যা লক্ষ্য করবেন: এফএবির আকার আসলে ললিপপ বনাম প্রি-লোলিপপটিতে খুব আলাদা । আপনি এএস এর ভিজ্যুয়াল লেআউট এডিটরটিতে এটি দেখতে পারবেন যখন আপনি এপিআই-এর মধ্যে ফ্লিপ করেন suddenly হঠাৎ যখন আপনি প্রাক-ললিপপে স্যুইচ করেন তখন এটি "ফুসফুস করে"। অতিরিক্ত আকারের কারণ বলে মনে হয় যে ছায়াটি প্রতিটি দিকের দৃশ্যের আকারকে প্রসারিত করে। সুতরাং আপনি যখন এফএবির মার্জিনগুলি অন্যান্য স্টাফের কাছাকাছি রাখেন তখন এটির জন্য আপনাকে অ্যাকাউন্ট করতে হবে।
  • প্যাডিং খুব বেশি হলে অপসারণ বা পরিবর্তন করার একটি উপায় এখানে রয়েছে:

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) myFab.getLayoutParams();
        p.setMargins(0, 0, 0, 0); // get rid of margins since shadow area is now the margin
        myFab.setLayoutParams(p);
    }
  • এছাড়াও, আমি প্রোগ্রামের ভিত্তিতে এফএবির উচ্চতা ধরে রেখে, দুটি দ্বারা বিভক্ত করে, এবং মার্জিন অফসেট হিসাবে ব্যবহার করে একটি রিলেটিভ লাইআউটে দুটি অঞ্চলের মধ্যে "সীম" এ এফএবি স্থাপন করতে যাচ্ছিলাম। তবে myFab.getHeight () শূন্য ফিরে এসেছে, ভিউ স্ফীত হওয়ার পরেও মনে হয়েছিল। পরিবর্তে আমি উচ্চতাটি তৈরি করার পরে কেবল অবস্থানটি সেট করার পরে একটি ViewTreeObserver ব্যবহার করেছি then এই টিপটি এখানে দেখুন । দেখে মনে হচ্ছে:

        ViewTreeObserver viewTreeObserver = closeButton.getViewTreeObserver();
        if (viewTreeObserver.isAlive()) {
            viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                        closeButton.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    } else {
                        closeButton.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    }
                    // not sure the above is equivalent, but that's beside the point for this example...
                    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) closeButton.getLayoutParams();
                    params.setMargins(0, 0, 16, -closeButton.getHeight() / 2); // (int left, int top, int right, int bottom)
                    closeButton.setLayoutParams(params);
                }
            });
        }

    এটি করার সঠিক উপায় এটি নিশ্চিত নয় তবে এটি কাজ করে বলে মনে হচ্ছে।

  • দেখে মনে হচ্ছে আপনি উচ্চতা হ্রাস করে বোতামের ছায়া-স্থানটিকে ছোট করতে পারেন।
  • আপনি যদি কোনও "সিমে" এফএবি চান তবে আপনি ব্যবহার করতে পারেন layout_anchorএবং layout_anchorGravityএখানে একটি উদাহরণ রয়েছে:

    <android.support.design.widget.FloatingActionButton
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        app:layout_anchor="@id/appbar"
        app:layout_anchorGravity="bottom|right|end"
        android:src="@drawable/ic_discuss"
        android:layout_margin="@dimen/fab_margin"
        android:clickable="true"/>

মনে রাখবেন যে কোনও স্নেকবার যখন কোনও সমন্বয়কারী লেআউটে মুড়ে আপনার কাছে চলে আসে তখন আপনি স্বয়ংক্রিয়ভাবে বোতামটি ছাড়তে পারেন you

আরও:


1
অবশ্যই। android:backgroundTint="#FF0000"এক্সএমএল-এ কেবল ফ্লোটিং অ্যাকশনবারে উদাহরণস্বরূপ যুক্ত করুন । (উত্তর যোগ করে)
মোটামুটি

1
হুম। ঠিক আছে আমি তখন উপরে এটি পরিবর্তন করব। ধন্যবাদ! ডার্ক লিওনার্ট-- আমি অন্তর্নির্মিত দ্রুত রিটার্ন সম্পর্কে কিছুই দেখিনি তবে স্ট্যাকওভারফ্লোতে অন্য কোথাও এটি করার নমুনা রয়েছে যা আমার ধারণা যে এখনও কাজ করবে। এছাড়াও কিছু লাইব্রেরি পাওয়া যায় যা এটিও করে।
উত্তেজনাপূর্ণ

1
এই উপাদানটি, আমার মতে 22.2.0 হিসাবে, উত্পাদন প্রস্তুত নয়। বিটিডব্লিউ, টাইপো হতে পারে তবে spইভটিশনের সম্পত্তিতে ব্যবহার করবেন না । এটি হওয়া উচিতapp:elevation="4dp"
জোওও সউসা

1
নোট আপনি একটি যোগ করা হয় FloatingActionButtonএকটি থেকে CoordinatorLayout, আপনি ব্যবহার করতে পারেন app:layout_anchor="element_with_seam"এবং app:layout_anchorGravity="bottom|right|end"একটি স্তর উপর সঠিকভাবে FAB জায়গায় স্থাপনের জন্য - দেখুন cheesesquare থেকে activity_detail বিন্যাস
ianhanniballake

2
@ ডারক্লিয়োনহার্ট - এফএবি এর আচরণ বাড়াতে স্ক্রোলটিতে দেখানো / লুকিয়ে রাখার আমার উদাহরণটি দেখুন
ianhanniballake

49

আমি সবেমাত্র এফএবিতে কিছু সমস্যা পেয়েছি এবং আমি অন্য উত্তরটি বাড়িয়ে দিতে চাই।


সেটরেপলকলার ইস্যু

সুতরাং, আপনি প্রোগ্রামের মাধ্যমে রিপল রঙ (চাপলে এফএবির রঙ) সেট করার পরে সমস্যাটি আসবে setRippleColor। তবে, আমাদের এখনও এটি সেট করার বিকল্প উপায় আছে, অর্থাৎ কল করে:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
ColorStateList rippleColor = ContextCompat.getColorStateList(context, R.color.fab_ripple_color);
fab.setBackgroundTintList(rippleColor);

আপনার প্রকল্পের এই কাঠামো থাকা দরকার:

/res/color/fab_ripple_color.xml

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

এবং কোডটি fab_ripple_color.xmlহ'ল:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/fab_color_pressed" />
    <item android:state_focused="true" android:color="@color/fab_color_pressed" />
    <item android:color="@color/fab_color_normal"/>
</selector>

অবশেষে, আপনার এফএবি সামান্য পরিবর্তন করুন:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_action_add"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    app:fabSize="normal"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:pressedTranslationZ="12dp"
    app:rippleColor="@android:color/transparent"/> <!-- set to transparent color -->

21 স্তরের এবং উচ্চতর স্তরের জন্য মার্জিন ডান এবং নীচে 24 ডিপি সেট করুন:

...
android:layout_marginRight="24dp"
android:layout_marginBottom="24dp" />

ফ্লোটিংএ্যাকশনবাটন ডিজাইনের গাইড

আপনি উপরে আমার FAB এক্সএমএল কোডটিতে দেখতে পাচ্ছেন, আমি সেট করেছি:

        ...
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        app:elevation="6dp"
        app:pressedTranslationZ="12dp"
        ...
  • এই বৈশিষ্ট্যাবলী সেটিং করার মাধ্যমে, আপনি সেট প্রয়োজন হবে না layout_marginTopএবং layout_marginRight(শুধুমাত্র প্রাক Lollipop এ দিকে) আবার। অ্যান্ড্রয়েড এটিকে স্বয়ংক্রিয়ভাবে স্ক্রিনের ডান কোণায় রেখে দেবে, যা অ্যান্ড্রয়েড ললিপপের সাধারণ এফএবির মতো।

        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"

বা, আপনি এটি ব্যবহার করতে পারেন CoordinatorLayout:

        android:layout_gravity="end|bottom"
  • গুগলের এই গাইড অনুসারে আপনার 6 ডিপি elevationএবং 12 ডিপি থাকা দরকার ।pressedTranslationZ

এফএবি নিয়ম


5
জড়িত গবেষণা জন্য থাম্বস আপ। প্লাস 1 এর জন্য pressedTranslationZ। আমি এটা জানতাম না।
জোওও সউসা

অ্যাপ্লিকেশন: উচ্চতা = "6 ডিপি" অ্যাপ্লিকেশন: চাপিত ট্রান্সলেশন জেড = "12 ডিপি" প্রাক-ললিপপের জন্য কৌশলটি করে তবে আমার ফাবটি আক্ষরিক অর্থে ললিপপের পর্দার কোণায় রয়েছে
থিয়াগো

1
আপনি "চেপে ট্রান্সলেশন জেড" এর জন্য একটি ভুল মান ব্যবহার করছেন। এটি চাপা রাষ্ট্রের উপরে উন্নয়নের মান নয়। চাপযুক্ত উচ্চতা = উচ্চতা + চাপিত ট্রান্সলেশন জেড। সুতরাং সঠিক মানগুলি হচ্ছে অ্যাপ্লিকেশন: উচ্চতা = "6 ডিপি" অ্যাপ্লিকেশন: চাপানো ট্রান্সলেশন জেড = "6 ডিপি"
ই.শিশকিন

3
আসলে আপনার মানগুলি app:elevationএবং app:pressedTranslationZমানগুলি সেট করার দরকার নেই । তাদের ডিফল্ট মান হ'ল ম্যাটেরিয়াল ডিজাইনের গাইডলাইনগুলিতে সংজ্ঞায়িত। যাইহোক, ই.শিশকিন সঠিক, মানগুলি app:elevation:6dpএবং pressedTranslationZ:6dp। আপনি এটি com.android.support.design সোর্স কোডে
খ্রিস্টান গার্সিয়া

12

FloatingActionButtonপ্রসারিত ImageView। সুতরাং, এটি ImageViewআপনার লেআউটটিতে একটি প্রবর্তন করার মতো সহজ । এখানে একটি এক্সএমএল নমুনা।

<android.support.design.widget.FloatingActionButton   xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/somedrawable"
    android:layout_gravity="right|bottom"
    app:borderWidth="0dp"
    app:rippleColor="#ffffff"/>

app:borderWidth="0dp" উন্নয়নের ইস্যুগুলির জন্য এক কার্যকরী হিসাবে যুক্ত করা হয়।


4

AndroidX এর মত ব্যবহার করুন for

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_add" />

1

আপনি যদি ইতিমধ্যে সমস্ত লাইব্রেরি যুক্ত করেন এবং এটি এখনও ব্যবহার করে না:

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_add" 
/>

পরিবর্তে:

<android.support.design.widget.FloatingActionButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   app:srcCompat="@drawable/ic_add"
 />

এবং সব ঠিক কাজ করবে :)

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