অ্যান্ড্রয়েড নির্বাচক এবং পাঠ্যের রঙ


183

আমি একটি সহজ চান TextViewউপায় আচরণ করে simple_list_item_1একটি ListViewকরে। এক্সএমএলটি এখানে:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" android:layout_width="fill_parent"
    android:gravity="center" android:focusable="true"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:background="@android:drawable/list_selector_background" />

পাঠ্য রঙ বাদ দিয়ে সবকিছুই কাজ করে যা (প্রত্যাশিতভাবে) ফোকাস অবস্থায় পরিবর্তিত হয় না। আমি কীভাবে এটিকে পরিবর্তন করব textAppearanceLargeInverse?


যদি কেউ এক্সএমএল ফাইলের সন্ধান করে, এটি এখানে: ডেভেলপার.অ্যান্ড্রয়েড
— রিসোর্সস

উত্তর:


401

একজন কাজ না করা পর্যন্ত আমি বেশ কয়েকটি পরীক্ষা করে এসেছি, সুতরাং: রেজোল্ট / রঙ / বাটন_ডार्ক_টেক্সট.এক্সএমএল

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:color="#000000" /> <!-- pressed -->
     <item android:state_focused="true"
           android:color="#000000" /> <!-- focused -->
     <item android:color="#FFFFFF" /> <!-- default -->
 </selector>

মাঝামাঝি / লেআউট / view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
    <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="EXIT"
       android:textColor="@color/button_dark_text" />
</LinearLayout>

8
অ্যান্ড্রয়েড ছাড়াই: এই নির্বাচক এক্সএমএল-এর সাথে অ্যাপটি ক্র্যাশ করতে সক্ষম করে
— তোলে

4
@ নতুন ভবিষ্যত: আপনার প্রয়োজনandroid:textColor="@color/button_dark_text"
— পল

3
রঙের রাজ্যের তালিকাগুলি বর্ণনা করে এমন একটি নথি রয়েছে: বিকাশকারী
— অ্যান্ড্রয়েড

কৌতূহল হিসাবে, এটি পাঠ্য, বোতাম বা কোনও আইটেম সক্রিয় করা হয় যেমন, তালিকার আইটেমের জন্যও এটি কার্যকর হয়। <আইটেম অ্যান্ড্রয়েড: স্টেট_এক্টিভেটেড = "সত্য" অ্যান্ড্রয়েড: রঙ = "@ অ্যান্ড্রয়েড: রঙ / সাদা" />
— জিহাও

নির্বাচক কি সত্যিই res/colorফোল্ডারের অধীনে থাকা উচিত ?
— এমআর 5

79

এবং নির্বাচকটিও এখানে উত্তর।

উত্সগুলিতে উজ্জ্বল_সামগ্রী_ডর্ক_ফোকাস.এক্সএমএল অনুসন্ধান করুন, আপনার প্রকল্পে পুনরায় / রঙের ডিরেক্টরিতে যুক্ত করুন এবং তারপরে টেক্সটভিউ থেকে উল্লেখ করুন

android:textColor="@color/bright_text_dark_focused"

5
আমি মনে করি এটি "প্রাথমিক_পেক্সট_ডارک_ফোকাস.এক্সএমএল" এ পরিবর্তিত হয়েছে।
— greg7gkb

11
এটি আমার মনকে ফুটিয়ে তুলেছিল। আমি শ্রোতার সাথে এই সমস্ত সময় পাঠ্যের রঙ পরিবর্তন করতে জিনিসগুলি পরিচালনা করছি। মেঝেতে চোয়াল। উজ্জ্বল!
— আর্টেম রাশাকোভস্কিই

কখনও ভাবেন নি যে নির্বাচকরা টেক্সট কালারের জন্যও কাজ করে, খুব সহজ।
— Drejc

আমি আমার জন্য যে ভিউ তৈরি করেছি তার মূল লেআউট দিয়ে এটি চেষ্টা করেছি ListFragmentএবং একগুচ্ছ ত্রুটিযুক্ত হয়ে শেষ করেছি । আমি কি ভুল করছি?
— MowDownJoe

আমরা @ অ্যান্ড্রয়েড: সেখানে রঙ / সাদা ব্যবহার করতে পারি না .. যখন আমি
— সিটিআরএল

31

এখানে আমার বাস্তবায়ন, যা তালিকার আইটেম হিসাবে হুবহু আচরণ করে (কমপক্ষে 2.3 এ)

মাঝামাঝি / লেআউট / list_video_footer.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/list_video_footer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:drawable/list_selector_background"
        android:clickable="true"
        android:gravity="center"
        android:minHeight="98px"
        android:text="@string/more"
        android:textColor="@color/bright_text_dark_focused"
        android:textSize="18dp"
        android:textStyle="bold" />

</FrameLayout>

মাঝামাঝি / রং / bright_text_dark_focused.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true" android:color="#444"/>
    <item android:state_focused="true" android:color="#444"/>
    <item android:state_pressed="true" android:color="#444"/>
    <item android:color="#ccc"/>

</selector>

এটি আমার পক্ষে ভাল কাজ করেছে এবং আমার ক্ষেত্রে আমার ট্যাবহোস্ট বাস্তবায়নের জন্য হাইলাইট / অবিশ্বাস্য রঙগুলি সামঞ্জস্য করার জন্য বেশ ভাল কাজ করেছে
— অডমিটার

27

এটি একটি তালিকান নির্বাচনের কাজটি করার জন্য নিম্নলিখিত কোডটি ব্যবহার করুন:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fff"/>
    <item android:state_activated="true" android:color="#fff"/>
    <item android:color="#000" />
</selector>

স্পষ্টতই মূলটি হল state_activated="true"রাষ্ট্র।


17
এই ফাইলটিকে রেজ / কালার ফোল্ডারের অধীনে রাখতে ভুলবেন না
— এনগুইন মিন বিহ

4

এখানে নির্বাচক উদাহরণ। আপনি যদি গ্রহপ ব্যবহার করেন, আপনি যখন সিটিআরএল এবং স্পেস উভয় ক্লিক করেন তখন এটি কিছু প্রস্তাব দেয় না: / আপনাকে অবশ্যই এটি টাইপ করতে হবে।

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_default_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/btn_default_selected"
    android:state_focused="true"
    android:state_enabled="true"
    android:state_window_focused="true"  />
<item android:drawable="@drawable/btn_default_normal" />

আপনি রেফারেন্সের জন্য দেখতে পারেন;

http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList


2

আমি এর পরে আরও অনুসন্ধান না করে সর্বদা উপরের সমাধানটি ব্যবহার করি। ;-)

যাইহোক, আজ আমি কিছু এড়িয়ে এসে তা ভাগ করে নেওয়ার চিন্তাভাবনা করেছি। :)

এই বৈশিষ্ট্যটি সত্যই এপিআই 1 থেকে উপলব্ধ এবং এটি কালারস্টেটলিস্ট হিসাবে ডাকা হয় , যেখানে আমরা বিভিন্ন রাজ্যে একটি রঙ সরবরাহ করতে পারি (যেমন আমরা ইতিমধ্যে জানি) know

এটি এখানে খুব ভালভাবে নথিভুক্ত করা হয়।


2

ইন res/colorস্থান ফাইল "text_selector.xml":

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/blue" android:state_focused="true" />
    <item android:color="@color/blue" android:state_selected="true" />
    <item android:color="@color/green" />
</selector>

তারপরে এটি TextViewব্যবহার করুন:

<TextView
    android:id="@+id/value_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Text"
    android:textColor="@color/text_selector"
    android:textSize="15sp"
    />

এবং কোডে আপনাকে একটি ক্লিক শ্রোতা সেট করতে হবে।

private var isPressed = false

private fun TextView.setListener() {
    this.setOnClickListener { v ->
        run {
            if (isPressed) {
                v.isSelected = false
                v.clearFocus()
            } else {
                v.isSelected = true
                v.requestFocus()
            }
            isPressed = !isPressed
        }
    }
}

override fun onResume() {
    super.onResume()
    textView.setListener()
}

override fun onPause() {
    textView.setOnClickListener(null)
    super.onPause()
}

দুঃখিত যদি ত্রুটি আছে, আমি প্রকাশের আগে একটি কোড পরিবর্তন করেছি এবং পরীক্ষা করেছিলাম না।


1

যদি ট্যাবগুলিতে টেক্সটভিউগুলি ব্যবহার করা হয় তবে এই নির্বাচক সংজ্ঞাটি আমার পক্ষে কাজ করেছে (ক্লাউস বাল্ডিনো চেষ্টা করেছেন তবে তা করেন নি):

<?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <!--  Active tab -->
  <item
    android:state_selected="true"
    android:state_focused="false"
    android:state_pressed="false"
    android:color="#000000" />

  <!--  Inactive tab -->
  <item
    android:state_selected="false"
    android:state_focused="false"
    android:state_pressed="false"
    android:color="#FFFFFF" />

</selector>

0

আপনি চেষ্টা করেছেন setOnFocusChangeListener? হ্যান্ডলারের মধ্যে, আপনি পাঠ্যের উপস্থিতি পরিবর্তন করতে পারেন।

এই ক্ষেত্রে:

TextView text = (TextView)findViewById(R.id.text);
text.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            ((TextView)v).setXXXX();
        } else {
            ((TextView)v).setXXXX();
        }
    }
});

তারপরে আপনি যখন যা চান পরিবর্তনগুলি প্রয়োগ করতে পারেন যখন এটি ফোকাস করা উচিত বা না হয়। আপনি বিশ্বব্যাপী ফোকাস পরিবর্তনগুলি শোনার জন্য ViewTreeObserver ব্যবহার করতে পারেন।

এই ক্ষেত্রে:

View all = findViewById(R.id.id_of_top_level_view_on_layout);
ViewTreeObserver vto = all.getViewTreeObserver();
vto.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
    public void onGlobalFocusChanged(
        View oldFocus, View newFocus) {
        // xxxx
    }
});

আমি আশা করি এটি আপনাকে ধারণা দেয় বা সহায়তা করে।


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