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


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.