অ্যান্ড্রয়েড: এক্সএমএল ব্যবহার করে টগলবটনের জন্য দুটি পৃথক চিত্র উল্লেখ করুন


100

আমি ডিফল্টকে ওভাররাইড করার চেষ্টা করছি ToggleButton উপস্থিতি । এখানে এক্সএমএল যা সংজ্ঞা দেয় ToggleButton:

<ToggleButton android:id="@+id/FollowAndCenterButton"
        android:layout_width="30px"
        android:layout_height="30px"
        android:textOn="" android:textOff="" android:layout_alignParentLeft="true"
        android:layout_marginLeft="5px"
        android:layout_marginTop="5px" android:background="@drawable/locate_me"/>

এখন, আমাদের কাছে দুটি 30 x 30 আইকন রয়েছে যা আমরা ক্লিক / অ-ক্লিকের স্থিতির জন্য ব্যবহার করতে চাই। এখনই আমাদের কাছে কোড রয়েছে যা প্রোগ্রামের ভিত্তিতে রাষ্ট্রের উপর নির্ভর করে ব্যাকগ্রাউন্ড আইকনটি পরিবর্তন করে:

centeredOnLocation.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            if (centeredOnLocation.isChecked()) {
                centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me_on));
            } else {
                centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me));
            }
        }
});

অবশ্যই আমি এটি করার একটি আরও ভাল উপায় খুঁজছি। আমি ব্যাকগ্রাউন্ড চিত্রের জন্য একটি নির্বাচক তৈরি করার চেষ্টা করেছি, যা স্বয়ংক্রিয়ভাবে রাজ্যগুলির মধ্যে পরিবর্তন হবে:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:drawable="@drawable/locate_me" /> <!-- default -->
 <item android:state_checked="true"
       android:drawable="@drawable/locate_me_on" /> <!-- pressed -->
 <item android:state_checked="false"
       android:drawable="@drawable/locate_me" /> <!-- unchecked -->

কিন্তু এই কাজ করে না; পড়া ToggleButtonএপিআই ( http://developer.android.com/reference/android/widget/ToggleButton.html ) , দেখা যাচ্ছে যে একমাত্র উত্তরাধিকার সূত্রে প্রাপ্ত এক্সএমএল বৈশিষ্ট্যগুলি

    XML Attributes
Attribute Name  Related Method  Description
android:disabledAlpha       The alpha to apply to the indicator when disabled. 
android:textOff         The text for the button when it is not checked. 
android:textOn      The text for the button when it is checked. 

ক্লাস পদ্ধতি থাকা সত্ত্বেও অ্যান্ড্রয়েড: state_ চেক করা বৈশিষ্ট্য বলে মনে হয় না isChecked() এবং setChecked()

সুতরাং, এক্সএমএলে আমি যা চাই তা করার কোনও উপায় আছে, বা আমি আমার অগোছালো কাজের সাথে আটকে আছি?


মনে রাখবেন, যদি আপনি পাঠ্য ব্যবহার করছেন না, আমি এটা ব্যবহার করা ভালো হতে পারে মনে CompoundButton
টিম্ম্ম

1
অবজ্ঞা করুন; CompoundButtonবিমূর্ত!
টিএমএমএম

উত্তর:


159

আপনার কোড ঠিক আছে। যাইহোক, টগল বোতামটি আপনার নির্বাচকটির সাথে মেলে এমন প্রথম আইটেমটি প্রদর্শন করবে যাতে ডিফল্টটি শেষের দিকে আসে। আইটেমগুলি সমস্ত ব্যবহার করা হবে তা নিশ্চিত করতে নিম্নলিখিত পদ্ধতিতে ব্যবস্থা করুন:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_pressed="true" /> //currently pressed turning the toggle on
    <item android:state_pressed="true" /> //currently pressed turning the toggle off
    <item android:state_checked="true" /> //not pressed default checked state
    <item /> //default non-pressed non-checked
</selector>

3
এটি নিখুঁত জ্ঞান দেয়; আমি কখনোই নির্বাচক এবং স্যুইচ স্টেটমেন্টের মধ্যে সংযোগ করি নি।
I82Much

আপনি আমার দিনটি তৈরি করেছেন ... আমার বোতাম, চেকবক্স এবং তারপরে রেডিও বোতামটি দিয়ে চেষ্টা করা হয়েছে, শেষ পর্যন্ত এই পোস্টটি সহায়ক হয়েছিল। আপনাকে ভাইটালি পোলোনেটস্কি এবং আই 82 এর অনেক অনেক ধন্যবাদ
ডেভিড প্রুন

8
ডকুমেন্টেশন কোথাও বলেছে যে এটি শীর্ষ থেকে পড়ে, প্রথম অবস্থানে এসে থামছে যার শর্তগুলি সমস্ত পূরণ করেছে, সুতরাং যদি ডিফল্ট শীর্ষে থাকে তবে এটি কখনই আঁকতে পারে না।
ট্র্যাভিস

1
@ I82 অনেকগুলি switchঅর্ডার নির্বিশেষে সবসময় " ডানটিকে " নির্বাচন করবে, এটি এর মতো if-elseif-elseif-elseশর্তের সাথে দীর্ঘতর আচরণ করে state_x == true && state_y == false && state_z = true
TWiStErRob
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.