অনুসন্ধান ভিউজেটের পটভূমি অঙ্কনযোগ্য পরিবর্তন করা


122

আমি অ্যান্ড্রয়েড অ্যাকশনবার অনুসন্ধান ভিউজেটে থাকা অঙ্কনযোগ্যটি পরিবর্তন করার চেষ্টা করছি।

বর্তমানে এটি দেখতে এটির মতো দেখাচ্ছে: এখানে চিত্র বর্ণনা লিখুন

তবে আমার নীল পটভূমিকে আঁকতে সক্ষম একটি লাল রঙে পরিবর্তন করতে হবে।

আমি আমার নিজের অনুসন্ধানের উইজেটটি রোলিংয়ের জন্য অনেকগুলি বিষয় সংক্ষেপে চেষ্টা করেছি, তবে কিছুই কাজ করছে বলে মনে হচ্ছে না।

কেউ কি আমাকে এটি পরিবর্তনের জন্য সঠিক দিকে নির্দেশ করতে পারে?


1
আমি বিশ্বাস করি যে এই এসও পোস্টটি আপনি ইতিমধ্যে যাচাই না করে থাকলে আপনি যা অর্জন করতে চান তাতে আপনাকে সহায়তা করতে পারে।
অ্যাঞ্জেলো

@ অ্যাঞ্জেলো দুর্ভাগ্যক্রমে, SearchViewএটি পটভূমিতে সম্ভব নয় কারণ এটি এর মাধ্যমে পাওয়া যায় না R.styleable। নীচে আমার উত্তরটি কোডে এটি কীভাবে করবেন তা বর্ণনা করে।
vArDo

আপনি "ফিল্মের নাম লিখুন" লেখাটি কীভাবে পেয়েছেন?
জেন

আপনি অনুসন্ধান ভিউতে ইঙ্গিত পাঠ্যটি এটির মতো সেট করতে পারেন: অনুসন্ধান ভিউস.সন্ধানআউটপুষ্ট অনুসন্ধান অটো কমলিট = (অনুসন্ধান ভিউ.সন্ধানআউটকমিউলিট) অনুসন্ধান ভিউ.ফাইন্ডভিউবিআইআইডি (android.support.v7.appcompat.R.id.search_src_text); অনুসন্ধানআউটো কমপ্লিট.সেট হিন্ট ("ইঙ্গিত পাঠ্য");
ডোমিনিক 4'15

আমি এই পোস্টের শেষে ব্যাখ্যা। চিত্র সহ /programming/47426541/how-to-
परिवर्तन-searchbar-cancel-button-image-in-xamarin-forms/51297028#51297028

উত্তর:


253

ইন্ট্রো

দুর্ভাগ্যক্রমে SearchViewXML এ থিম, শৈলী এবং উত্তরাধিকার ব্যবহার করে পাঠ্য ক্ষেত্র শৈলীর সেট করার কোনও উপায় নেই কারণ আপনি অ্যাকশনবারের ড্রপডাউন-এ আইটেমগুলির পটভূমি নিয়ে করতে পারেন । এটি কারণ selectableItemBackground স্টাইলযোগ্য হিসাবে তালিকাভুক্ত করা হয়েছে R.stylable, যদিও searchViewTextField(থিম বৈশিষ্ট্য যা আমরা আগ্রহী) এটি নয়। সুতরাং, আমরা এক্সএমএল সংস্থানগুলির মধ্যে থেকে সহজেই এটি অ্যাক্সেস করতে পারি না (আপনি একটি No resource found that matches the given name: attr 'android:searchViewTextField'ত্রুটি পাবেন)।

কোড থেকে অনুসন্ধানভিউ পাঠ্যের ক্ষেত্রের ব্যাকগ্রাউন্ড সেট করা হচ্ছে

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

দ্রষ্টব্য: নীচের সমাধানটি কেবলমাত্র আইডি ( android:id/search_plate) এর মধ্যে থাকা উপাদানগুলির উপর নির্ভর করে SearchView, তাই এটি শিশুদের ট্র্যাভারসাল (যেমন searchView.getChildAt(0)অভ্যন্তরীণ ডানদিকের দিকে যেতে ব্যবহার করে) এর চেয়ে বেশি এসডিকে-সংস্করণে স্বাধীন SearchView, তবে এটি বুলেট-প্রুফ নয়। বিশেষত যদি কিছু নির্মাতা SearchViewউপরোক্ত আইডি সহ অভ্যন্তরীণ এবং উপাদানগুলির পুনরায় সংশোধন করার সিদ্ধান্ত নেয় তবে কোডটি কাজ করবে না।

এসডিকে, পাঠ্য ক্ষেত্রের জন্য পটভূমিটি নয়টি প্যাচগুলিরSearchView মাধ্যমে ঘোষণা করা হয় , সুতরাং আমরা এটি একইভাবে করব। আপনি মূল জানতে পারেন PNG চিত্র অঙ্কনযোগ্য-mdpi নির্দেশিকা অ্যান্ড্রয়েড Git সংগ্রহস্থলের । আমরা দুটি ছবিতে আগ্রহী। যখন টেক্সট ক্ষেত্রের নির্বাচন করা হয় রাষ্ট্রের জন্য ওয়ান (নামে textfield_search_selected_holo_light.9.png ) এবং যেখানে এটি (নামে না জন্য এক textfield_search_default_holo_light.9.png )।

দুর্ভাগ্যক্রমে, আপনি উভয় চিত্রের স্থানীয় অনুলিপি তৈরি করতে হবে, এমনকি আপনি যদি কেবলমাত্র দৃষ্টি নিবদ্ধ করা স্থিতি কাস্টমাইজ করতে চান । এটি হ'ল আরডিড্রাব্যতেtextfield_search_default_holo_light উপস্থিত নেই । সুতরাং এটির মাধ্যমে সহজেই অ্যাক্সেসযোগ্য নয় , যা স্থানীয় অঙ্কনযোগ্য উল্লেখ করার পরিবর্তে নীচে প্রদর্শিত নির্বাচকগুলিতে ব্যবহার করা যেতে পারে।@android:drawable/textfield_search_default_holo_light

দ্রষ্টব্য: আমি বেস হিসাবে হালো লাইট থিমটি ব্যবহার করছিলাম তবে আপনি হলো ডার্কের সাথেও এটি করতে পারেন । দেখে মনে হচ্ছে হালকা এবং গা ark থিমের মধ্যে নির্বাচিত রাষ্ট্র 9-প্যাচগুলির মধ্যে কোনও আসল পার্থক্য নেই । তবে, ডিফল্ট অবস্থার জন্য 9-প্যাচগুলির মধ্যে পার্থক্য রয়েছে ( হালকা বনাম গা ark ় দেখুন )। সুতরাং, সম্ভবত অন্ধকার এবং হালকা উভয় থিমের জন্য নির্বাচিত রাষ্ট্রের জন্য 9-প্যাচের স্থানীয় অনুলিপিগুলি তৈরি করার প্রয়োজন নেই (ধরে নিই যে আপনি উভয়কেই পরিচালনা করতে চান এবং সেগুলি উভয়কে হোলো থিমের মতো দেখায় )। কেবল একটি স্থানীয় অনুলিপি তৈরি করুন এবং এটি ব্যবহার করুনউভয় থিমের জন্য নির্বাচক অঙ্কনযোগ্য

এখন, আপনাকে আপনার প্রয়োজন অনুসারে নয়টি প্যাচ ডাউনলোড করতে হবে (যেমন নীল রঙকে লাল রঙে পরিবর্তন করা)। আপনার সম্পাদনার পরে সঠিকভাবে সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করতে আপনি 9-প্যাচ টুলটি ড্র করে ফাইলটি একবার দেখে নিতে পারেন ।

আমি ওয়ান-পিক্সেল পেনসিল সরঞ্জাম (বেশ সহজ) দিয়ে জিম্প ব্যবহার করে ফাইলগুলি সম্পাদনা করেছি তবে আপনি সম্ভবত নিজের সরঞ্জামটি ব্যবহার করবেন। ফোকাসড স্টেটের জন্য এখানে আমার কাস্টমাইজড 9-প্যাচ রয়েছে :

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

বিঃদ্রঃ: সরলতার জন্য, আমি কেবলমাত্র এমডিপিআই ঘনত্বের জন্য চিত্রগুলি ব্যবহার করেছি । আপনি যদি কোনও ডিভাইসে সেরা ফলাফল চান তবে একাধিক স্ক্রিন ঘনত্বের জন্য আপনাকে 9-প্যাচ তৈরি করতে হবে । জন্য চিত্র হোলো SearchView খুঁজে পাওয়া যেতে পারে mdpi , hdpi এবং xhdpi অঙ্কনযোগ্য।

এখন, আমাদের আঁকার যোগ্য নির্বাচনকারী তৈরি করতে হবে, যাতে দৃশ্যের ভিত্তিতে সঠিক চিত্র প্রদর্শিত হবে। res/drawable/texfield_searchview_holo_light.xmlনিম্নলিখিত বিষয়বস্তু সহ ফাইল তৈরি করুন :

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true"
        android:drawable="@drawable/textfield_search_selected_holo_light" />
    <item android:drawable="@drawable/textfield_search_default_holo_light" />
</selector>

আমরা উপরের তৈরি অঙ্কনযোগ্য ব্যবহারের জন্য পঠন LinearLayoutক্ষেত্রটি ধারণ করে এমন দৃশ্যের জন্য ব্যাকগ্রাউন্ড সেট করতে পারি SearchView- এটির আইডি android:id/search_plate। বিকল্পগুলির মেনু তৈরি করার সময় কোডে এটি কীভাবে করা যায় তা এখানে রয়েছে:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }       

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);

        // Getting SearchView from XML layout by id defined there - my_search_view in this case
        SearchView searchView = (SearchView) menu.findItem(R.id.my_search_view).getActionView();
        // Getting id for 'search_plate' - the id is part of generate R file,
        // so we have to get id on runtime.
        int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
        // Getting the 'search_plate' LinearLayout.
        View searchPlate = searchView.findViewById(searchPlateId);
        // Setting background of 'search_plate' to earlier defined drawable.            
        searchPlate.setBackgroundResource(R.drawable.textfield_searchview_holo_light);          

        return super.onCreateOptionsMenu(menu);
    }

}

চূড়ান্ত প্রভাব

চূড়ান্ত ফলাফলের স্ক্রিনশটটি এখানে:

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

আমি এই কিভাবে পেলাম

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

ভিউ লেআউটটি পরীক্ষা করা হচ্ছে

আমি কিভাবে পরীক্ষা করেছি SearchViewলেআউট দেখতে কেমন । ইন SearchView contructor এক একটি লাইন যে বাড়িয়ে বিন্যাস পেতে পারবেন:

inflater.inflate(R.layout.search_view, this, true);

এখন আমরা জানি যে SearchViewবিন্যাস নামের ফাইল রয়েছে res/layout/search_view.xml। মধ্যে খুঁজছেন search_view.xml আমরা একটি ভেতরের জানতে পারেন LinearLayoutউপাদান (আইডি সহ search_plate) আছে যে android.widget.SearchView$SearchAutoCompleteএটা ভিতরে (আমাদের মতো সৌন্দর্য অনুসন্ধান দর্শন টেক্সট ক্ষেত্রের):

    <LinearLayout
        android:id="@+id/search_plate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center_vertical"
        android:orientation="horizontal"
        android:background="?android:attr/searchViewTextField">

এখন, আমরা এখন যে থিমটির searchViewTextFieldবৈশিষ্ট্যের উপর ভিত্তি করে পটভূমি সেট করা আছে।

তদন্তের বৈশিষ্ট্য (এটি কি সহজে নিষ্পত্তিযোগ্য?)

কীভাবে searchViewTextFieldঅ্যাট্রিবিউট সেট করা আছে তা পরীক্ষা করতে , আমরা res / মান / থিমস.এমএমএল অনুসন্ধান করি । এর সাথে সম্পর্কিত একটি গ্রুপ রয়েছেSearchView ডিফল্ট Theme:

<style name="Theme">
    <!-- (...other attributes present here...) -->

    <!-- SearchView attributes -->
    <item name="searchDropdownBackground">@android:drawable/spinner_dropdown_background</item>
    <item name="searchViewTextField">@drawable/textfield_searchview_holo_dark</item>
    <item name="searchViewTextFieldRight">@drawable/textfield_searchview_right_holo_dark</item>
    <item name="searchViewCloseIcon">@android:drawable/ic_clear</item>
    <item name="searchViewSearchIcon">@android:drawable/ic_search</item>
    <item name="searchViewGoIcon">@android:drawable/ic_go</item>
    <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search</item>
    <item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_holo_dark</item>
    <item name="searchViewEditQueryBackground">?attr/selectableItemBackground</item>

আমরা দেখতে পাচ্ছি ডিফল্ট থিমের জন্য মানটি @drawable/textfield_searchview_holo_dark। জন্যTheme.Light মান যে ফাইলে সেট করা হয়

এখন, দুর্দান্ত লাগবে যদি এই বৈশিষ্ট্যটি আর.স্টাইলযোগ্যের মাধ্যমে অ্যাক্সেসযোগ্য ছিল , তবে, দুর্ভাগ্যক্রমে এটি তা নয়। তুলনা করার জন্য, থিম.এক্সএমএল এবং আর.আর্ট্রির মতো পাঠ্য চেহারা বা নির্বাচনযোগ্য আইটেমব্যাকগ্রাউন্ড উভয়ই উপস্থিত থিমের অন্যান্য বৈশিষ্ট্যগুলি দেখুন । যদি উপস্থিত থাকতেন (এবংsearchViewTextFieldR.attrR.stylable ) যখন XML- এর আমাদের পুরো অ্যাপ্লিকেশনের জন্য থিম সংজ্ঞায়িত কেবলমাত্র আমরা আমাদের অঙ্কনযোগ্য নির্বাচক ব্যবহার করতে পারে। উদাহরণ স্বরূপ:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="AppTheme" parent="android:Theme.Light">
        <item name="android:searchViewTextField">@drawable/textfield_searchview_holo_light</item>
    </style>
</resources>

কী পরিবর্তন করা উচিত?

এখন আমরা জানি, আমাদের search_plateকোডের মাধ্যমে অ্যাক্সেস করতে হবে । তবে এটি দেখতে কেমন হবে তা আমরা এখনও জানি না। সংক্ষেপে, আমরা ডিফল্ট থিমগুলিতে মান হিসাবে ব্যবহৃত অঙ্কনগুলির জন্য অনুসন্ধান করি: টেক্সটফিল্ড_সার্চভিউ_হলো_ডার্ক.এক্সএমএল এবং টেক্সটফিল্ড_সার্চভিউ_হোলো_লাইট.এক্সএমএল । বিষয়বস্তুর দিকে তাকিয়ে আমরা দেখতে পেলাম যে আঁকাগুলি হ'ল selectorস্থিতির ভিত্তিতে অন্য দুটি আঁকাগুলি (যা পরে 9-প্যাচ হতে পারে) reference আপনি androiddrawables.com এ অ্যান্ড্রয়েডের সমস্ত সংস্করণ (প্রায়) থেকে একত্রিত 9-প্যাচ আঁকতে পারেন

কাস্টমাইজ

আমরা 9-টি প্যাচের একটিতে নীল রেখাটি সনাক্ত করি , তাই আমরা এর স্থানীয় অনুলিপি তৈরি করি এবং পছন্দমতো রঙ পরিবর্তন করি।


আপনার জাভা কোডটি কাজ করবে না, তাঁর অনুসন্ধানভিউ অ্যাকশনবারে রয়েছে এবং সন্ধান ভিউআইআইডি পদ্ধতিটি খুঁজে পাওয়া যাবে না। তবে বাকিটা ঠিক!
ভিন্সএফআর

@ ভিনসএফআর এটি উল্লেখ করার জন্য ধন্যবাদ। এটি লক্ষ্য করা যায় নি (আমি SearchViewনিজের উপর দৃষ্টি নিবদ্ধ করেছি )। আমি যদি আপনার উত্তরটি (ক্রেইটঅ্যাপশনস মেনুকে ওভাররাইড করে) খনিতে মিশ্রিত করি তবে ঠিক কি?
vArDo

@ ভিনসএফআর আপনার পরামর্শ অনুসারে আমি আমার কোডটি onCreate()পদ্ধতি থেকে পদ্ধতিতে নিয়ে onCreateOptionsMenu()এসেছি। আপনার উত্তর ভোট দিয়েছেন।
vArDo

অনেক অনেক ধন্যবাদ: ডি কি কোনও উপায় আছে যে আমি একইভাবে ম্যাগ আইকন এবং ক্লোজ আইকনটি পরিবর্তন করতে পারি?
হর্ষ এমভি

আমরা কীভাবে ম্যাগনিফায়ার আইকনটি পরিবর্তন করতে পারি? আমি সব চেষ্টা করি, কিন্তু আমি এটি পরিবর্তন করতে পারি না ... ধন্যবাদ ... এবং শার্লক অ্যাকশন বারে এটি কীভাবে করবেন?
জোভান

31

যদি আপনি অ্যাপকম্প্যাট লাইব্রেরি ব্যবহার করেন তবে উপরের সমাধানগুলি কাজ করতে পারে না। অ্যাপকম্প্যাট লাইব্রেরির জন্য কোডটি কার্যকর করার জন্য আপনাকে কোডটি সংশোধন করতে হতে পারে।

অ্যাপকম্প্যাট লাইব্রেরির জন্য ওয়ার্কিং সলিউশন এখানে।

  @Override
  public boolean onCreateOptionsMenu(Menu menu)
  {

    getMenuInflater().inflate(R.menu.main_menu, menu); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchAutoComplete.setHintTextColor(Color.WHITE);
    searchAutoComplete.setTextColor(Color.WHITE);

    View searchplate = (View)searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);
    searchplate.setBackgroundResource(R.drawable.texfield_searchview_holo_light);

    ImageView searchCloseIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
    searchCloseIcon.setImageResource(R.drawable.abc_ic_clear_normal);

    ImageView voiceIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_voice_btn);
    voiceIcon.setImageResource(R.drawable.abc_ic_voice_search);

    ImageView searchIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
    searchIcon.setImageResource(R.drawable.abc_ic_search);


    return super.onCreateOptionsMenu(menu);
}

1
এটি অনুসন্ধান_ম্যাগ_ আইকনের জন্য কাজ করে না। : এটা দেয় "0x01010479 স্টাইল খারাপ এন্ট্রি সঙ্গে কী আছে"
Lavanya

1
অনুসন্ধান প্লেটটি আমার পক্ষে কাজ করে না (এটি কিছু করে তবে আমি নীচের লাইনে কোনও পরিবর্তন দেখতে পাচ্ছি না), তবে অ্যাপকম্প্যাটটির সাধারণ ধারণাটি খুব সহায়ক
লোক_ম

14

আপনার onCreateOptionsMenuপদ্ধতিটি হতে হবে:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.option, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        int linlayId = getResources().getIdentifier("android:id/search_plate", null, null);
        ViewGroup v = (ViewGroup) searchView.findViewById(linlayId);
        v.setBackgroundResource(R.drawable.searchviewredversion);
        return super.onCreateOptionsMenu(menu);
    }

যেখানে আপনার অনুসন্ধান আইটেম menu_searchবন্ধ আছে

এবং এখানে searchviewredversion(এটি একটি এক্সএইচডিপি সংস্করণ): http://img836.imageshack.us/img836/5964/searchviewredversion.png

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


অনুসন্ধান আইকন এবং ক্লোজ বোতামটি কি একইভাবে পরিবর্তন করার কোনও উপায় আছে?
হর্ষ এমভি

শার্লক অ্যাকশনবার ৪.২ সম্পর্কে আমি জানি না তবে হ্যাঁ আপনি একইভাবে অনুসন্ধান আইকন এবং বন্ধ বোতামটি পরিবর্তন করতে পারেন!
ভিন্সএফআর

অ্যাকশনবারশারলকের নিজস্ব থিম রয়েছে এবং এটি নিজস্ব অনুসন্ধান ভিউ সংজ্ঞায়িত করে। এর অর্থ আপনি কেবলমাত্র অনুসন্ধান ভিউ টেক্সটফিল্ড নামে আপনার থিমটিতে অঙ্কনযোগ্য সংজ্ঞা এবং উপরে 9 টি প্যাচ ব্যবহার করে একটি আইটেম যুক্ত করতে পারেন।
এনকিজক

1
9-প্যাচ হিসাবে সম্পদ রফতানি করতে ইঙ্গিত করতে ফাইলটির নাম পরিবর্তন করতে ভুলবেন না ..png
1owk3y

13

উপরের সমাধানটি অ্যাকশনবার্লক ৪.২ এর সাথে কাজ করে না এবং তাই এটি অ্যান্ড্রয়েড ২.x এর সাথে পিছনে সামঞ্জস্যপূর্ণ নয়। এখানে কোডটি কাজ করছে যা সন্ধান ভিউগ্রাউন্ড সেট করে এবং অ্যাকশনবার্লক ৪.২ এ পাঠ্যসূচি দেয়:

public static void styleSearchView(SearchView searchView, Context context) {
    View searchPlate = searchView.findViewById(R.id.abs__search_plate);
    searchPlate.setBackgroundResource(R.drawable.your_custom_drawable);
    AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
    searchText.setHintTextColor(context.getResources().getColor(R.color.your_custom_color));
}

আমি এই কোডটি কোথায় রাখব? আমি অ্যাকশন বারের 4.2 সংস্করণে এটি করার চেষ্টা করছি। আমার প্রশ্ন স্ট্যাকওভারফ্লো.com
হর্ষ এমভি

হাই, এটিCreateOptionsMenu পদ্ধতি থেকে কল করুন। সন্ধান ভিউ সন্ধান করুন এবং এটিকে এই পদ্ধতিতে পাস করুন।
ডেভিড ভাভরা

ধন্যবাদ. যেভাবে এখানে ইনলাইন ম্যাগ প্রতীকটি সরিয়ে নেওয়া যায় সে সম্পর্কে কোনও ধারণা এখানে i.imgur.com/YvBz2.png
হর্ষ এমভি

3
প্রস্তুত ABS আপনি Theme.Sherlock বা Theme.Sherlock.Light ব্যাপ্ত হতে হবে না Android এর থিম। এর অর্থ আপনাকে যা করতে হবে তা হ'ল আপনার অ্যাপ্লিকেশন থিম সংজ্ঞাতে অনুসন্ধান ভিউ টেক্সটফিল্ড নামে একটি আইটেম যুক্ত করা। এক্সএমএল এ সমস্ত সম্পন্ন করার জন্য কোনও কোডের প্রয়োজন নেই।
এনকিজক

5

আমি এটি করতেও ক্লান্ত হয়ে পড়েছি এবং আমি v7 ব্যবহার করছি। অ্যাপটি ক্র্যাশ হয়ে গিয়েছিল আমি যখন এর searchPlateমাধ্যমে দখল করার চেষ্টা getIdentifier()করেছি তাই আমি এটি এভাবে করেছিলাম:

View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);

3

আমিও একই সমস্যার মুখোমুখি হয়েছি I আমি অ্যাপকম্প্যাট ভি 7 লাইব্রেরি ব্যবহার করেছি এবং এর জন্য কাস্টম স্টাইল সংজ্ঞায়িত করেছি। অঙ্কনযোগ্য ফোল্ডারে নীচে_বার্টার.এক্সএমএল ফাইল রাখুন যা দেখতে দেখতে:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
  <shape >
      <solid android:color="@color/blue_color" />
  </shape>
</item>
<item android:bottom="0.8dp"
  android:left="0.8dp"
  android:right="0.8dp">
  <shape >
      <solid android:color="@color/background_color" />
  </shape>
</item>

<!-- draw another block to cut-off the left and right bars -->
<item android:bottom="2.0dp">
  <shape >
      <solid android:color="@color/main_accent" />
  </shape>
 </item>
</layer-list>

মানসমূহ ফোল্ডারে শৈলী_ম্যাকশনবার্থেম.এক্সএমএল:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="AppnewTheme" parent="Theme.AppCompat.Light">
    <item name="android:windowBackground">@color/background</item>
    <item name="android:actionBarStyle">@style/ActionBar</item>
    <item name="android:actionBarWidgetTheme">@style/ActionBarWidget</item>
</style> 
<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/main_accent</item>
    <!-- <item name="android:icon">@drawable/abc_ic_ab_back_holo_light</item> -->
</style> 
<style name="ActionBarWidget" parent="Theme.AppCompat.Light">
    <!-- SearchView customization-->
     <!-- Changing the small search icon when the view is expanded -->
    <!-- <item name="searchViewSearchIcon">@drawable/ic_action_search</item> -->
     <!-- Changing the cross icon to erase typed text -->
  <!--   <item name="searchViewCloseIcon">@drawable/ic_action_remove</item> -->
     <!-- Styling the background of the text field, i.e. blue bracket -->
    <item name="searchViewTextField">@drawable/bottom_border</item>
     <!-- Styling the text view that displays the typed text query -->
    <item name="searchViewAutoCompleteTextView">@style/AutoCompleteTextView</item>        
</style>

  <style name="AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView">
    <item name="android:textColor">@color/text_color</item>
  <!--   <item name="android:textCursorDrawable">@null</item> -->
    <!-- <item name="android:textColorHighlight">@color/search_view_selected_text</item> -->
</style>
</resources>

আমি মেনু প্রদর্শনের জন্য কাস্টমেনু.এক্সএমএল ফাইলটি সংজ্ঞায়িত করেছি:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:com.example.actionbartheme="http://schemas.android.com/apk/res-auto" >  

<item android:id="@+id/search"
      android:title="@string/search_title"
      android:icon="@drawable/search_buttonn" 
     com.example.actionbartheme:showAsAction="ifRoom|collapseActionView"   
                 com.example.actionbartheme:actionViewClass="android.support.v7.widget.SearchView"/>

আপনার ক্রিয়াকলাপটি ক্রিয়াকলাপের পরিবর্তে অ্যাকশনবার্তাটি বাড়ানো উচিত।

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.custommenu, menu);
}

ম্যানিফেস্ট ফাইলে:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppnewTheme" >

আরও তথ্যের জন্য এখানে দেখুন:
এখানে http://www.jayway.com/2014/06/02/android-theming-the-actionbar/


: পরীক্ষা করে দেখুন stackoverflow.com/questions/8211929/... অন্য LayerList উদাহরণস্বরূপ।
জ্যারেড বুরোজ

3

হালনাগাদ

আপনি যদি অ্যান্ড্রয়েডএক্স ব্যবহার করে থাকেন তবে আপনি এটি এর মতো করতে পারেন

    View searchPlate = svSearch. findViewById(androidx.appcompat.R.id.search_plate);
    if (searchPlate != null) {
        AutoCompleteTextView searchText = searchPlate.findViewById(androidx.appcompat.R.id.search_src_text);
        if (searchText != null){
            searchText.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.edittext_text_size));
            searchText.setMaxLines(1);
            searchText.setSingleLine(true);
            searchText.setTextColor(getResources().getColor(R.color.etTextColor));
            searchText.setHintTextColor(getResources().getColor(R.color.etHintColor));
            searchText.setBackground(null);
        }
    }

2

প্রথমে, একটি অঙ্কনযোগ্য হিসাবে অর্থাত্বক ড্রইবল ডিরেক্টরিতে ব্যবহার করার জন্য অনুসন্ধান_উইজেট_ব্যাকগ্রাউন্ড.এক্সএমএল নামে একটি এক্সএমএল ফাইল তৈরি করি।

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

    <solid android:color="@color/red" />

</shape>

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

পরবর্তী পদক্ষেপটি হ'ল আমাদের অনুসন্ধান উইজেটের ব্যাকগ্রাউন্ডটি এটির মধ্যে সেট করা। এটি নিম্নলিখিত দ্বারা সম্পাদন করা যেতে পারে:

    public boolean onCreateOptionsMenu(Menu menu) {

        SearchView searchView = (SearchView)menu.findItem(R.id.my_search_view).getActionView();
        Drawable d = getResources().getDrawable(R.drawable.search_widget_background);
        searchView.setBackground(d);
...
    }

@ shkschneider IMHO এটি কাজ করবে না, কারণ ব্যাকগ্রাউন্ডটি নিজের উপর নয় বরং অভ্যন্তরের SearchView(নামযুক্ত search_plate) কোনও উপাদানকে সেট করতে হবে SearchView। আরও তথ্যের জন্য আমার উত্তর দেখুন। তবে, আমাকে স্বীকার করতে হবে, আমি @ (বাবা টেনার) এর উত্তরটি ব্যবহার করার চেষ্টা করিনি।
vArDo

সন্ধান ভিউ অ্যাকশনবারে ছিল তা খেয়াল করেননি। এখন এটি কাজ করা উচিত।
Erol

@ বাব্যাটেনর এটি কাজ করবে না কারণ SearchViewনিজের জন্য পটভূমি সবসময় অভ্যন্তরের উপাদানগুলির জন্য ব্যাকগ্রাউন্ডের নীচে থাকবে SearchView। আইডি রয়েছে এমন LinearLayoutভিতরে একটি ভিউ SearchViewরয়েছে search_plateযা সেটগুলিতে এই নীল আন্ডারলাইন উপাদানটিকে ব্যাকগ্রাউন্ড হিসাবে দেখায়। বিস্তারিত জানার জন্য আমার উত্তর দেখুন। সুতরাং আপনার সমাধানের সাথে ফলাফলটি নীল আন্ডারলাইন সহ পুরো উইজেটের নীল পটভূমি এখনও দৃশ্যমান। আমি জেলি বিনের উপর পরীক্ষা করেছি , তবে আমার মনে হয় না এসডিকে টার্গেট সংস্করণটি এখানে গুরুত্বপূর্ণ।
vArDo

ধন্যবাদ VArDo। আমি অনুসন্ধান ভিভের স্তরযুক্ত কাঠামো জানতাম তবে আমি কেবল ধরে নিয়েছি এটি কার্যকর হবে (এটি আমার কাছে কমপক্ষে যৌক্তিক মনে হয়েছিল)।
এরিল

1
@ বাব্যাটেনর যদি এটি কাজ করে তবে দুর্দান্ত হবে, যাতে এই সমস্ত
হ্যাকারি

1
public boolean onCreateOptionsMenu(Menu menu) {
........

        // Set the search plate color
        int linlayId = getResources().getIdentifier("android:id/search_plate", null, null);
        View view = searchView.findViewById(linlayId);
        Drawable drawColor = getResources().getDrawable(R.drawable.searchcolor);
        view.setBackground( drawColor );
........
    }

এবং এটি সন্ধানযোগ্য রঙিন.এক্সএমএল ফাইল

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  <item>
      <shape >
          <solid android:color="#ffffff" />
      </shape>
  </item>

  <!-- main color -->
  <item android:bottom="1.5dp"
      android:left="1.5dp"
      android:right="1.5dp">
      <shape >
          <solid android:color="#2c4d8e" />
      </shape>
  </item>

  <!-- draw another block to cut-off the left and right bars -->
  <item android:bottom="18.0dp">
      <shape >
          <solid android:color="#2c4d8e" />
      </shape>
  </item>
</layer-list>

0

আমি এই পোস্টের শেষে চিত্রগুলির সাথে ব্যাখ্যা করেছিলাম যে এটি জামারিন ফর্মগুলির জন্য প্রযোজ্য। তবে আমি মনে করি আপনি এটি বুঝতে পারবেন, কারণ এটি অ্যান্ড্রয়েডের সার্চভিউয়ের উত্স কোডের উপর ভিত্তি করে

কীভাবে সার্জারবারটি বাতিল করবেন বোতামের চিত্রটি xamarin ফর্মগুলিতে


0

যদি আপনি এই "getMenuInflater ()। স্ফীত (R.menu.search_menu, মেনু);" এর মতো অনুসন্ধান ভিউতে স্ফীত করছেন। তারপরে আপনি নীচের মত স্টাইল.এক্সএমএল দিয়ে এই অনুসন্ধানদর্শনটি কাস্টমাইজ করতে পারেন।

<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
      <item name="searchViewStyle">@style/SearchView.ActionBar</item>
</style>

<style name="SearchView.ActionBar" parent="Widget.AppCompat.SearchView.ActionBar">
      <item name="queryBackground">@drawable/drw_search_view_bg</item>
      <item name="searchHintIcon">@null</item>
      <item name="submitBackground">@null</item>
      <item name="closeIcon">@drawable/vd_cancel</item>
      <item name="searchIcon">@drawable/vd_search</item>
</style>

0

আমি এটি সম্পর্কে অনেক খনন করছিলাম এবং অবশেষে আমি এই সমাধানটি পেয়েছি এবং এটি আমার পক্ষে কাজ করে!
আপনি এটি ব্যবহার করতে পারেন

আপনি যদি অ্যাপকম্প্যাট ব্যবহার করেন তবে এটি ব্যবহার করে দেখুন:

ImageView searchIconView = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_button);
searchIconView.setImageResource(R.drawable.yourIcon);

যদি আপনি অ্যান্ড্রয়েডেক্স ব্যবহার করেন তবে এটি ব্যবহার করে দেখুন:

ImageView searchIconView = (ImageView) searchView.findViewById(androidx.appcompat.R.id.search_button);
    searchIconView.setImageResource(R.drawable.yourIcon);

এটি ডিফল্ট সার্চভিউ আইকনটি পরিবর্তন করবে।

আশা করি এটা সাহায্য করবে!

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