छवि के बजाय पाठ के साथ फ्लोटिंगएशनबटन


85

मैं यह पता लगाने की कोशिश कर रहा हूं कि एंड्रॉइड सपोर्ट लाइब्रेरी से फ्लोटिंगएशनबटन को कैसे संशोधित किया जा सकता है। क्या इसका उपयोग छवि के बजाय पाठ के साथ किया जा सकता है?

कुछ इस तरह:

यहाँ छवि विवरण दर्ज करें

मुझे लगता है कि यह इमेजबटन का विस्तार करता है इसलिए मुझे नहीं लगता। क्या मैं सही हू?

क्या यह सामग्री डिजाइन के संदर्भ में सही है?

जवाबों:


22

API 28 के साथ आप केवल Fabs का उपयोग करके पाठ जोड़ सकते हैं:

यात्रा: https://material.io/develop/android/compenders/extended-floating-action-button/

 <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_margin="8dp"
      android:contentDescription="@string/extended_fab_content_desc"
      android:text="@string/extended_fab_label"
      app:icon="@drawable/ic_plus_24px"
      app:layout_anchor="@id/app_bar"
      app:layout_anchorGravity="bottom|right|end"/>

अरे, उन्होंने आखिरकार ऐसा किया। संभवतः अब इसका उपयोग करने का सबसे अच्छा तरीका है। साझा करने के लिए धन्यवाद।
कॉमरेड

java.lang.ClassNotFoundException: वर्ग को नहीं मिला "com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton"
Nirel

2
से github.com/material-components/material-components-android आप नवीनतम उपयोग करने के लिए implementation 'com.google.android.material:material:1.1.0-alpha06'
नौकरी एम

1
यह एक गोल कोने की परत बन जाता है, इसे एक गोल बटन कैसे बनाया जाए?
dx3906

सभी कोने को त्रिज्या 30dp
Job M

100

सभी को धन्यवाद।

यहाँ आसान समाधान है जो मुझे इस प्रश्न के लिए मिला है। एंड्रॉइड 4+ के लिए एंड्रॉइड 5+ के लिए सही तरीके से काम करता है, विशिष्ट पैरामीटर एंड्रॉइड जोड़ा जाता है: फ़्लोटिंगएशनबटन पर TextView खींचने के लिए ऊंचाई।

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right">

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:color/transparent" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@android:string/ok"
        android:elevation="16dp"
        android:textColor="@android:color/white"
        android:textAppearance="?android:attr/textAppearanceMedium" />
</FrameLayout>


android:layout_margin="20dp"छाया मुद्दों को हल करने के लिए फ्लोटिंगएशनबटन में विशेषताओं को जोड़ने का प्रयास करें । इसके लिए बेहतर समाधान की प्रतीक्षा की जा रही है
लॉन्ग रेंजर

बेहतर प्रदर्शन के android:includeFontPadding="false"लिए TextViewटैग जोड़ें

Android: उन्नयन = "16dp" केवल एपीआई 21 और उच्चतर के साथ संगत है।
Red M

57

किसी टेक्स्ट को बिटमैप में परिवर्तित करें और उसका उपयोग करें। यह सुपर आसान है।

fab.setImageBitmap(textAsBitmap("OK", 40, Color.WHITE));

//method to convert your text to image
public static Bitmap textAsBitmap(String text, float textSize, int textColor) {
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setTextSize(textSize);
    paint.setColor(textColor);
    paint.setTextAlign(Paint.Align.LEFT);
    float baseline = -paint.ascent(); // ascent() is negative
    int width = (int) (paint.measureText(text) + 0.0f); // round
    int height = (int) (baseline + paint.descent() + 0.0f);
    Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(image);
    canvas.drawText(text, 0, baseline, paint);
    return image;
}

2
सही लेकिन टेक्स्ट का आकार नहीं बदल रहा है।
अंकुर_009

1
@ अंकुर_009 इसके बदलते हुए। फ्लोट में इसके आकार के अनुसार मूल्य बढ़ाने की कोशिश करें।
प्रेट्ज़९९९

मीठा, कुछ बदलावों के साथ मैंने आइकन फोंट को
ड्रॉबल्स में

1
@ अंकुर_009: बटन की जगह सीमित है, इसीलिए आपको टेक्स्ट साइज़ में बदलाव नहीं दिखता है। इसलिए यदि आपका पाठ पहले से ही बटन पर पूरी जगह ले रहा है, तो पाठ को बड़ा बनाने का कोई प्रभाव नहीं पड़ेगा।
j3App

2
@ pratz9999 मैंने इसे 1000 पर सेट किया लेकिन फिर भी इसका बदलाव नहीं हुआ
शिवम पोखरियाल

30

एफएबी आमतौर पर CoordinatorLayoutएस में उपयोग किया जाता है । आप इसका उपयोग कर सकते हैं:

<android.support.design.widget.CoordinatorLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">

    <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:backgroundTint="@color/colorPrimary" />

      <TextView android:layout_height="wrap_content"
              android:layout_width="wrap_content"
              android:text="OK"
              android:elevation="6dp"
              android:textSize="18dp"
              android:textColor="#fff"
              app:layout_anchor="@id/fab"
              app:layout_anchorGravity="center"/>

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

यही काम करता है

app:layout_anchor="@id/fab"
app:layout_anchorGravity="center"

परिणाम:

परिणाम

यदि आप layout_behaviorअपने FAB के लिए कुछ का उपयोग कर रहे हैं , तो आपको इसके लिए एक समान बनाना layout_behaviorहोगाTextView


1
त्रुटि हो रही है android.support.design.widget.FloatingActionButton को android.view.ViewGroup
Ankur_009

1
क्या आप सुनिश्चित हैं कि आपका फ्लोटिंगएशनबटन कोऑर्डिनेटर लयआउट के अंदर है?
लोकेशमित्र

1
@ Ankur_009 यह त्रुटि android.support.design.widget.FloatingActionButton cannot be cast to android.view.ViewGroupशायद इसलिए है क्योंकि आपने TextViewFAB के अंदर रखा है। कृपया ओपी से जांचें कि टैग कहां बंद है।
डम्बलिंगर्स

TextView की ऊंचाई भी FAB की तुलना में बड़ी होनी चाहिए, अन्यथा यह FAB के पीछे छिप जाएगी
अली नेम

शानदार जवाब !!
Sjd

17

आप FloatingActionButtonसमर्थन लाइब्रेरी से पाठ सेट नहीं कर सकते हैं , लेकिन आप क्या कर सकते हैं, सीधे एंड्रॉइड स्टूडियो से एक टेक्स्ट छवि बना सकते हैं: File -> New -> Image Assetऔर फिर इसे अपने बटन के लिए उपयोग करें।

मटीरियल डिज़ाइन के संदर्भ में ; उन्होंने पाठ का उपयोग करने का उल्लेख नहीं किया है FloatingActionButton, और मुझे ऐसा करने का कोई कारण नहीं दिखता है क्योंकि आपके पास वास्तव में पाठ के लिए अधिक स्थान नहीं है।


5
"OK", "YES", "NO", "GO" जैसे पाठ FAB के .......... के अंदर पूरी तरह से फिट होते हैं
MarsAndBack

FABs में शब्दों के लिए, विस्तारित टैब देखें: material.io/design/compenders/…
माइक मार्गुलिज़

8

मुझे एक FAB में पाठ की आवश्यकता थी, लेकिन इसके बजाय मैं सिर्फ एक परिपत्र दृश्यमान पृष्ठभूमि के साथ TextView के साथ गया:

  <TextView
        android:layout_margin="10dp"
        android:layout_gravity="right"
        android:gravity="center"
        android:background="@drawable/circle_background"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFF"
        android:textStyle="bold"
        android:fontFamily="sans-serif"
        android:text="AuthId"
        android:textSize="15dp"
        android:elevation="10dp"/>

यहाँ ड्रा करने योग्य है (सर्कल_बैकग्रॉन्ग। Xml):

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

<solid
    android:color="#666666"/>

<size
    android:width="60dp"
    android:height="60dp"/>
</shape>

यहाँ छवि विवरण दर्ज करें


2
इस तरह के समाधान के साथ कोई लहर एनीमेशन नहीं है
व्लाद

2

उत्तर @NandanKumarSingh https://stackoverflow.com/a/39965170/5279156 काम करता है, लेकिन मैंने कोड में फैब के साथ कुछ बदलाव किए हैं (xml नहीं क्योंकि वे वर्ग विधियों में ओवरराइट हो जाएंगे)

fab.setTextBitmap("ANDROID", 100f, Color.WHITE)
fab.scaleType = ImageView.ScaleType.CENTER
fab.adjustViewBounds = false

जहां समान कार्यक्षमता के साथ वर्ग के setTextBitmapलिए एक विस्तार है, ImageViewलेकिन यह मल्टीलेन टेक्स्ट का समर्थन करता है

fun ImageView.setTextBitmap(text: String, textSize: Float, textColor: Int) {
    val paint = Paint(Paint.ANTI_ALIAS_FLAG)
    paint.textSize = textSize
    paint.color = textColor
    paint.textAlign = Paint.Align.LEFT
    val lines = text.split("\n")
    var maxWidth = 0
    for (line in lines) {
        val width = paint.measureText(line).toInt()
        if (width > maxWidth) {
            maxWidth = width
        }
    }
    val height = paint.descent() - paint.ascent()
    val bitmap = Bitmap.createBitmap(maxWidth, height.toInt() * lines.size, Bitmap.Config.ARGB_8888)
    val canvas = Canvas(bitmap)
    var y = - paint.ascent()
    for (line in lines) {
        canvas.drawText(line, 0f, y, paint)
        y += height
    }
    setImageBitmap(bitmap)
}

0

करने के लिए एक बहुत ही छोटे संशोधन के साथी के जवाब 21 नीचे एंड्रॉयड एपीआई के लिए यह समर्थन करने के लिए बस को जोड़ने app:elevation="0dp"के लिएFloatingActionButton

यह दूसरों की मदद कर सकता है!


0

मैंने उसी परिणाम को प्राप्त करने के लिए एक CardView का उपयोग किया

  <androidx.cardview.widget.CardView
            android:layout_width="@dimen/dp80"
            android:layout_height="@dimen/dp80"
            android:layout_gravity="center_horizontal"
            app:cardElevation="@dimen/dp8"
            android:layout_marginBottom="@dimen/dp16"
            android:layout_marginTop="@dimen/dp8"
            app:cardBackgroundColor="@color/colorWhite100"
            app:cardCornerRadius="@dimen/dp40">

            <TextView
                style="@style/TextAppearance.MaterialComponents.Headline4"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center_horizontal"
                android:background="@drawable/shape_go_bg"
                android:text="GO"
                android:gravity="center"
                android:textColor="@color/colorWhite100" />
        </androidx.cardview.widget.CardView>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.