Android XML自定义Spinner样式修改求助:设置背景色及搜索型Spinner文本自定义
Hey there! Let's break down each of your customization requests step by step to get those Spinners looking and behaving exactly how you want.
To change the background color of your Spinners, you have two straightforward options:
Option 1: Directly in XML
First, add your preferred light blue color to res/values/colors.xml:
<color name="light_blue">#E3F2FD</color> <!-- Adjust the hex code to match your desired light blue -->
Then update your Spinner XML tags to include the background attribute:
<Spinner android:id="@+id/customerSpinner" style="@android:style/Widget.Spinner.DropDown" android:layout_width="350dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/MarginStart20" android:layout_marginTop="5dp" android:background="@color/light_blue" <!-- Add this line --> app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/TextView6" /> <Spinner android:id="@+id/fieldSpinner" style="@android:style/Widget.Spinner.DropDown" android:layout_width="350dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/MarginStart20" android:layout_marginTop="5dp" android:background="@color/light_blue" <!-- Add this line --> app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/TextView7" />
Option 2: Create a Reusable Custom Style
If you want to apply this style to multiple Spinners across your app, define a custom style in res/values/styles.xml:
<style name="CustomDropDownSpinner" parent="@android:style/Widget.Spinner.DropDown"> <item name="android:background">@color/light_blue</item> </style>
Then replace the default style with your custom one in the Spinner XML:
<Spinner android:id="@+id/customerSpinner" style="@style/CustomDropDownSpinner" <!-- rest of your existing attributes --> />
There are two reliable ways to set a custom hint for your Spinners:
Method 1: Using XML Attribute
First, add your custom hint string to res/values/strings.xml:
<string name="custom_spinner_hint">Choose an option</string> <!-- Replace with your desired hint text -->
Then add the android:hint attribute to your Spinners:
<Spinner android:id="@+id/customerSpinner" style="@style/CustomDropDownSpinner" android:hint="@string/custom_spinner_hint" <!-- Add this line --> <!-- rest of your attributes --> />
Method 2: Programmatically with Adapter Handling
If you want the hint to only appear when no item is selected, adjust your Adapter setup in Kotlin:
// Get your original item list from strings.xml val customerItems = resources.getStringArray(R.array.customer_items).toMutableList() // Insert your custom hint as the first item customerItems.add(0, getString(R.string.custom_spinner_hint)) // Create and attach the adapter val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, customerItems) adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) binding.customerSpinner.adapter = adapter // Optional: Ignore the hint item when selecting binding.customerSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { if (position != 0) { // Process the actual selected item val selectedOption = customerItems[position] } } override fun onNothingSelected(parent: AdapterView<*>?) {} }
Since your searchable Spinner is a custom implementation (likely using a Dialog or PopupWindow), modify its Close button text with these steps:
Step 1: Locate the Dialog Layout File
Find the XML layout used for your searchable Spinner's dialog (e.g., search_spinner_dialog.xml). Look for the Button/TextView that displays "Close":
<Button android:id="@+id/btn_close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/custom_close_text" <!-- Update this string reference --> />
Step 2: Define Custom Close Text
Add your desired text to res/values/strings.xml:
<string name="custom_close_text">Done</string> <!-- Replace with your preferred button text -->
Step 3: Set Text Programmatically (If Needed)
If you're creating the Close button dynamically in code, set its text directly:
// Assuming you have a reference to the dialog and button val closeButton = dialog.findViewById<Button>(R.id.btn_close) closeButton.text = getString(R.string.custom_close_text)
That should cover all your customization needs! Let me know if you hit any roadblocks with specific parts.
内容的提问来源于stack exchange,提问作者zuzizuza675

