2012-11-16 30 views
18

मेरे पास CheckBox है कि मैं अपनी सीमाओं के भीतर केंद्रित होना चाहता हूं, पक्ष में नहीं धकेलता हूं। शायद आसान प्रदर्शन की तुलना में विस्तार से बताया:केंद्र चेकबॉक्स स्वयं के भीतर खींचने योग्य

enter image description here

ध्यान दें कि यह केंद्रित नहीं है। वर्तमान में परिभाषित किया गया है:

<CheckBox 
    android:id="@+id/checkbox_star" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:button="@drawable/btn_favorite" 

    android:layout_gravity="center" 
    android:minWidth="48dp" /> 

कस्टम बटन को खींचने योग्य न करें। यह एक वेनिला CheckBox के साथ भी व्यवहार करता है (छोटा चेक बॉक्स वही व्यवहार करता है)।

उत्तर

25

मुझे विश्वास है कि समस्या यह है कि चेकबॉक्स विजेट drawableLeft विशेषता के साथ एक नियमित टेक्स्ट व्यू का उपयोग करता है, क्योंकि यह पाठ को भी दिखाया जा सकता है। (यही कारण है कि आप इसे लंबवत केंद्रित करते हैं, लेकिन बाईं ओर थोड़ा ऑफसेट करते हैं।)

यदि आप बस कई राज्यों के साथ एक छवि बटन चाहते हैं, तो मैं में अपनी कस्टम छवियों के साथ ToggleButton का उपयोग करने का सुझाव देता हूं। या आप एक कस्टम क्लास बना सकते हैं जो ImageView और लागू करने योग्य लागू करता है।

+0

बिंगो! ओह वाह, धन्यवाद एक गुच्छा ... आसान और सरल ... मैंने टॉगल बटन के बारे में नहीं सोचा था! – davidcesarino

+11

छवि आकार के मुकाबले बटन आकार बड़ा होने पर, टॉगलबटन 'छवि के केंद्र में मदद कैसे कर सकता है? –

+0

आपने इसे @YShinkarev कैसे हल किया? – Sunkas

8

आप इस लक्ष्य को हासिल करने के लिए एक माता पिता के लेआउट का उपयोग कर सकते हैं:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center"> 

    <CheckBox 
     android:id="@+id/checkbox_star" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="Check box text" /> 
</LinearLayout> 
+2

आपके उत्तर के लिए धन्यवाद, लेकिन यही कारण है कि मैंने कहा "केंद्र [...] खुद में" और "केंद्र [...] कुछ और में नहीं" ;-), अन्यथा मुझे लगता है कि मैंने पहले ही ऐसा किया होगा। जब आप विजेट के क्लिक क्षेत्र पर विचार करते हैं तो यह समस्या बहुत प्रासंगिक होती है। – davidcesarino

+0

फिर क्षेत्र पर क्लिक करने पर दो नियंत्रण के रूप में चेकबॉक्स बटन और चेकबॉक्स टेक्स्ट को अलग करें। एक तरफ एक टेक्स्टव्यू पक्ष के साथ चेकबॉक्स का प्रयोग करें। –

+2

मेरे पास कोई पाठ नहीं है (या चाहते हैं), न ही यह समस्या को हल करता है।यह एक 'चेकबॉक्स' को अपने ड्राइंग से बड़ा बनाने के बारे में है, जबकि स्थिति में केंद्र में खींचने योग्य और विजेट सीमाओं के बाईं ओर स्थित नहीं है। आपने जो कहा वह ऐसा नहीं करता है। – davidcesarino

2

यह सही काम करेंगे की जरूरत के रूप में की आवश्यकता है। पृष्ठभूमि और बटन विशेषताओं में बस छोटे बदलाव। यह कोड स्निपेट सफलतापूर्वक परीक्षण किया जाता है। उम्मीद है कि यह मदद करता है।

<CheckBox 
android:id="@+id/checkbox_star" 
android:layout_width="wrap_content" 
android:layout_height="match_parent" 
android:background="@drawable/btn_favorite" 
android:button="@color/transparent" 
android:layout_gravity="center" 
android:minWidth="48dp" /> 
2

आप imageView कि चेक करने योग्य, तुम मेरे सार यहाँ https://gist.github.com/hendrawd/661824a721c22b3244667379e9358b5f

देख सकते हैं या नीचे

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.Checkable; 
import android.widget.ImageView; 

/** 
* @author hendrawd on 6/23/16 
*/ 
public class CheckableImageView extends ImageView implements Checkable { 

    public CheckableImageView(Context context) { 
     super(context); 
    } 

    public CheckableImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    private boolean mChecked = false; 

    private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; 

    @Override 
    public int[] onCreateDrawableState(final int extraSpace) { 
     final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 
     if (isChecked()) 
      mergeDrawableStates(drawableState, CHECKED_STATE_SET); 
     return drawableState; 
    } 

    @Override 
    public void setChecked(boolean checked) { 
     if (mChecked != checked) { 
      mChecked = checked; 
      refreshDrawableState(); 
     } 
    } 

    @Override 
    public boolean isChecked() { 
     return mChecked; 
    } 

    @Override 
    public void toggle() { 
     setChecked(!mChecked); 
    } 

    @Override 
    public void setOnClickListener(final OnClickListener l) { 
     View.OnClickListener onClickListener = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       toggle(); 
       l.onClick(v); 
      } 
     }; 
     super.setOnClickListener(onClickListener); 
    } 
} 

पूर्ण कोड देख सकते हैं बस अपने एक्सएमएल का src टैग और पर अपने चयनकर्ता सेट चाहते हैं चेक की योग्य स्थिति का पालन करेंगे। यह चेकबॉक्स की संरेखण समस्या को हल करेगा और अन्य छवि दृश्य गुणों को हल करेगा। उपयोग की

उदाहरण:

<your.package.name.CheckableImageView 
    android:id="@+id/some_id" 
    android:layout_width="48dp" 
    android:layout_height="48dp" 
    android:src="@drawable/drawable_selector_of_your_choice" 
    android:padding="14dp" 
    android:gravity="center" /> 
0

आप recyclerview में चेक बॉक्स का उपयोग करने जा रहे हैं> SDK23 के लिए केंद्र aligment साथ बाईपास चेकबॉक्स बग के लिए इस कोड का प्रयोग न करें। (:, स्क्रॉल .. उदाहरण)

<CheckBox 
android:button="@null" 
android:drawableLeft="@drawable/checkbox_selector" 
android:drawableStart="@drawable/checkbox_selector" 
/> 

बगल में स्थित चेकबॉक्स रीफ्रेश होने onBindViewHolder में जाँच नहीं हो अगर आर.वी.।

4
android:button="@null" 
android:foreground="@drawable/btn_favorite" 
android:foregroundGravity="center" 
+0

यह मेरे उपयोग के मामले के लिए पूरी तरह से काम करता है। 'एंड्रॉइड: पृष्ठभूमि' के लिए एक खींचने योग्य राज्य चयनकर्ता के साथ मिलकर यह पूरी तरह से अनुकूलित चेकबॉक्स प्राप्त करता है। – jhauberg

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^