অ্যান্ড্রয়েড বোতামে আইকন এবং পাঠ্যকে কেন্দ্র করে কীভাবে "পূর্ণ পিতামাতাকে" সেট করা হবে


118

আমি এর ভিতরে আইকন + পাঠ্য সহ একটি অ্যান্ড্রয়েড বোতাম রাখতে চাই। আমি চিত্রটি সেট করতে অঙ্কনযোগ্য বাম বৈশিষ্ট্যটি ব্যবহার করছি, বোতামটির প্রস্থ থাকলে এইটি ভাল কাজ করে "wrap_content"তবে আমার প্রস্থটি সর্বোচ্চ প্রস্থে প্রসারিত করতে হবে "fill_parent"। এটি আমার আইকনটি সোজা বোতামের বাম দিকে সরায় এবং আমি বোতামের অভ্যন্তরে আইকন এবং পাঠ্য উভয়ই চাই।

আমি প্যাডিং সেট আপ করার চেষ্টা করেছি তবে এটি কেবলমাত্র একটি নির্দিষ্ট মান দেয় যাতে এটি আমার প্রয়োজন হয় না। আমার মাঝে আইকন + পাঠ্যটি বিন্যস্ত করা দরকার।

<Button 
    android:id="@+id/startTelemoteButton" 
    android:text="@string/start_telemote"
    android:drawableLeft="@drawable/start"
    android:paddingLeft="20dip"
    android:paddingRight="20dip"            
    android:width="fill_parent"
    android:heigh="wrap_content" />

আমি কীভাবে এটি অর্জন করতে পারি তার কোনও পরামর্শ?


এটি সম্ভব যে এর সহজ সমাধান নেই? আইকনটির সাথে আমি কি 9 প্যাচ বোতামের আইএমজি দিয়ে চেষ্টা করতে পারি?
1010

এটি একটি সমাধান হতে পারে। বোতামের পাঠ্যটি কি স্থানীয়ীকৃত বা স্থির হতে চলেছে?
অক্টাভিয়ান এ ডামিয়ান

এটি স্থানীয়করণ এর জন্য আর কোন সমাধান নেই? আমি এটি 9 প্যাচ দিয়ে পরিচালনা করতে পেরেছি তবে লোকেল পরিবর্তন করার সময় সমস্যা হচ্ছে।
jloriente

অঙ্কনীয় শীর্ষের সাথে একটি বোতাম ব্যবহার করা এবং এতে কিছু প্যাডিং যুক্ত করা যায়?
ফ্রান্সেসকো

খারাপ কাঠামো ডিজাইন
মুহাম্মদ বাবর

উত্তর:


75

অ্যান্ড্রয়েড: অঙ্কনযোগ্য লেফট সর্বদা অ্যান্ড্রয়েড রাখে: বাম সীমানা থেকে একটি দূরত্ব হিসাবে প্যাডিংফিট। বোতামটি যখন অ্যান্ড্রয়েডে সেট করা হয় না: প্রস্থ = "র‌্যাপ_কন্টেন্ট", এটি সর্বদা বামে ঝুলবে!

অ্যান্ড্রয়েড 4.0.০ (এপিআই স্তর ১৪) এর মাধ্যমে আপনি অ্যান্ড্রয়েড ব্যবহার করতে পারেন : পাঠ্যের শুরুতে একটি অঙ্কনীয় স্থান রাখতে অঙ্কনযোগ্য স্টার্ট বৈশিষ্ট্য। আমি যে একমাত্র পশ্চাৎপদ সামঞ্জস্যপূর্ণ সমাধান নিয়ে এসেছি তা হল একটি টেক্সট + চিত্র স্প্যানিয়েবল তৈরি করতে একটি চিত্রস্প্যান ব্যবহার করা :

Button button = (Button) findViewById(R.id.button);
Spannable buttonLabel = new SpannableString(" Button Text");
buttonLabel.setSpan(new ImageSpan(getApplicationContext(), R.drawable.icon,      
    ImageSpan.ALIGN_BOTTOM), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
button.setText(buttonLabel);

আমার ক্ষেত্রে আমাকে এন্ড্রয়েড: অভিকর্ষিক বৈশিষ্ট্যটি বোতামটির কেন্দ্রিক দেখানোর জন্য সামঞ্জস্য করতে হবে:

<Button
  android:id="@+id/button"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:minHeight="32dp"
  android:minWidth="150dp"
  android:gravity="center_horizontal|top" />

খুশী হলাম। শেষ লাইনটি হওয়া উচিতbutton.setText(buttonLabel)
AlexD

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

1
আমি বিভ্রান্ত হয়ে পড়েছি যে এটি কারওর জন্য কীভাবে কাজ করেছে, আমার জন্য এটি 2 আইকন আঁকছে ... একদিকের বাঁদিকে, এবং একটি সরাসরি কেন্দ্রে যা পাঠ্যের শীর্ষে প্রদর্শিত হবে।
জাস্টিন

11
অঙ্কনযোগ্য স্টার্ট কাজ করবে না। এই থ্রেডটি দেখুন: stackoverflow.com/questions/15350990/… এছাড়াও, মনে হয় আপনি যখন একটি স্প্যানিয়েবল ব্যবহার করে পাঠ্য সেট করেন, তখন শৈলী উপেক্ষা করা হয়।
Dapp

11
অঙ্কনযোগ্য স্টার্ট কাজ করে না, এবং এটি আরটিএল সমর্থন করতে এপিআই স্তরের 17 এ যুক্ত হয়েছিল
সিলভিয়া এইচ

35

আমি জানি আমি এই প্রশ্নের উত্তর দিতে দেরি করেছি, তবে এটি আমাকে সহায়তা করেছে:

<FrameLayout
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="10dp"
            android:background="@color/fb" >

            <Button
                android:id="@+id/fbLogin"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:background="@null"
                android:drawableLeft="@drawable/ic_facebook"
                android:gravity="center"
                android:minHeight="0dp"
                android:minWidth="0dp"
                android:text="FACEBOOK"
                android:textColor="@android:color/white" />
        </FrameLayout>

আমি এই সমাধানটি এখান থেকে পেয়েছি: অ্যান্ড্রয়েড ইউআই সংগ্রাম: কেন্দ্রিক পাঠ্য এবং আইকন সহ একটি বোতাম তৈরি করে

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


6
এটির সাথে সমস্যাটি হ'ল বোতামটি ফ্রেম বিন্যাসের প্রস্থ নয়।
ক্লাইভ জেফারিজ

29

আমি বোতামের পরিবর্তে লিনিয়ারলআউট ব্যবহার করেছি । OnClickListener , যা আমি ব্যবহার করতে হবে LinearLayout জন্যও কাজ করে জরিমানা।

<LinearLayout
    android:id="@+id/my_button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/selector"
    android:gravity="center"
    android:orientation="horizontal"
    android:clickable="true">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="15dp"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:src="@drawable/icon" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Text" />

</LinearLayout>

28

পূর্ববর্তী সমস্ত উত্তর পুরানো বলে মনে হচ্ছে

আপনি MaterialButtonএখন ব্যবহার করতে পারেন যা আইকন মাধ্যাকর্ষণ সেট করতে দেয়।

 <com.google.android.material.button.MaterialButton
        android:id="@+id/btnDownloadPdf"
        android:layout_width="0dp"
        android:layout_height="56dp"
        android:layout_margin="16dp"
        android:gravity="center"
        android:textAllCaps="true"
        app:backgroundTint="#fc0"
        app:icon="@drawable/ic_pdf"
        app:iconGravity="textStart"
        app:iconPadding="10dp"
        app:iconTint="#f00"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        tools:text="Download Pdf" />

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

উপাদান উপাদান ব্যবহার করার জন্য আপনার স্পষ্টতই প্রয়োজন হবে:

নির্ভরতা যুক্ত করুন implementation 'com.google.android.material:material:1.3.0-alpha01'(সর্বশেষ সংস্করণ ব্যবহার করুন)

আপনার থিমটি উপাদান উপাদান থিম প্রসারিত করুন

<style name="AppTheme" parent="Theme.MaterialComponents.Light">
...
</style>

আপনি যদি এটি না করতে পারেন তবে মেট্রিকাল ব্রিজ থিম থেকে এটি প্রসারিত করুন

<style name="AppTheme" parent="Theme.MaterialComponents.Light.Bridge">
...
</style>

ধন্যবাদ! তুমি আমার দিন বাঁচিয়েছ! সূক্ষ্মভাবে কাজ করে
কালো_জের্গ

9

আমি নীচে বাম এবং ডান প্যাড যোগ করে এটি সমন্বয়:

<Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/btn_facebookact_like"
            android:text="@string/btn_facebookact_like"
            android:textColor="@color/black"
            android:textAllCaps="false"
            android:background="@color/white"
            android:drawableStart="@drawable/like"
            android:drawableLeft="@drawable/like"
            android:gravity="center"
            android:layout_gravity="center"
            android:paddingLeft="40dp"
            android:paddingRight="40dp"
            />

প্যাডিংফিট এবং প্যাডিং রাইটটিই আমাকে আমার কেন্দ্রিককরণে সহায়তা করেছিল। সহজ সমাধান জন্য upvoting।
এরি

2
আপনার প্রস্থটি গতিশীল হওয়ার বিষয়টি আপনি কীভাবে পরিচালনা করবেন? আপনি যদি আপনার স্ক্রিনটি ঘোরান, আপনার সমস্ত আইকন সঠিকভাবে কেন্দ্রীভূত হবে না? আমি আসলে এই সমস্যার মুখোমুখি হয়েছি
জ্যাকস

এটি সেরা উত্তর!
ডডি রছমত উইকাকসনো

8

আমি সম্প্রতি একই সমস্যায় পড়েছি। একটি সস্তা সমাধান অনুসন্ধান করার চেষ্টা করেছি তাই এটি নিয়ে এসেছিল।

   <LinearLayout
        android:id="@+id/linearButton"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/selector_button_translucent_ab_color"
        android:clickable="true"
        android:descendantFocusability="blocksDescendants"
        android:gravity="center"
        android:orientation="horizontal" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/app_name"
            android:src="@drawable/ic_launcher" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name"
            android:textColor="@android:color/white" />
    </LinearLayout>

তারপরে শুধু কল OnClickListenerকরুন LinearLayout

আশা করি এটি কাউকে যেমন খুব সাধারণ সমস্যার মতো মনে হয় তেমন সহায়তা করে। :)


1
এটি একটি ভাল ধারণা, তবে একটি খারাপ সমাধান। আপনি অঙ্কনযোগ্য লেফট-বৈশিষ্ট্যটি ব্যবহার করে কেবল একটি টেক্সটভিউ দিয়ে একই জিনিস অর্জন করতে পারেন। এটি আপনাকে পাঠ্যের বাম দিকে আঁকতে সক্ষম দেখতে সক্ষম করে।
মুটিজেনফ্লো

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

আহ দুঃখিত .. আমি এখানে এসেছি ঠিক এই সমস্যার জন্য এবং অনেক কিছুই চেষ্টা করার পরে মনোযোগ হারিয়েছি :) অনুমান করুন আমি গাছের জন্য বন দেখিনি। আমার ভুল!
muetzenflo

7

আপনি একটি কাস্টম বোতাম ব্যবহার করতে পারেন যা বাম অঙ্কনযোগ্যকে সাব্যস্ত করতে নিজেকে মাপায় এবং আঁকবে। এখানে উদাহরণ এবং ব্যবহার সন্ধান করুন

public class DrawableAlignedButton extends Button {

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

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

public DrawableAlignedButton(Context context, AttributeSet attrs, int style) {
    super(context, attrs, style);
}

private Drawable mLeftDrawable;

@Override
    //Overriden to work only with a left drawable.
public void setCompoundDrawablesWithIntrinsicBounds(Drawable left,
        Drawable top, Drawable right, Drawable bottom) {
    if(left == null) return;
    left.setBounds(0, 0, left.getIntrinsicWidth(), left.getIntrinsicHeight());
    mLeftDrawable = left;
}

@Override
protected void onDraw(Canvas canvas) {
    //transform the canvas so we can draw both image and text at center.
    canvas.save();
    canvas.translate(2+mLeftDrawable.getIntrinsicWidth()/2, 0);
    super.onDraw(canvas);
    canvas.restore();
    canvas.save();
    int widthOfText = (int)getPaint().measureText(getText().toString());
    int left = (getWidth()+widthOfText)/2 - mLeftDrawable.getIntrinsicWidth() - 2;
    canvas.translate(left, (getHeight()-mLeftDrawable.getIntrinsicHeight())/2);
    mLeftDrawable.draw(canvas);
    canvas.restore();
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int height = getMeasuredHeight();
    height = Math.max(height, mLeftDrawable.getIntrinsicHeight() + getPaddingTop() + getPaddingBottom());
    setMeasuredDimension(getMeasuredWidth(), height);
}
}

ব্যবহার

<com.mypackage.DrawableAlignedButton
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:drawableLeft="@drawable/my_drawable"
        android:gravity="center"
        android:padding="7dp"
        android:text="My Text" />

আপনি নিজের উত্তরে কোডটি অন্তর্ভুক্ত করতে পারেন যা পছন্দসই উপায় হতে হবে (যদি এটি খুব দীর্ঘ না হয়), কারণ লিঙ্কগুলি সময়ের সাথে সাথে মারা যেতে পারে
লুকাশ নুথ

2
খুব নির্ভুল নয় তবে আমি এটি নিচ্ছি
অ্যালেক্স সেমেনিয়ুক

এটি একটি পাঠ্যকে ডানদিকে সরিয়ে দেয়, তবে পর্যাপ্ত নয় (কোনও চিত্র পাঠ্যের উপরে ওভারল্যাপ করে)। এছাড়াও, অন্যান্য কাস্টম ভিউয়ের সমাধান হিসাবে, এটি দীর্ঘ পাঠ্যকে সঠিকভাবে গ্রহণ করে না।
কুলমাইন্ড

5

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

<FrameLayout
    android:id="@+id/login_button_login"
    android:background="@drawable/apptheme_btn_default_holo_dark"
    android:layout_width="fill_parent"
    android:layout_gravity="center"
    android:layout_height="40dp">
    <Button
        android:clickable="false"
        android:drawablePadding="15dp"
        android:layout_gravity="center"
        style="@style/WhiteText.Small.Bold"
        android:drawableLeft="@drawable/lock"
        android:background="@color/transparent"
        android:text="LOGIN" />
</FrameLayout>

1
এখন আমি দেখতে পাচ্ছি যে আমি এই সমাধানটির সাথে একা ছিলাম না :)
রেনেটিক

4

আমি জানি এই প্রশ্নটি কিছুটা পুরনো, তবে সম্ভবত আপনি এখনও ইঙ্গিত বা কাজের জন্য উন্মুক্ত:

ব্যাকগ্রাউন্ড বা বোতাম নিজেই বিন্যাসের প্রথম উপাদান হিসাবে বোতামের চিত্রের সাথে একটি সম্পর্কিত রিলেটিভ লেআউট "র‌্যাপ_কন্টেন্ট" তৈরি করুন। একটি লিনিয়ারলআউট পান এবং এটি "লেআউট_সেন্টিআইটার্নেন্ট" এবং "মোড়ানো_ কনটেন্ট" এ সেট করুন। তারপরে আপনার ছবিটি চিত্রকল্প হিসাবে সেট করুন। শেষ পর্যন্ত আপনার পাঠ্য (স্থানীয়) সহ একটি পাঠ্যদর্শন সেট করুন।

সুতরাং মূলত আপনার এই কাঠামোটি রয়েছে:

RelativeLayout
  Button
    LinearLayout
      ImageView
      TextView

বা এই মত:

RelativeLayout with "android-specific" button image as background
  LinearLayout
    ImageView
    TextView

আমি জানি এই সমাধানের সাথে মোকাবিলা করার জন্য অনেকগুলি উপাদান রয়েছে তবে আপনি এটির সাহায্যে খুব সহজেই আপনার নিজস্ব কাস্টম বোতামটি তৈরি করতে পারেন এবং পাঠ্য এবং অঙ্কনযোগ্যগুলির সঠিক অবস্থানও নির্ধারণ করতে পারেন :)


এই পদ্ধতির ভাল কাজ করতে পারে। আমার ক্ষেত্রে, আমার যা দরকার তা হ'ল একটি পাঠ্যদর্শনযুক্ত রিলেটিভলয়েট। রিলেটিভলয়েট ব্যাকগ্রাউন্ড পেয়েছে, টেক্সটভিউটি চিত্রনামূলক লেফট আইকনটি পেয়েছে। তারপরে কোডটিতে: রিলেটিভলআউটে ক্লিক করুন ক্লিক ক্লিক করুন এবং প্রয়োজনে আলাদাভাবে টেক্সটভিউয়ের জন্য ভিউবিআইআইডি অনুসন্ধান করুন
স্ট্যান কুর্দিজিয়াল

প্রথমে প্রস্তাবিত কাঠামোটি "বাটন ভিউগ্রুপে কাস্ট করা যায় না" ব্যতিক্রম।
ইয়ংজায়ে

4

এটি সমাধানের আমার <View ../>উপায়টি হালকা ওজনের উপাদানগুলির সাথে বোতামটির চারপাশে জড়িত যা গতিশীল আকার পরিবর্তন করে। এর মাধ্যমে কী অর্জন করা যায় তার কয়েকটি উদাহরণ নীচে:

ডেভ-আইএল দ্বারা ডেমো

নোট করুন যে উদাহরণস্বরূপ 3 বোতামগুলির ক্লিকযোগ্য ক্ষেত্রটি 2-এর সমান (অর্থাত্ স্পেস সহ), উদাহরণস্বরূপ 4 এর চেয়ে আলাদা যেখানে যেখানে কোনও "অবিচ্ছেদ্য" ফাঁক নেই।

কোড:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:text="Example 1: Button with a background color:"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="20dp"
            android:paddingEnd="20dp"
            android:layout_weight="0.3"/>
        <!-- Play around with the above 3 values to modify the clickable 
             area and image alignment with respect to text -->
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
    </LinearLayout>

    <TextView
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:text="Example 2: Button group + transparent layout + spacers:"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:layout_weight="1"/>
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:layout_weight="1"/>
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:layout_weight="1"/>
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
    </LinearLayout>

    <TextView
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:text="Example 3: Button group + colored layout:"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/darker_gray">
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <Button
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:layout_weight="1"/>
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <Button
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:layout_weight="1"/>
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <Button
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:layout_weight="1"/>
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
    </LinearLayout>

    <TextView
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:text="Example 4 (reference): Button group + no spacers:"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/darker_gray">
        <Button
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:layout_weight="1"/>
        <Button
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:layout_weight="1"/>
        <Button
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textColor="@android:color/white"
            android:drawableLeft="@android:drawable/ic_secure"
            android:drawableStart="@android:drawable/ic_secure"
            android:background="@android:color/darker_gray"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:layout_weight="1"/>   
    </LinearLayout>
</LinearLayout>


2

আপনি একটি কাস্টম উইজেট তৈরি করতে পারেন:

জাভা ক্লাস আইবুটন:

public class IButton extends RelativeLayout {

private RelativeLayout layout;
private ImageView image;
private TextView text;

public IButton(Context context) {
    this(context, null);
}

public IButton(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public IButton(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.ibutton, this, true);

    layout = (RelativeLayout) view.findViewById(R.id.btn_layout);

    image = (ImageView) view.findViewById(R.id.btn_icon);
    text = (TextView) view.findViewById(R.id.btn_text);

    if (attrs != null) {
        TypedArray attributes = context.obtainStyledAttributes(attrs,R.styleable.IButtonStyle);

        Drawable drawable = attributes.getDrawable(R.styleable.IButtonStyle_button_icon);
        if(drawable != null) {
            image.setImageDrawable(drawable);
        }

        String str = attributes.getString(R.styleable.IButtonStyle_button_text);
        text.setText(str);

        attributes.recycle();
    }

}

@Override
public void setOnClickListener(final OnClickListener l) {
    super.setOnClickListener(l);
    layout.setOnClickListener(l);
}

public void setDrawable(int resId) {
    image.setImageResource(resId);
}

}

বিন্যাস আইবুটন.এক্সএমএল

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/btn_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" >

<ImageView
    android:id="@+id/btn_icon"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_marginRight="2dp"
    android:layout_toLeftOf="@+id/btn_text"
    android:duplicateParentState="true" />

<TextView
    android:id="@+id/btn_text"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_centerInParent="true"
    android:duplicateParentState="true"
    android:gravity="center_vertical"
    android:textColor="#000000" />
</RelativeLayout>

এই কাস্টম উইজেট ব্যবহার করার জন্য:

<com.test.android.widgets.IButton
     android:id="@+id/new"
     android:layout_width="fill_parent"         
     android:layout_height="@dimen/button_height"
     ibutton:button_text="@string/btn_new"
     ibutton:button_icon="@drawable/ic_action_new" />

আপনাকে কাস্টম বৈশিষ্ট্যগুলির জন্য নেমস্পেস সরবরাহ করতে হবে xmlns: ibutton = "http://schemas.android.com/apk/res/com.test.android.xxx" যেখানে com.test.android.xxx এর মূল প্যাকেজ is দরখাস্ত.

এটি কেবল xMLns এর নীচে রাখুন: android = "http://schemas.android.com/apk/res/android"।

আপনার শেষ যে জিনিসটি দরকার তা হ'ল অ্যাটর্স.এক্সএমএল এর কাস্টম বৈশিষ্ট্য।

Attrs.xML এ

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="IButtonStyle">
        <attr name="button_text" />
        <attr name="button_icon" format="integer" />
    </declare-styleable>

    <attr name="button_text" />

</resources>

আরও ভাল অবস্থানের জন্য, আপনি যদি রিলেটিভলআউট পজিশনিংগুলির সাথে সম্ভাব্য সমস্যাগুলি এড়াতে চান তবে কাস্টম বোতামটি একটি লিনিয়ারলআউটের অভ্যন্তরে মুড়িয়ে দিন।

উপভোগ করুন!


2

অনুরূপ সমস্যা ছিল তবে কোনও পাঠ্য এবং কোনও মোড়ানো বিন্যাস ছাড়াই কেন্দ্র অঙ্কনযোগ্য থাকতে চেয়েছিল। সমাধানটি ছিল কাস্টম বোতাম তৈরি করা এবং বাম, রাইট, শীর্ষ, বটম ছাড়াও আরও একটি অঙ্কনযোগ্য add একটি সহজেই অঙ্কনযোগ্য স্থান পরিবর্তন করতে পারে এবং পাঠ্যের সাথে তুলনামূলকভাবে এটি পছন্দসই অবস্থানে থাকতে পারে।

CenterDrawableButton.java

public class CenterDrawableButton extends Button {
    private Drawable mDrawableCenter;

    public CenterDrawableButton(Context context) {
        super(context);
        init(context, null);
    }

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

    public CenterDrawableButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public CenterDrawableButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context, attrs);
    }


    private void init(Context context, AttributeSet attrs){
        //if (isInEditMode()) return;
        if(attrs!=null){
            TypedArray a = context.getTheme().obtainStyledAttributes(
                    attrs, R.styleable.CenterDrawableButton, 0, 0);

            try {
                setCenterDrawable(a.getDrawable(R.styleable.CenterDrawableButton_drawableCenter));

            } finally {
                a.recycle();
            }

        }
    }

    public void setCenterDrawable(int center) {
        if(center==0){
            setCenterDrawable(null);
        }else
        setCenterDrawable(getContext().getResources().getDrawable(center));
    }
    public void setCenterDrawable(@Nullable Drawable center) {
        int[] state;
        state = getDrawableState();
        if (center != null) {
            center.setState(state);
            center.setBounds(0, 0, center.getIntrinsicWidth(), center.getIntrinsicHeight());
            center.setCallback(this);
        }
        mDrawableCenter = center;
        invalidate();
        requestLayout();
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        if(mDrawableCenter!=null) {
            setMeasuredDimension(Math.max(getMeasuredWidth(), mDrawableCenter.getIntrinsicWidth()),
                    Math.max(getMeasuredHeight(), mDrawableCenter.getIntrinsicHeight()));
        }
    }
    @Override
    protected void drawableStateChanged() {
        super.drawableStateChanged();
        if (mDrawableCenter != null) {
            int[] state = getDrawableState();
            mDrawableCenter.setState(state);
            mDrawableCenter.setBounds(0, 0, mDrawableCenter.getIntrinsicWidth(),
                    mDrawableCenter.getIntrinsicHeight());
        }
        invalidate();
    }

    @Override
    protected void onDraw(@NonNull Canvas canvas) {
        super.onDraw(canvas);

        if (mDrawableCenter != null) {
            Rect rect = mDrawableCenter.getBounds();
            canvas.save();
            canvas.translate(getWidth() / 2 - rect.right / 2, getHeight() / 2 - rect.bottom / 2);
            mDrawableCenter.draw(canvas);
            canvas.restore();
        }
    }
}

attrs.xml

<resources>
    <attr name="drawableCenter" format="reference"/>
    <declare-styleable name="CenterDrawableButton">
        <attr name="drawableCenter"/>
    </declare-styleable>
</resources>

ব্যবহার

<com.virtoos.android.view.custom.CenterDrawableButton
            android:id="@id/centerDrawableButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:drawableCenter="@android:drawable/ic_menu_info_details"/>

ধন্যবাদ! এটাই আমি খুঁজছিলাম।
মিস্তাগ্রাইন

আপনি কি দয়া করে এই প্রশ্নে আমাকে সহায়তা করবেন, stackoverflow.com/questions/35912539/… , আপনার উত্তর দিয়ে আমি এটির খুব কাছাকাছি তবে দু'টি
ড্রয়িং

এই সমাধানটি একটি কেন্দ্রের পাঠ্যের ঠিক উপরে, একটি বোতামের মাঝখানে আঁকতে সক্ষম করে।
কুলমাইন্ড

1
<style name="captionOnly">
    <item name="android:background">@null</item>
    <item name="android:clickable">false</item>
    <item name="android:focusable">false</item>
    <item name="android:minHeight">0dp</item>
    <item name="android:minWidth">0dp</item>
</style>

<FrameLayout
   style="?android:attr/buttonStyle"
   android:layout_width="match_parent"
   android:layout_height="wrap_content" >

    <Button
       style="@style/captionOnly"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
       android:drawableLeft="@android:drawable/ic_delete"
       android:gravity="center"
       android:text="Button Challenge" />
</FrameLayout>

লিনিয়ারলআউটে ফ্রেমআলআউট রাখুন এবং অনুভূমিকের দিকে ওরিয়েন্টেশন সেট করুন।


1

আপনি বোতামটি একটি লিনিয়ারলআউটের উপরে রাখতে পারেন

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/activity_login_fb_height"
        android:background="@mipmap/bg_btn_fb">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/lblLoginFb"
                android:textColor="@color/white"
                android:drawableLeft="@mipmap/icon_fb"
                android:textSize="@dimen/activity_login_fb_textSize"
                android:text="Login with Facebook"
                android:gravity="center" />
        </LinearLayout>
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/btnLoginFb"
            android:background="@color/transparent"
            />
    </RelativeLayout>

0

যদি আপনি অ্যান্ড্রয়েড চেষ্টা করেন তবে কি হবে: মাধ্যাকর্ষণ = "কেন্দ্র_হরিজন্টাল"?


5
এটি কাজ করে না। পাঠ্যটি কিছুটা কেন্দ্রিক তবে অঙ্কনযোগ্য লেফটটি বাম দিকে আটকে থাকে।
পিটার আজটাই

0

আমি মনে করি অ্যান্ড্রয়েড: মাধ্যাকর্ষণ = "কেন্দ্র" কাজ করা উচিত


6
আমার জন্য কাজ করে না। এটি পাঠ্যটিকে কেন্দ্র করে, তবে অঙ্কনযোগ্য বামটি খুব বাম দিকে থাকে।
পিটার আজটাই

আপনাকে একই অভিভাবকের অধীনে আইকন এবং পাঠ্য ঘোষণা করতে হবে, অ্যান্ড্রয়েড ব্যবহার করুন: পিতামাতার জন্য মাধ্যাকর্ষণ = "কেন্দ্র"
devanshu_kaushik

0

রডজার পরামর্শ অনুসারে, ৪.০ এর আগে অঙ্কনযোগ্যদের সাথে পাঠ্যকে কেন্দ্র করার সরাসরি উপায় নেই। এবং প্রকৃতপক্ষে একটি প্যাডিং_ বাম মান নির্ধারণ করা অঙ্কনযোগ্যকে সীমানা থেকে দূরে সরিয়ে দেয়। সুতরাং আমার পরামর্শ হ'ল রানটাইমের সময় আপনি বাম সীমানা থেকে আপনার অঙ্কনযোগ্য হতে হবে ঠিক কত পিক্সেল গণনা করুন এবং তারপরে সেটপ্যাডিং ব্যবহার করে এটি পাস করুন আপনার গণনা এমন কিছু হতে পারে

int paddingLeft = (button.getWidth() - drawableWidth - textWidth) / 2;

আপনার অঙ্কনযোগ্যগুলির প্রস্থ স্থির করা হয়েছে এবং আপনি এটি সন্ধান করতে পারেন এবং আপনি পাঠ্যের প্রস্থও গণনা বা অনুমান করতে পারেন।

অবশেষে, আপনাকে পর্দার ঘনত্ব দ্বারা প্যাডিংয়ের মান একাধিক করতে হবে, যা আপনি ডিসপ্লেমেট্রিক্স ব্যবহার করে করতে পারেন


0

আমি এটি পরীক্ষা করি না তবে মনে হচ্ছে আপনি সেন্টারকন্টেন্টবটন লাইব্রেরি ব্যবহার করতে পারেন


0

পাবলিক বর্গ DrawableCenterTextView পাঠ্যদর্শন প্রসারিত {

public DrawableCenterTextView(Context context, AttributeSet attrs,
        int defStyle) {
    super(context, attrs, defStyle);
}

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

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

@Override
protected void onDraw(Canvas canvas) {
    Drawable[] drawables = getCompoundDrawables();
    if (drawables != null) {
        Drawable drawableLeft = drawables[0];
        Drawable drawableRight = drawables[2];
        if (drawableLeft != null || drawableRight != null) {
            float textWidth = getPaint().measureText(getText().toString());
            int drawablePadding = getCompoundDrawablePadding();
            int drawableWidth = 0;
            if (drawableLeft != null)
                drawableWidth = drawableLeft.getIntrinsicWidth();
            else if (drawableRight != null) {
                drawableWidth = drawableRight.getIntrinsicWidth();
            }
            float bodyWidth = textWidth + drawableWidth + drawablePadding;
            canvas.translate((getWidth() - bodyWidth) / 2, 0);
        }
    }
    super.onDraw(canvas);
}

}


এটি আমার পক্ষে মোটেও কার্যকর হয়নি। আপনি একটি উদাহরণ দেখাতে পারেন? সম্ভবত আমি এটি সঠিকভাবে ব্যবহার করি না
অ্যান্ড্রয়েড বিকাশকারী

0

নোংরা ফিক্স।

android:paddingTop="10dp"
android:drawableTop="@drawable/ic_src"

ডান প্যাডিং অঙ্কিত উদ্দেশ্য সমাধান করুন। যাইহোক, বিভিন্ন স্ক্রিনের জন্য, বিভিন্ন প্যাডিং ব্যবহার করুন এবং এটিকে সংশ্লিষ্ট মান ফোল্ডারে ডাইমেনস উত্সে রাখুন।


0

ব্যবহারের RelativeLayout (ধারক) এবং অ্যান্ড্রয়েড layout_centerHorizontal = "সত্য" , আমার নমুনা:

                <RelativeLayout
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1" >

                    <CheckBox
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:layout_centerHorizontal="true"
                        android:layout_gravity="center"
                        android:layout_marginBottom="5dp"
                        android:layout_marginLeft="10dp"
                        android:layout_marginTop="5dp"
                        android:button="@drawable/bg_fav_detail"
                        android:drawablePadding="5dp"
                        android:text=" Favorite" />
                </RelativeLayout>

0

বাটন থিম রাখার অন্যান্য সম্ভাবনা।

<Button
            android:id="@+id/pf_bt_edit"
            android:layout_height="@dimen/standard_height"
            android:layout_width="match_parent"
            />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_alignBottom="@id/pf_bt_edit"
            android:layout_alignLeft="@id/pf_bt_edit"
            android:layout_alignRight="@id/pf_bt_edit"
            android:layout_alignTop="@id/pf_bt_edit"
            android:layout_margin="@dimen/margin_10"
            android:clickable="false"
            android:elevation="20dp"
            android:gravity="center"
            android:orientation="horizontal"
            >

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:adjustViewBounds="true"
                android:clickable="false"
                android:src="@drawable/ic_edit_white_48dp"/>

            <TextView
                android:id="@+id/pf_tv_edit"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginLeft="@dimen/margin_5"
                android:clickable="false"
                android:gravity="center"
                android:text="@string/pf_bt_edit"/>

        </LinearLayout>

এই সমাধানের সাহায্যে যদি আপনার ক্রিয়াকলাপের থিমটিতে আপনার রঙ / আপনার_ রঙ @ রঙ / আপনার_উত্তর_লাভ যুক্ত হয় তবে আপনি ললিপপ উইথ শেডো এবং রিপলটিতে ম্যাথেরিয়াল থিম রাখতে পারেন এবং যখন আপনি টিপবেন তখন আপনার রঙ এবং হাইলাইট কোর সহ আগের সংস্করণ ফ্ল্যাট বোতামের জন্য থাকতে পারেন।

তদুপরি, এই সমাধানটি ছবির অটোরসাইজ সহ

ফলাফল: প্রথমে ললিপপ ডিভাইসে দ্বিতীয়: দ্বিতীয় ললিপপ ডিভাইসে 3 তম: প্রাক ললিপপ ডিভাইস টিপুন বোতাম

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


0

আমি textViewআইকনটি ব্যবহার করে paddingLeftএবং টেক্সটভিউটি বাম | সেন্টার ভার্টিকালকে সারিবদ্ধ করে কেন্দ্র করে রেখেছি । এবং আমি ব্যবহৃত আইকন এবং আইকনের মধ্যে একটি সামান্য ব্যবধানের জন্যdrawablePadding

         <Button
            android:id="@+id/have_it_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/textbox"
            android:drawableLeft="@drawable/have_it"
            android:drawablePadding="30dp"
            android:gravity="left|center_vertical"
            android:paddingLeft="60dp"
            android:text="Owner Contact"
            android:textColor="@android:color/white" />

2
এটি কেবলমাত্র এক স্ক্রিনে কাজ করবে না, যার জন্য android:paddingLeftকাজ করেছে।
সোশিয়াল

0

এটি পুরানো / বদ্ধ থ্রেড হতে পারে তবে আমি নিজের সমাধান তৈরি করার সিদ্ধান্ত না নেওয়া পর্যন্ত আমি সর্বত্র অনুসন্ধান করেছিলাম useful যদি উত্তরটির সন্ধানের জন্য এখানে কেউ চেষ্টা করেন তবে এটিকে চেষ্টা করে দেখুন, আপনাকে এক মিনিটের চিন্তাভাবনা বাঁচাতে পারে

          <LinearLayout
            android:id="@+id/llContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/selector"
            android:clickable="true"
            android:gravity="center"
            android:orientation="vertical"
            android:padding="10dp"
            android:textStyle="bold">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="This is a text" />

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/icon_image />


        </LinearLayout>

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

নোটটি নিন অ্যান্ড্রয়েড যুক্ত করতে ভুলবেন না : ক্রিয়াটি সম্পাদনের জন্য আপনার মূল পাত্রে (আপেক্ষিক বা লিনিয়ার) ক্লিকযোগ্য = "সত্য"

আবার এটি পুরানো থ্রেড হতে পারে তবে এখনও কাউকে সেখানে সহায়তা করতে পারে।

চিয়ার্স আশা করি এটি সাহায্য করে - হ্যাপি কোডিং।


0

আপনি যদি কাস্টম ভিউয়ের সমাধানগুলির মধ্যে একটি ব্যবহার করেন তবে সাবধান হন, কারণ তারা প্রায়শই দীর্ঘ বা মাল্টলাইন পাঠ্যে ব্যর্থ হয় । আমি কিছু উত্তর নতুন করে লিখেছি, প্রতিস্থাপন করেছি onDraw()এবং বুঝতে পেরেছি যে এটি একটি ভুল উপায়।


0

আমি শুরু / বামে অঙ্কনীয় অ্যালাইন করার জন্য সমাধানগুলি দেখেছি তবে অঙ্কনীয় শেষ / ডান জন্য কিছুই নেই, তাই আমি এই সমাধানটি নিয়ে এসেছি। এটি বাম এবং ডানদিকে উভয় দিকে অঙ্কনযোগ্য এবং পাঠ্য সারিবদ্ধ করার জন্য গতিশীলভাবে গণনা করা প্যাডিংস ব্যবহার করে।

class IconButton @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyle: Int = R.attr.buttonStyle
) : AppCompatButton(context, attrs, defStyle) {

    init {
        maxLines = 1
    }

    override fun onDraw(canvas: Canvas) {
        val buttonContentWidth = (width - paddingLeft - paddingRight).toFloat()

        val textWidth = paint.measureText(text.toString())

        val drawable = compoundDrawables[0] ?: compoundDrawables[2]
        val drawableWidth = drawable?.intrinsicWidth ?: 0
        val drawablePadding = if (textWidth > 0 && drawable != null) compoundDrawablePadding else 0
        val bodyWidth = textWidth + drawableWidth.toFloat() + drawablePadding.toFloat()

        canvas.save()

        val padding = (buttonContentWidth - bodyWidth).toInt() / 2
        val leftOrRight = if (compoundDrawables[0] != null) 1 else -1
        setPadding(leftOrRight * padding, 0, -leftOrRight * padding, 0)

        super.onDraw(canvas)
        canvas.restore()
    }
}

আপনি আইকনটি কোথায় সেট করেন তার উপর নির্ভর করে আপনার বিন্যাসে মাধ্যাকর্ষণটি "সেন্টার_ভার্টিকাল | শুরু" বা "কেন্দ্রে_আরক্ষীয় | শেষ" এ সেট করা গুরুত্বপূর্ণ either উদাহরণ স্বরূপ:

<com.stackoverflow.util.IconButton
        android:id="@+id/cancel_btn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:drawableStart="@drawable/cancel"
        android:drawablePadding="@dimen/padding_small"
        android:gravity="center_vertical|start"
        android:text="Cancel" />

এই প্রয়োগের ক্ষেত্রে কেবল সমস্যাটি হ'ল বাটনটিতে কেবলমাত্র একক পাঠ্য পাঠ্য থাকতে পারে, অন্যথায় পাঠ্যের ক্ষেত্রটি বোতামটি পূরণ করে এবং প্যাডিংগুলি 0 হবে।


-5

এটা ব্যবহার কর android:background="@drawable/ic_play_arrow_black_24dp"

আপনি যে আইকনটিকে কেন্দ্র করতে চান তাতে কেবল ব্যাকগ্রাউন্ড সেট করুন

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