চেকবক্স নিয়ন্ত্রণে চেকবক্স এবং সম্পর্কিত পাঠ্যের মধ্যে প্যাডিং যুক্ত করার কোনও সহজ উপায় আছে কি?
আমি কেবল নেতৃস্থানীয় স্পেস যোগ করতে পারি না, কারণ আমার লেবেলটি বহু-লাইন।
যেমনটি রয়েছে, পাঠ্যটি চেকবাক্সের খুব কাছেই রয়েছে:
চেকবক্স নিয়ন্ত্রণে চেকবক্স এবং সম্পর্কিত পাঠ্যের মধ্যে প্যাডিং যুক্ত করার কোনও সহজ উপায় আছে কি?
আমি কেবল নেতৃস্থানীয় স্পেস যোগ করতে পারি না, কারণ আমার লেবেলটি বহু-লাইন।
যেমনটি রয়েছে, পাঠ্যটি চেকবাক্সের খুব কাছেই রয়েছে:
উত্তর:
আমি আমার নিজের প্রশ্নের উত্তর দিতে ঘৃণা করি, তবে এই ক্ষেত্রে আমি মনে করি আমার এটি করা দরকার। এটি যাচাইয়ের পরে, @ ফালমারি তার উত্তরটি সহ সঠিক পথে ছিলেন। সমস্যাটি হ'ল অ্যান্ড্রয়েডের চেকবক্স নিয়ন্ত্রণ ইতিমধ্যে অ্যান্ড্রয়েড: প্যাডিং লেফট সম্পত্তিটি যেখানে রয়েছে সেখানে পাঠ্যটি পেতে ব্যবহার করে।
লাল রেখাটি পুরো চেকবক্সের প্যাডিং লেফট অফসেট মান দেখায়
আমি যদি কেবলমাত্র আমার এক্সএমএল লেআউটে সেই প্যাডিংটিকে ওভাররাইড করি তবে এটি লেআউটটি মিস করবে। লেডিং লেফট = "0" কী সেটিংয়ের সেটিংস এখানে রয়েছে:
দেখা যাচ্ছে আপনি XML এ এটি ঠিক করতে পারবেন না। আপনি কোড এ আছে। এখানে 10 ডিপি এর হার্ডকোডযুক্ত প্যাডিং বৃদ্ধি সহ আমার স্নিপেট।
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
checkBox.getPaddingTop(),
checkBox.getPaddingRight(),
checkBox.getPaddingBottom());
এটি আপনাকে নিম্নলিখিতগুলি দেয়, যেখানে সবুজ রেখাটি প্যাডিংয়ের বৃদ্ধি। এটি মানকে হার্ডকোডিংয়ের চেয়ে নিরাপদ, যেহেতু বিভিন্ন ডিভাইসগুলি চেকবাক্সের জন্য বিভিন্ন ড্রয়যোগ্য ব্যবহার করতে পারে।
আপডেট - লোকেরা সম্প্রতি নীচের উত্তরে উল্লেখ করেছে যেহেতু, এই আচরণটি দৃশ্যত জেলি বিন (৪.২) এ পরিবর্তিত হয়েছে। আপনার অ্যাপ্লিকেশনটির কোন সংস্করণটি চলছে তা পরীক্ষা করে সঠিক পদ্ধতিটি ব্যবহার করতে হবে।
৪.৩++ এর জন্য এটি কেবল প্যাডিং_ বাম সেট করছে। বিশদ জন্য htafoya এর উত্তর দেখুন।
paddingLeft="48sp"
কি সমস্যা? আমি স্কেল এবং অভিমুখীকরণ পরিবর্তন করলেও এখানে সূক্ষ্মভাবে কাজ করে। আপনার কোড আমাকে আইটেমের তালিকার তুলনায় ইরটিক প্যাডিং মান দেয়।
getView()
কাস্টম অ্যাডাপ্টারের ক্ষেত্রে এই সমাধানটি ব্যবহার করতে পারবেন না (যদি আপনি নিজের মতামতগুলি পুনরায় ব্যবহার করেন), যেহেতু প্যাডিং অবিরাম বাড়বে will এই সমস্যা আমি ভালো কিছু ব্যবহার ছিল ঠিক করার জন্য: boolean isHackNeeded = Build.VERSION.SDK_INT < 17; float scale = context.getResources().getDisplayMetrics().density; if (isHackNeeded) {CheckBox rb = new CheckBox(context); this.PADDING = rb.getPaddingLeft() + Math.round(10.0f * scale); } else { this.PADDING = Math.round(10.0f * scale); }
। এবং তারপরে PADDING
আমি প্রতিটি চেকবক্সের জন্য ব্যবহার করব:check.setPadding(PADDING, check.getPaddingTop() ...
@ ডগডাব্লু প্রতিক্রিয়া দেওয়া, সংস্করণ পরিচালনা করতে আমি যা করি তা সহজ, আমি আমার চেকবক্স ভিউতে যুক্ত করি:
android:paddingLeft="@dimen/padding_checkbox"
যেখানে মাত্রা দুটি মান ফোল্ডারে পাওয়া যায়:
মান
<resources>
<dimen name="padding_checkbox">0dp</dimen>
</resources>
মান-ভি 17 (4.2 জেলিবিয়ান)
<resources>
<dimen name="padding_checkbox">10dp</dimen>
</resources>
আমার একটি কাস্টম চেক আছে, আপনার সেরা পছন্দের জন্য ডিপিএস ব্যবহার করুন।
values-v17
ঠিক যেমন এপিআই 17 তে চালু হয়েছিল (উপরের কিছু পোস্ট অনুসারে)
এর android:drawableLeft
পরিবর্তে বৈশিষ্ট্যটি ব্যবহার করুন android:button
। অঙ্কনযোগ্য এবং পাঠ্য ব্যবহারের মধ্যে প্যাডিং সেট করার জন্য android:drawablePadding
। অঙ্কনযোগ্য ব্যবহার অবস্থান android:paddingLeft
।
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@null"
android:drawableLeft="@drawable/check_selector"
android:drawablePadding="-50dp"
android:paddingLeft="40dp"
/>
android:background="@android:color/transparent"
এবং বাম মার্জিন
<item name="android:checkboxStyle">@style/CheckBox</item>
এইভাবে, আপনি শৈলীর একবার সংজ্ঞা দিয়েছেন এবং কেবল একবারেই উল্লেখ করেছেন।
অ্যান্ড্রয়েড 2.২ জেলি বিন (এপিআই 17) বোতাম ড্র্যাবল (ইনটসের ডান প্রান্ত) থেকে পাঠ্য প্যাডিং লেফট রাখে। এটি আরটিএল মোডের জন্যও কাজ করে।
৪.২ প্যাডিং লেফটটি ড্র্যাবলযোগ্য বোতামটি উপেক্ষা করছিল - এটি কমপাউন্ডবটন ভিউয়ের বাম প্রান্ত থেকে নেওয়া হয়েছিল।
আপনি এটি এক্সএমএল এর মাধ্যমে সমাধান করতে পারবেন - পুরানো অ্যান্ড্রয়েডগুলিতে প্যাডিং লেফটটি বোতাম ড্রয়েবল.উইউথ + প্রয়োজনীয়স্পেসে সেট করুন। শুধুমাত্র এপিআই 17 আপ এ এটি প্রয়োজনীয় স্পেসে সেট করুন। উদাহরণস্বরূপ, মাত্রা সংস্থানগুলি ব্যবহার করুন এবং মান-v17 রিসোর্স ফোল্ডারে ওভাররাইড করুন।
পরিবর্তনটি android.widget.CompoundButton.getCompoundPaddingLeft () এর মাধ্যমে প্রবর্তিত হয়েছিল;
android:background="@android:color/transparent"
।
হ্যাঁ, আপনি প্যাডিং যুক্ত করে প্যাডিং যুক্ত করতে পারেন।
android:padding=5dp
আপনি যদি কোড ছাড়াই একটি পরিষ্কার নকশা চান, ব্যবহার করুন:
<CheckBox
android:id="@+id/checkBox1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:drawableLeft="@android:color/transparent"
android:drawablePadding="10dp"
android:text="CheckBox"/>
কৌশলটি হ'ল রঙ স্বচ্ছ করতে সেট করুন android:drawableLeft
এবং এর জন্য একটি মান নির্ধারণ করুন android:drawablePadding
। এছাড়াও, স্বচ্ছতা আপনাকে এই কৌশলটি পার্শ্ব প্রতিক্রিয়া ছাড়াই যে কোনও পটভূমির রঙে ব্যবহার করতে দেয় - যেমন রঙের অমিল।
এপিআই 17 এবং তারপরের, আপনি ব্যবহার করতে পারেন:
অ্যান্ড্রয়েড paddingStart = "24dp"
এপিআই 16 এবং নীচে, আপনি ব্যবহার করতে পারেন:
অ্যান্ড্রয়েড paddingLeft = "24dp"
আমার ক্ষেত্রে আমি এক্সএমএলে নিম্নলিখিত চেকবক্স অ্যাট্রিবিউটটি ব্যবহার করে এই সমস্যার সমাধান করেছি:
*
অ্যান্ড্রয়েড paddingLeft = "@ dimen / activity_horizontal_margin"
*
সহজ সমাধান, এই লাইনটি চেকবক্স বৈশিষ্ট্যে যুক্ত করুন, আপনার পছন্দসই ব্যবধানের মান দিয়ে 10dp প্রতিস্থাপন করুন
android:paddingLeft="10dp"
আমি বলছি না, কিন্তু আমি পরীক্ষা
<CheckBox android:paddingLeft="8mm"
এবং কেবল পাঠ্যটি ডানদিকে সরিয়ে দেয়, পুরো নিয়ন্ত্রণ নয়।
এটা আমার জন্য ভাল।
পরিবর্তে আরও ভাল প্যাডিংয়ের জন্য কেন কেবল অ্যান্ড্রয়েড চেকবক্সকে প্রসারিত করবেন না। প্রতিবার আপনি চেকবক্স ব্যবহার করার সময় কোডে এটি ঠিক করার পরিবর্তে আপনি কেবলমাত্র পরিবর্তিত চেকবক্স ব্যবহার করতে পারেন।
প্রথমে চেকবক্স প্রসারিত করুন:
package com.whatever;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.CheckBox;
/**
* This extends the Android CheckBox to add some more padding so the text is not on top of the
* CheckBox.
*/
public class CheckBoxWithPaddingFix extends CheckBox {
public CheckBoxWithPaddingFix(Context context) {
super(context);
}
public CheckBoxWithPaddingFix(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CheckBoxWithPaddingFix(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public int getCompoundPaddingLeft() {
final float scale = this.getResources().getDisplayMetrics().density;
return (super.getCompoundPaddingLeft() + (int) (10.0f * scale + 0.5f));
}
}
সাধারণ চেকবক্স তৈরি করার পরিবর্তে আপনার এক্সএমএল দ্বিতীয়টি আপনার বর্ধিত একটি তৈরি করুন
<com.whatever.CheckBoxWithPaddingFix
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello there" />
আমি স্রেফ এই বিষয়ে সিদ্ধান্ত নিয়েছি:
চেকবক্সকে ওভাররাইড করুন এবং আপনার যদি কাস্টম আঁকতে সক্ষম হয় তবে এই পদ্ধতিটি যুক্ত করুন:
@Override
public int getCompoundPaddingLeft() {
// Workarround for version codes < Jelly bean 4.2
// The system does not apply the same padding. Explantion:
// http://stackoverflow.com/questions/4037795/android-spacing-between-checkbox-and-text/4038195#4038195
int compoundPaddingLeft = super.getCompoundPaddingLeft();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
Drawable drawable = getResources().getDrawable( YOUR CUSTOM DRAWABLE );
return compoundPaddingLeft + (drawable != null ? drawable.getIntrinsicWidth() : 0);
} else {
return compoundPaddingLeft;
}
}
বা এটি যদি আপনি সিস্টেমটিকে আঁকতে সক্ষম ব্যবহার করেন:
@Override
public int getCompoundPaddingLeft() {
// Workarround for version codes < Jelly bean 4.2
// The system does not apply the same padding. Explantion:
// http://stackoverflow.com/questions/4037795/android-spacing-between-checkbox-and-text/4038195#4038195
int compoundPaddingLeft = super.getCompoundPaddingLeft();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
final float scale = this.getResources().getDisplayMetrics().density;
return compoundPaddingLeft + (drawable != null ? (int)(10.0f * scale + 0.5f) : 0);
} else {
return compoundPaddingLeft;
}
}
উত্তর করার জন্য ধন্যবাদ :)
চেক চিহ্ন এবং পাঠ্য ব্যবহারের মধ্যে স্থানের জন্য:
android:paddingLeft="10dp"
তবে এটি 10 ডিপি-র বেশি হয়ে যায়, কারণ চেক চিহ্নটিতে চারপাশে প্যাডিং রয়েছে (প্রায় 5 ডিপি)। আপনি যদি প্যাডিং অপসারণ করতে চান তবে অ্যান্ড্রয়েড চেকবক্সের চারপাশে কীভাবে প্যাডিং সরাবেন তা দেখুন :
android:paddingLeft="-5dp"
android:layout_marginStart="-5dp"
android:layout_marginLeft="-5dp"
// or android:translationX="-5dp" instead of layout_marginLeft
<CheckBox
android:paddingRight="12dip" />
Bad idea for usability
না এইটা না. একটি রৈখিক বিন্যাসে চেকবাক্স এবং পাঠ্যদর্শন উভয়ই রাখুন এবং সেই লিনিয়ারলআউটটিকে স্পর্শযোগ্য করে তুলুন।
যদি আপনার চেকবক্স বা রেডিওবটনগুলির জন্য কাস্টম চিত্র নির্বাচনকারী থাকে তবে আপনাকে অবশ্যই একই বোতাম এবং পটভূমি সম্পত্তি সেট করতে হবে:
<CheckBox
android:id="@+id/filter_checkbox_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/selector_checkbox_filter"
android:background="@drawable/selector_checkbox_filter" />
আপনি ব্যাকগ্রাউন্ড সম্পত্তি সহ আকারের চেকবক্স বা রেডিও বোতাম প্যাডিং নিয়ন্ত্রণ করতে পারেন।
আপনি যদি কাস্টম বোতাম তৈরি করছেন, যেমন চেকবক্স টিউটোরিয়ালটির চেহারা পরিবর্তন দেখুন
তারপরে চিত্রের কেন্দ্রে স্বচ্ছ পিক্সেলের আরও একটি বা দুটি কলাম যুক্ত করে বিটিএন_চেক_লাবেল_ব্যাকগ্রাউন্ড .9.png প্রস্থটি কেবল বাড়িয়ে দিন; 9-প্যাচ চিহ্নিতকারীদের যেমন রয়েছে তেমন ছেড়ে দিন।
গ্যালাক্সি এস 3 মিনি (অ্যান্ড্রয়েড 4.1.2) নিয়ে আমার একই সমস্যা ছিল এবং আমি আমার কাস্টম চেকবক্সটিকে চেকবক্সের পরিবর্তে অ্যাপকম্প্যাটচেকবক্স প্রসারিত করেছিলাম। এখন এটি পুরোপুরি কাজ করে।
এই আকারে আপনার প্যাডিং যুক্ত করার জন্য আপনি যে চিত্রটি ব্যবহার করছেন সেটি আকারের প্রয়োজন। অ্যানড্রয়েড ইন্টার্নালগুলিতে, তারা আপনার এসআরসি-তে নির্দিষ্টভাবে আঁকতে সক্ষম হয় এবং এর আকারটি পরে ব্যবহার করে। যেহেতু এটি একটি ব্যক্তিগত পরিবর্তনশীল এবং কোনও গেটর নেই আপনি এটিতে অ্যাক্সেস করতে পারবেন না। এছাড়াও আপনি com.android.intern.R.styleable.CompoundButton এবং সেখান থেকে অঙ্কনযোগ্য পেতে পারেন না।
সুতরাং আপনার নিজের স্টাইলযোগ্য (যেমন কাস্টম_এসসিআর) তৈরি করতে হবে বা আপনি এটি সরাসরি রেডিওবাটন বাস্তবায়নে যুক্ত করতে পারেন:
public class CustomRadioButton extends RadioButton {
private Drawable mButtonDrawable = null;
public CustomRadioButton(Context context) {
this(context, null);
}
public CustomRadioButton(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CustomRadioButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mButtonDrawable = context.getResources().getDrawable(R.drawable.rbtn_green);
setButtonDrawable(mButtonDrawable);
}
@Override
public int getCompoundPaddingLeft() {
if (Util.getAPILevel() <= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (drawable != null) {
paddingLeft += drawable.getIntrinsicWidth();
}
}
return paddingLeft;
}
}
আপনি সম্ভবত আপনার android:button
সম্পত্তির জন্য একটি অঙ্কনযোগ্য নির্বাচক ব্যবহার করার জন্য আপনাকে যুক্ত করতে android:constantSize="true"
এবং / অথবা এর মতো একটি ডিফল্ট অঙ্কনযোগ্য নির্দিষ্ট করতে হবে :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:constantSize="true">
<item android:drawable="@drawable/check_on" android:state_checked="true"/>
<item android:drawable="@drawable/check_off"/>
</selector>
এর পরে আপনাকে android:paddingLeft
আপনার চেকবক্সের এক্সএমএলে বিশিষ্টতা নির্দিষ্ট করতে হবে ।
কনস:
লেআউট এডিটরটিতে আপনি এপিআই 16 এবং নীচে চেকবক্সের অধীনে থাকা পাঠ্যটি সেক্ষেত্রে প্রস্তাবিত মতো কাস্টম চেকবক্স ক্লাস তৈরি করে এটি ঠিক করতে পারবেন তবে এপিআই স্তর 16 এর জন্য।
নীতি:
StateListDrawable#getIntrinsicWidth()
কলটি অভ্যন্তরীণভাবে ব্যবহৃত হওয়ায় এটি একটি বাগ CompoundButton
but তবে < 0
কোনও বর্তমান অবস্থা না থাকলে এবং কোনও ধ্রুবক আকার ব্যবহার না করা হলে এটি মান ফিরে আসতে পারে ।
সমস্ত এই সমস্যা কাটিয়ে ওঠার জন্য যা করতে হবে তা যোগ হয় android:singleLine="true"
থেকে checkBox
আপনার Android XML লেআউট:
<CheckBox
android:id="@+id/your_check_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:background="@android:color/transparent"
android:text="@string/your_string"/>
এবং বিশেষ কিছু প্রোগ্রামক্রমে যোগ করা হবে না।
নির্বাচকের কাছ থেকে আমি আমার নিজস্ব অঙ্কনযোগ্য ব্যবহার করার সময় চেকবক্সের চিত্রটি ওভারল্যাপিং করছিল, আমি নীচের কোড ব্যবহার করে এটি সমাধান করেছি:
CheckBox cb = new CheckBox(mActivity);
cb.setText("Hi");
cb.setButtonDrawable(R.drawable.check_box_selector);
cb.setChecked(true);
cb.setPadding(cb.getPaddingLeft(), padding, padding, padding);
অ্যালেক্স সেমেনিয়ুককে ধন্যবাদ
আমি ইমেজ পরিবর্তন করে এই সমস্যাটি শেষ করছি। Png ফাইলগুলিতে সবেমাত্র অতিরিক্ত স্বচ্ছ পটভূমি যুক্ত করা হয়েছে। এই সমাধানটি সমস্ত API এ দুর্দান্ত কাজ করে।
হতে পারে দেরি হতে পারে তবে আমি এই সমস্যাটি পরিচালনা করতে ইউটিলিটি পদ্ধতি তৈরি করেছি।
আপনার ব্যবহারগুলিতে কেবল এই পদ্ধতিগুলি যুক্ত করুন:
public static void setCheckBoxOffset(@NonNull CheckBox checkBox, @DimenRes int offsetRes) {
float offset = checkBox.getResources().getDimension(offsetRes);
setCheckBoxOffsetPx(checkBox, offset);
}
public static void setCheckBoxOffsetPx(@NonNull CheckBox checkBox, float offsetInPx) {
int leftPadding;
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
leftPadding = checkBox.getPaddingLeft() + (int) (offsetInPx + 0.5f);
} else {
leftPadding = (int) (offsetInPx + 0.5f);
}
checkBox.setPadding(leftPadding,
checkBox.getPaddingTop(),
checkBox.getPaddingRight(),
checkBox.getPaddingBottom());
}
এবং এটির মতো ব্যবহার করুন:
ViewUtils.setCheckBoxOffset(mAgreeTerms, R.dimen.space_medium);
বা এই মত:
// Be careful with this usage, because it sets padding in pixels, not in dp!
ViewUtils.setCheckBoxOffsetPx(mAgreeTerms, 100f);
চেকবক্সের জন্য পাঠ্যটি সামঞ্জস্য করার পরিবর্তে, আমি নিম্নলিখিত জিনিসগুলি করেছি এবং এটি সমস্ত ডিভাইসের জন্য আমার পক্ষে কাজ করেছে। 1) এক্সএমএলে, চেকবক্স এবং একের পর এক সংলগ্ন একটি পাঠ্যদর্শন যুক্ত করুন; কিছুটা দূরে রাখা 2) চেকবাক্স পাঠ্যের আকার 0sp এ সেট করুন। 3) চেকবাক্সের পাশের সেই পাঠ্যদর্শনটিতে আপেক্ষিক পাঠ্য যুক্ত করুন।
<CheckBox android:drawablePadding="16dip"
- অঙ্কনযোগ্য এবং পাঠ্যের মধ্যে প্যাডিং।
TextView
সঙ্গেdrawableLeft
এবং ব্যবহারdrawablePadding
পাঠ্যে স্থান দিতে। কোডে কেবলমাত্র নির্বাচিত এবং অনির্বাচিত রাজ্যে টগল করুন।