आइकन और पाठ के साथ Android बटन


92

मेरे ऐप में इस तरह के कुछ बटन हैं:

    <Button
        android:id="@+id/bSearch"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:text="Search"
        android:textSize="24sp" />

मैं टेक्स्ट और आइकन के साथ एक ही बटन बनाने की कोशिश कर रहा हूं। android: drawableLeft मेरे लिए काम नहीं करता है (शायद यह होगा, लेकिन मुझे नहीं पता कि आइकन को अधिकतम ऊंचाई कैसे सेट करें)।

इसलिए मैंने एक ImageView और एक TextView के साथ एक LinearLayout बनाया और इसे एक बटन की तरह काम किया:

    <LinearLayout
        android:id="@+id/bSearch2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/btn_default"
        android:clickable="true"
        android:padding="16dp"
        android:orientation="horizontal" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:adjustViewBounds="true"
            android:maxHeight="30dp"
            android:maxWidth="30dp"
            android:scaleType="fitCenter"
            android:src="@drawable/search_icon" />

        <TextView
            android:id="@+id/tvSearchCaption"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textSize="24sp"
            android:paddingRight="30dp"
            android:gravity="center"
            android:text="Search" />
    </LinearLayout>

मेरा नया बटन वही है जो मैं चाहता हूं (फ़ॉन्ट आकार, आइकन और पाठ प्लेसमेंट)। लेकिन यह मेरे डिफ़ॉल्ट बटन की तरह नहीं दिखता है:

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

इसलिए मैंने अपने नए बटन की पृष्ठभूमि और पाठ का रंग बदलने की कोशिश की:

Button Search = (Button) findViewById(R.id.bSearch);
LinearLayout bSearch2 = (LinearLayout) findViewById(R.id.bSearch2);
bSearch2.setBackground(bSearch.getBackground());
TextView tvSearchCaption = (TextView)findViewById(R.id.tvSearchCaption);
tvSearchCaption.setTextColor(bSearch.getTextColors().getDefaultColor());

यह एक अजीब परिणाम देता है, मेरा पुराना बटन गड़बड़ हो जाता है:

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

जब मैं XML में इन दो बटन के क्रम को बदलता हूं, तो "नया बटन" पहले जाता है, यह एक और अजीब परिणाम देता है:

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

अब मैंने देखा, कि जब मैं पुराने बटन को दबाने की कोशिश करता हूं, तो नया दबाया जाता है।

कोई विचार?

जवाबों:


283

इसको आजमाओ।

<Button
    android:id="@+id/bSearch"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:text="Search"
    android:drawableLeft="@android:drawable/ic_menu_search"
    android:textSize="24sp"/>

3
यह बिल्कुल दिखता है कि मैं यह कैसे चाहता हूं, लेकिन मैं अपने स्वयं के आइकन का उपयोग करना चाहता हूं, न कि डिफ़ॉल्ट एंड्रॉइड वाले। मेरे प्रतीक बड़े आकार के हैं। क्या इसका मतलब है, मुझे हर संकल्प के लिए छोटे बिटमैप बनाने की आवश्यकता है? क्या कुछ पैरामीटर है जो मुझे आइकन के आकार को नियंत्रित करने देता है?
दुसान

वह सही है। आपको प्रत्येक रिज़ॉल्यूशन के लिए अलग-अलग इमेज साइज़ बनाने की आवश्यकता है
Liem Vo

ठीक है, आपकी मदद के लिए धन्यवाद, लेकिन अब मेरे पास एक और सवाल है ... मेरे आइकन हल्के हैं, क्योंकि पाठ एक अंधेरे बटन पर सफेद है, जैसे आप मेरे प्रश्न में छवियों में देख सकते हैं। एप्लिकेशन को एक थीम का उपयोग करने के लिए सेट किया गया है, जो एंड्रॉइड संस्करण में उपलब्ध है। मेरे उदाहरण एंड्रॉइड 4.3 से हैं। जब ऐप एंड्रॉइड 2.3.3 पर चलता है, तो डिफ़ॉल्ट बटन अंधेरे पाठ के साथ हल्के होते हैं। मेरी पहली छवि पर बटन की तरह कुछ। क्या पुराने उपकरणों पर चलने वाले आइकन के लिए एक वैकल्पिक बिटमैप प्रदान करने का एक तरीका है। मुझे आशा है कि आप मेरे प्रश्न को समझेंगे :)
दुसान

यह अच्छा सवाल है। आप प्रत्येक एपीआई स्तर के लिए अपने आइकन, शैली में पाठ कूलर के लिए अलग शैली को परिभाषित कर सकते हैं (इसका अर्थ एंड्रॉइड ओएस संस्करण है)। आप मान- v11, मान- v14 फ़ोल्डर देख सकते हैं।
Liem Vo

2
आप आइकन एंड्रॉइड के लिए पैडिंग को भी जोड़ सकते हैं: drawablePadding = ""
असद मिर्जा

15

बाएँ, दाएँ, ऊपर या नीचे एक छवि जोड़ने के लिए, आप इस तरह से विशेषताओं का उपयोग कर सकते हैं:

android:drawableLeft
android:drawableRight
android:drawableTop
android:drawableBottom

नमूना कोड ऊपर दिया गया है। आप सापेक्ष लेआउट का उपयोग करके भी इसे प्राप्त कर सकते हैं।


मैं इस कार्यक्रम को कैसे करूं
सुजय यूएन

1
आप android:drawableStartवाम के बजाय कह सकते हैं , और android:drawableEndदक्षिणपंथ के बजाय।
सिमो गार्सिया

@ SimãoGarcia * करना चाहिए। प्रारंभ को दाईं ओर प्रतिस्थापित करना चाहिए और अंत में सभी स्थानों पर बाईं ओर प्रतिस्थापित करना चाहिए। यह सुनिश्चित करना है कि बाएं पढ़ने के साथ-साथ बाएं से दाएं पढ़ना भी उपलब्ध है क्योंकि कुछ अन्य देश अलग-अलग पढ़ते हैं।
कार्सन जे।

11

किसी को भी ऐसा करने के लिए गतिशील रूप से तो setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)बटन ऑब्जेक्ट पर सहायता करेगा।

नमूना

Button search = (Button) findViewById(R.id.yoursearchbutton);
search.setCompoundDrawables('your_drawable',null,null,null);

5
SetCompoundDrawables का उपयोग करना UI पर प्रतिबिंबित नहीं हुआ। इसके बजाय setCompoundDrawablesWithIntrinsicBounds का इस्तेमाल किया और वह काम किया।
Aldo

5

यह वही है जो आप वास्तव में चाहते हैं।

<Button
       android:id="@+id/settings"
       android:layout_width="190dp"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:background="@color/colorAccent"
       android:drawableStart="@drawable/ic_settings_black_24dp"
       android:paddingStart="40dp"
       android:paddingEnd="40dp"
       android:text="settings"
       android:textColor="#FFF" />

4

आप सामग्री घटक लाइब्रेरी और घटक का उपयोग कर सकते हैं MaterialButton। और विशेषताओं का
उपयोग करें ।app:iconapp:iconGravity="start"

कुछ इस तरह:

  <com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.Icon"
        app:icon="@drawable/..."
        app:iconGravity="start"
        ../>

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


ध्यान दें कि यदि आपके पास अपने ऐप के लिए एक सामग्री डिज़ाइन विषय है, तो मानक बटन विजेट ऑटोबटन के रूप में फुलाया जाता है। यहाँ प्रति - material.io/develop/android/compenders/buttons
dodgy_coder

1

अगर आप android.widget.Button को बिना किसी ओवरराइडिंग के उपयोग कर रहे हैं तो @Lem Vo का उत्तर सही है। यदि आप मटेरियलकंप्यूटरों का उपयोग करके अपने विषय को ओवरराइड कर रहे हैं, तो इससे समस्या हल नहीं होगी।

तो अगर तुम हो

  1. Com.google.android.material.button.MaterialButton या का उपयोग करना
  2. मटीरियलकॉर्पेटर्स का उपयोग करके ऐपटैम को ओवरराइड करना

एप्लिकेशन का उपयोग करें : आइकन पैरामीटर।

<Button
    android:id="@+id/bSearch"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:text="Search"
    android:textSize="24sp"
    app:icon="@android:drawable/ic_menu_search" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.