অ্যান্ড্রয়েড ডিজাইন সমর্থন লাইব্রেরি প্রসারণযোগ্য ফ্লোটিং অ্যাকশন বোতাম (এফএবি) মেনু


172

এখন যে অ্যান্ড্রয়েড ডিজাইন সাপোর্ট লাইব্রেরিটি বাইরে চলে গেছে, কেউ কি ইনবক্স অ্যাপে থাকা ফ্যাবের মতো এটির সাথে কীভাবে প্রসারিত ফ্যাব মেনুটি প্রয়োগ করতে পারে তা জানেন?

এর মতো দেখতে হবে:

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



আমি ইতিমধ্যে সমস্ত ডকুমেন্টেশন চেক করেছি তবে স্পষ্টতই এফএবি মেনুর কোনও চিহ্ন নেই :(
এককোজ

8
আপনি এই ফ্লোটিংএ্যাকশন বাটন লাইব্রেরিটি একবার দেখে নিতে পারেন ।
মার্কাস রুবে

3
@ মারকাসরুবে ধন্যবাদ, এই মুহূর্তে একজনকে ব্যবহার করার জন্য এটি ধন্যবাদ জানায়, ঠিক আমি এটিকে দেশীয় সাথে তৈরি করতে চেয়েছিলাম, তবে সম্ভবত এটি এখনও সম্ভব হয়নি।
এককোজ

প্রচুর ওপেন সোর্স লাইব্রেরি রয়েছে, যা কাজটি সম্পন্ন করতে পারে। এটি দেখুন: github.com/futuresimple/android-floating-action-button
Caps.swag

উত্তর:


143

বর্তমানে, ডিজাইন লাইব্রেরিতে কোনও উইজেট সরবরাহ করা হয়নি। এটি দ্রুত এবং সহজেই করার একমাত্র উপায় হ'ল তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে।

আপনি অবশ্যই ডিজাইন লাইব্রেরিটি ব্যবহার করে এটি করতে পারেন তবে এটি একটি বিশাল কাজ হবে এবং এতে অনেক সময় প্রয়োজন। আমি কয়েকটি দরকারী গ্রন্থাগার উল্লেখ করেছি, এটি আপনাকে এটি অর্জনে সহায়তা করতে পারে।

  1. দ্রুত ভাসমান বোতাম (ওয়াংজিগুলু)
  2. ভাসমান অ্যাকশন বোতাম (গোষ্ঠী)
  3. ভাসমান অ্যাকশন বোতাম (মকভকাস্টার)
  4. অ্যান্ড্রয়েড ফ্লোটিং অ্যাকশন বোতাম (ফিউচারসিম্পল)

আমি চতুর্থটি ব্যবহার করছি।


31
ভাল, ধারণাটি ছিল দেশীয় নকশা গ্রন্থাগারটি দিয়ে এটি করা, আমি জানি প্রচুর লাইব্রেরি রয়েছে যা ইতিমধ্যে এই বৈশিষ্ট্যটি করে। আপনার উত্তর দেওয়ার জন্য ধন্যবাদ.
এককোজ

আপনি কি চতুর্থটি নিয়ে কোনও সমস্যা পেয়েছেন? ললিপপ + ডিভাইসে খনি প্রদর্শিত হচ্ছে না। এছাড়াও ব্যাকগ্রাউন্ড ওভারলে রঙ এবং পাঠ্যটি কাজ করছে না
অজিথ মেমনা 12'16

@ অজিথমেমন নাপ আমার অ্যাপ্লিকেশনটি 100 কে-র বেশি ব্যবহারকারীদের কাছে উত্পাদনে রয়েছে এবং আপনি উল্লিখিত হিসাবে আমার কোন সমস্যা হয়নি।
অরিত্র রায়

আপনি আমাকে আপনার অ্যাপ্লিকেশন একটি লিঙ্ক প্রদান করতে পারেন? উপরের মতো যা কিছু দেখানো হয়েছে তার সাথে আমার অনুরূপ কিছু দরকার, সাথে সাথে বোতামটি ক্লিক করা হলে স্ক্রিনটি coveringেকে রাখা একটি স্বচ্ছ পটভূমি with
অজিথ মেমনা 12'16

2
একটি নোট হিসাবে, Clans এবং makovkastar আর সমর্থন করা হয় না। আমার সন্দেহ হয় এটি এফএবি ডিজাইনের লাইব্রেরির উন্নতির কারণে ঘটেছে
আপত্তি

161

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

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

প্রথমে আপনার সমস্ত এফএবি একই স্থানে সংজ্ঞায়িত করুন যাতে তারা একে অপরকে ওভারল্যাপ করে, শীর্ষে एफএবি মনে রাখবেন যে আপনি ক্লিক করতে এবং অন্যকে প্রদর্শন করতে চান। উদাহরণ:

    <android.support.design.widget.FloatingActionButton
    android:id="@+id/fab3"
    android:layout_width="@dimen/standard_45"
    android:layout_height="@dimen/standard_45"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/standard_21"
    app:srcCompat="@android:drawable/ic_btn_speak_now" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab2"
    android:layout_width="@dimen/standard_45"
    android:layout_height="@dimen/standard_45"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/standard_21"
    app:srcCompat="@android:drawable/ic_menu_camera" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab1"
    android:layout_width="@dimen/standard_45"
    android:layout_height="@dimen/standard_45"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/standard_21"
    app:srcCompat="@android:drawable/ic_dialog_map" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    app:srcCompat="@android:drawable/ic_dialog_email" />

এখন আপনার জাভা ক্লাসে আপনার সমস্ত এফএবি সংজ্ঞায়িত করুন এবং নীচের মত প্রদর্শিত ক্লিক করুন:

 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab1 = (FloatingActionButton) findViewById(R.id.fab1);
    fab2 = (FloatingActionButton) findViewById(R.id.fab2);
    fab3 = (FloatingActionButton) findViewById(R.id.fab3);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(!isFABOpen){
                showFABMenu();
            }else{
                closeFABMenu();
            }
        }
    });

ব্যবহার করুন animation().translationY()আপনার FAB অ্যানিমেট করতে, আমি আপনাকে শুধুমাত্র একটি int- এ ব্যবহার উচ্চ রেজল্যুশন বা কম রেজোলিউশনে প্রদর্শন সামঞ্জস্য প্রভাবিত হবে যেহেতু ডিপি এই পদ্ধতির বৈশিষ্ট্য ব্যবহার করতে পছন্দ করেন। নিচে দেখানো হয়েছে:

 private void showFABMenu(){
    isFABOpen=true;
    fab1.animate().translationY(-getResources().getDimension(R.dimen.standard_55));
    fab2.animate().translationY(-getResources().getDimension(R.dimen.standard_105));
    fab3.animate().translationY(-getResources().getDimension(R.dimen.standard_155));
}

private void closeFABMenu(){
    isFABOpen=false;
    fab1.animate().translationY(0);
    fab2.animate().translationY(0);
    fab3.animate().translationY(0);
}

নীচে প্রদর্শিত হিসাবে পুনরায়-> মান-> dimens.xML এর ভিতরে উল্লিখিত মাত্রাটি সংজ্ঞায়িত করুন:

    <dimen name="standard_55">55dp</dimen>
<dimen name="standard_105">105dp</dimen>
<dimen name="standard_155">155dp</dimen>

এগুলি সমস্তই আশা করে যে এই সমাধান ভবিষ্যতে লোকদের সহায়তা করবে, যারা সহজ সমাধানের সন্ধান করছেন।

সম্পাদিত

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

ব্যাকপ্রেসে এফএবি বন্ধ করতে, নীচে প্রদর্শিত হিসাবে ব্যাকপ্রেস () টি ওভাররাইড করুন:

    @Override
public void onBackPressed() {
    if(!isFABOpen){
        this.super.onBackPressed();
    }else{
        closeFABMenu();
    }
}

স্ক্রিনশটটির শিরোনামটিও এফএবির সাথে রয়েছে, কারণ আমি এটি আমার নমুনা অ্যাপ্লিকেশনটি ইঙ্গিথব থেকে নিয়েছি

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


8
এমনকি মেনুতে লেবেল যুক্ত করাও সহজ, আপনি কেবল একটি পাঠ্যদর্শন সহ একটি লাইনারিলেআউটের ভিতরে এফএবি যোগ করতে হবে লেবেল হিসাবে, এবং এর পরে পুরো লিনিয়ার বিন্যাসটি খোলার এবং
ভোল

1
তবে প্রশান্ত অ্যানিমেশনের জন্য পৃথক এক্সএমএল তৈরি করেছিলেন, তবে অ্যানিমেশনের জন্য আমার সমাধানটির জন্য কোনও অতিরিক্ত এক্সএমএল প্রয়োজন হয় না, সুতরাং বিশ্বাস করুন যে আমার উত্তরটি আরও ভাল, কারণ ভিউ অ্যানিমেট করার জন্য কোডের অতিরিক্ত লাইন দরকার নেই।
HAXM

2
এটিই সেরা উত্তর। আপনি ডিজাইনের লাইব্রেরি থেকে আসল এফএবি ব্যবহার করতে পারেন এবং এটি জটিল নয়।
স্টিফেন ম্যাথিস

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

1
@ অড্রয়েড হ্যাভেন ফ্রেমলআউট নিয়ে আপনার সমস্ত এফএবি এর ভিতরে রাখুন
HAXM

31
  • প্রথমে আপনার ক্রিয়াকলাপের লেআউট এক্সএমএল ফাইলটিতে মেনু লেআউটগুলি তৈরি করুন। উদাহরণস্বরূপ অনুভূমিক প্রবণতা সহ রৈখিক বিন্যাস এবং লেবেলের জন্য একটি টেক্সটভিউ অন্তর্ভুক্ত তারপর টেক্সটভিউয়ের পাশে একটি ফ্লোটিং অ্যাকশন বোতাম।

  • আপনার প্রয়োজন এবং সংখ্যা অনুযায়ী মেনু লেআউট তৈরি করুন।

  • একটি বেস ফ্লোটিং অ্যাকশন বোতাম তৈরি করুন এবং তার ক্লিক ক্লিক করে মেনু বিন্যাসের দৃশ্যমানতা পরিবর্তন করুন।

অনুগ্রহ করে নীচের কোডটি পরীক্ষা করুন এবং আরও তথ্যের জন্য গিথুব থেকে আমার প্রকল্পটি চেকআউট করুন

গিথুব থেকে চেকআউট প্রকল্প

<android.support.constraint.ConstraintLayout
            android:id="@+id/activity_main"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context="com.app.fabmenu.MainActivity">

            <android.support.design.widget.FloatingActionButton
                android:id="@+id/baseFloatingActionButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:layout_marginEnd="16dp"
                android:layout_marginRight="16dp"
                android:clickable="true"
                android:onClick="@{FabHandler::onBaseFabClick}"
                android:tint="@android:color/white"
                app:fabSize="normal"
                app:layout_constraintBottom_toBottomOf="@+id/activity_main"
                app:layout_constraintRight_toRightOf="@+id/activity_main"
                app:srcCompat="@drawable/ic_add_black_24dp" />

            <LinearLayout
                android:id="@+id/shareLayout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="12dp"
                android:layout_marginEnd="24dp"
                android:layout_marginRight="24dp"
                android:gravity="center_vertical"
                android:orientation="horizontal"
                android:visibility="invisible"
                app:layout_constraintBottom_toTopOf="@+id/createLayout"
                app:layout_constraintLeft_toLeftOf="@+id/createLayout"
                app:layout_constraintRight_toRightOf="@+id/activity_main">

                <TextView
                    android:id="@+id/shareLabelTextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="8dp"
                    android:layout_marginRight="8dp"
                    android:background="@drawable/shape_fab_label"
                    android:elevation="2dp"
                    android:fontFamily="sans-serif"
                    android:padding="5dip"
                    android:text="Share"
                    android:textColor="@android:color/white"
                    android:typeface="normal" />


                <android.support.design.widget.FloatingActionButton
                    android:id="@+id/shareFab"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:clickable="true"
                    android:onClick="@{FabHandler::onShareFabClick}"
                    android:tint="@android:color/white"
                    app:fabSize="mini"
                    app:srcCompat="@drawable/ic_share_black_24dp" />

            </LinearLayout>

            <LinearLayout
                android:id="@+id/createLayout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="24dp"
                android:layout_marginEnd="24dp"
                android:layout_marginRight="24dp"
                android:gravity="center_vertical"
                android:orientation="horizontal"
                android:visibility="invisible"
                app:layout_constraintBottom_toTopOf="@+id/baseFloatingActionButton"
                app:layout_constraintRight_toRightOf="@+id/activity_main">

                <TextView
                    android:id="@+id/createLabelTextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="8dp"
                    android:layout_marginRight="8dp"
                    android:background="@drawable/shape_fab_label"
                    android:elevation="2dp"
                    android:fontFamily="sans-serif"
                    android:padding="5dip"
                    android:text="Create"
                    android:textColor="@android:color/white"
                    android:typeface="normal" />

                <android.support.design.widget.FloatingActionButton
                    android:id="@+id/createFab"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:clickable="true"
                    android:onClick="@{FabHandler::onCreateFabClick}"
                    android:tint="@android:color/white"
                    app:fabSize="mini"
                    app:srcCompat="@drawable/ic_create_black_24dp" />

            </LinearLayout>

        </android.support.constraint.ConstraintLayout>

এগুলি অ্যানিমেশনগুলি-

এফএবি মেনুর খোলার অ্যানিমেশন:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<scale
    android:duration="300"
    android:fromXScale="0"
    android:fromYScale="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="1"
    android:toYScale="1" />
<alpha
    android:duration="300"
    android:fromAlpha="0.0"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toAlpha="1.0" />

</set>

এফএবি মেনুর ক্লোজিং অ্যানিমেশন:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<scale
    android:duration="300"
    android:fromXScale="1"
    android:fromYScale="1"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.0"
    android:toYScale="0.0" />
<alpha
    android:duration="300"
    android:fromAlpha="1.0"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toAlpha="0.0" />
</set>

তারপরে আমার ক্রিয়াকলাপে আমি কেবল এএফএবি মেনুটি দেখানোর জন্য এবং লুকানোর জন্য উপরের অ্যানিমেশনগুলি ব্যবহার করেছি:

ফ্যাব মেনু প্রদর্শন করুন:

  private void expandFabMenu() {

    ViewCompat.animate(binding.baseFloatingActionButton).rotation(45.0F).withLayer().setDuration(300).setInterpolator(new OvershootInterpolator(10.0F)).start();
    binding.createLayout.startAnimation(fabOpenAnimation);
    binding.shareLayout.startAnimation(fabOpenAnimation);
    binding.createFab.setClickable(true);
    binding.shareFab.setClickable(true);
    isFabMenuOpen = true;

}

বন্ধ মেনু:

private void collapseFabMenu() {

    ViewCompat.animate(binding.baseFloatingActionButton).rotation(0.0F).withLayer().setDuration(300).setInterpolator(new OvershootInterpolator(10.0F)).start();
    binding.createLayout.startAnimation(fabCloseAnimation);
    binding.shareLayout.startAnimation(fabCloseAnimation);
    binding.createFab.setClickable(false);
    binding.shareFab.setClickable(false);
    isFabMenuOpen = false;

}

এখানে কার্যকলাপ ক্লাস -

package com.app.fabmenu;

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.OvershootInterpolator;

import com.app.fabmenu.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

private ActivityMainBinding binding;
private Animation fabOpenAnimation;
private Animation fabCloseAnimation;
private boolean isFabMenuOpen = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    binding = DataBindingUtil.setContentView(this,    R.layout.activity_main);
    binding.setFabHandler(new FabHandler());

    getAnimations();


}

private void getAnimations() {

    fabOpenAnimation = AnimationUtils.loadAnimation(this, R.anim.fab_open);

    fabCloseAnimation = AnimationUtils.loadAnimation(this, R.anim.fab_close);

}

private void expandFabMenu() {

    ViewCompat.animate(binding.baseFloatingActionButton).rotation(45.0F).withLayer().setDuration(300).setInterpolator(new OvershootInterpolator(10.0F)).start();
    binding.createLayout.startAnimation(fabOpenAnimation);
    binding.shareLayout.startAnimation(fabOpenAnimation);
    binding.createFab.setClickable(true);
    binding.shareFab.setClickable(true);
    isFabMenuOpen = true;


}

private void collapseFabMenu() {

    ViewCompat.animate(binding.baseFloatingActionButton).rotation(0.0F).withLayer().setDuration(300).setInterpolator(new OvershootInterpolator(10.0F)).start();
    binding.createLayout.startAnimation(fabCloseAnimation);
    binding.shareLayout.startAnimation(fabCloseAnimation);
    binding.createFab.setClickable(false);
    binding.shareFab.setClickable(false);
    isFabMenuOpen = false;

}


public class FabHandler {

    public void onBaseFabClick(View view) {

        if (isFabMenuOpen)
            collapseFabMenu();
        else
            expandFabMenu();


    }

    public void onCreateFabClick(View view) {

        Snackbar.make(binding.coordinatorLayout, "Create FAB tapped", Snackbar.LENGTH_SHORT).show();

    }

    public void onShareFabClick(View view) {

        Snackbar.make(binding.coordinatorLayout, "Share FAB tapped", Snackbar.LENGTH_SHORT).show();

    }


}

@Override
public void onBackPressed() {

    if (isFabMenuOpen)
        collapseFabMenu();
    else
        super.onBackPressed();
}
}

এখানে স্ক্রিনশট দেওয়া আছে

অ্যান্ড্রয়েডের নতুন ক্রসিভ ফন্ট পরিবারে লেবেল পাঠ্যদর্শন সহ ফ্লোটিং অ্যাকশন মেনু

অ্যান্ড্রয়েডের নতুন রোবোটো ফন্ট পরিবারে লেবেল পাঠ্যদর্শন সহ ফ্লোটিং অ্যাকশন মেনু



7

আমি যখন ইনবক্সে ভাসমান অ্যাকশন বোতামটিতে কিছু সিমিলার তৈরি করার চেষ্টা করেছি তখন আমি নিজের কাস্টম উপাদান তৈরি করার কথা ভেবেছিলাম।

এটি স্থির উচ্চতা (প্রসারিত মেনু ধারণ করতে) সহ সহজ ফ্রেম বিন্যাস হবে এবং এফএবির অধীনে আরও 3 টি স্থাপন করা হবে। আপনি যখন এফএবি-তে ক্লিক করেন আপনি কেবল এফএবির অধীন থেকে অনুবাদ করতে অন্য বোতামগুলি সঞ্চারিত করতে পারেন।

কিছু লাইব্রেরি রয়েছে যা এটি করে (উদাহরণস্বরূপ https://github.com/futuresimple/android-floating-action-bton ) তবে এটি নিজের দ্বারা তৈরি করা থাকলে এটি সবসময়ই বেশি মজাদার :)


দুর্দান্ত ব্যাখ্যা! আমি সেই লাইব্রেরিটি অন্বেষণ করছি তবে এফএবির দুইটি দর্শনের মধ্যে সারিবদ্ধ করার জন্য এটি ব্যবহার করতে আমার সমস্যা হচ্ছে। এই প্রশ্নটিতে কী জিজ্ঞাসা করা হয় স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 24459352/… । কীভাবে করবেন এটি সম্পর্কে কোনও ধারণা? layout_anchorএবং layout_anchorGravityআমার জন্য কাজ করছে না
একরপো

ফিউচারসিম্পলের লাইব্রেরিটি তার
ফ্লোটিংএ্যাকশনমেনু

7

আপনি ফ্লোটিংএ্যাকশনমেনু লাইব্রেরি ব্যবহার করতে পারেন বা ধাপে ধাপে টিউটোরিয়াল পেতে এখানে ক্লিক করতে পারেন । টিউটোরিয়াল আউটপুট:

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


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

3

আমি এই লাইব্রেরিটি এটি করতে ব্যবহার করি: https://github.com/futuresimple/android-floating-action-button

ব্যবহারের জন্য খুব সহজ;)

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


কিছু অন্যান্য মন্তব্য যা আমি অন্যান্য অনুরূপ উত্তরগুলিতে করেছি। দুটি ভিউয়ের মধ্যে এফএবি সারিবদ্ধ করতে এটি ব্যবহার করতে আমার সমস্যা হচ্ছে। এই প্রশ্নটিতে কী জিজ্ঞাসা করা হয় স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 24459352/… । কীভাবে করবেন এটি সম্পর্কে কোনও ধারণা? layout_anchorএবং layout_anchorGravityআমার জন্য কাজ করছে না
একরপো

0

কনস্ট্রেন্টসেট অ্যানিমেশন সহ একই ফলাফলের জন্য অন্য একটি বিকল্প:

ফ্যাব অ্যানিমেশন উদাহরণ

1) সমস্ত অ্যানিমেটেড ভিউগুলিকে একটি কনস্ট্রেন্টলয়েটে রাখুন

২) এটিকে কোড থেকে এনিমেট করুন (যদি আপনি এর উপরে আরও কিছু প্রভাব চান তবে এটি কেবল উদাহরণ)

menuItem1 এবং menuItem2 মেনুতে প্রথম ও দ্বিতীয় Fabs হয়, descriptionItem1 এবং descriptionItem2 মেনুর বামে বিবরণ, parentConstraintLayout রুট ConstraintLayout কোনটা সব অ্যানিমেটেড মতামত রয়েছে, হয় isMenuOpened কিছু ফাংশন রাজ্যের খোলা / বন্ধ পতাকা পরিবর্তন করতে হয়

আমি এক্সটেনশন ফাইলটিতে অ্যানিমেশন কোডটি রেখেছি তবে এটির প্রয়োজনীয় নয়।

fun FloatingActionButton.expandMenu(
    menuItem1: View,
    menuItem2: View,
    descriptionItem1: TextView,
    descriptionItem2: TextView,
    parentConstraintLayout: ConstraintLayout,
    isMenuOpened: (Boolean)-> Unit
) {
    val constraintSet = ConstraintSet()
    constraintSet.clone(parentConstraintLayout)

    constraintSet.setVisibility(descriptionItem1.id, View.VISIBLE)
    constraintSet.clear(menuItem1.id, ConstraintSet.TOP)
    constraintSet.connect(menuItem1.id, ConstraintSet.BOTTOM, this.id, ConstraintSet.TOP, 0)
    constraintSet.connect(menuItem1.id, ConstraintSet.START, this.id, ConstraintSet.START, 0)
    constraintSet.connect(menuItem1.id, ConstraintSet.END, this.id, ConstraintSet.END, 0)

    constraintSet.setVisibility(descriptionItem2.id, View.VISIBLE)
    constraintSet.clear(menuItem2.id, ConstraintSet.TOP)
    constraintSet.connect(menuItem2.id, ConstraintSet.BOTTOM, menuItem1.id, ConstraintSet.TOP, 0)
    constraintSet.connect(menuItem2.id, ConstraintSet.START, this.id, ConstraintSet.START, 0)
    constraintSet.connect(menuItem2.id, ConstraintSet.END, this.id, ConstraintSet.END, 0)

    val transition = AutoTransition()
    transition.duration = 150
    transition.interpolator = AccelerateInterpolator()

    transition.addListener(object: Transition.TransitionListener {
        override fun onTransitionEnd(p0: Transition) {
            isMenuOpened(true)
        }
        override fun onTransitionResume(p0: Transition) {}
        override fun onTransitionPause(p0: Transition) {}
        override fun onTransitionCancel(p0: Transition) {}
        override fun onTransitionStart(p0: Transition) {}
    })

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