【问题标题】:Android - How to display a spinner with value but display a different oneAndroid - 如何显示具有值但显示不同的微调器
【发布时间】:2012-04-03 22:49:00
【问题描述】:

对于我的 Android 应用程序,我需要使用一个显示 XML 树的微调器。用户需要这棵树来了解他可以选择的值的级别。

这是我现在拥有的图片:

如您所见,我放了一些小“>”和一些空格来模拟树。我现在想要的是当用户选择一个条目时,显示没有这些符号的值。

今天,微调器显示如下值:

这个词是“ > Supermarket”,但我想要的是“Supermarket”,仅此而已。有没有办法修改微调器显示的选定值而不是列表?

我希望你能帮助我。

问候。

V.

【问题讨论】:

    标签: java android spinner


    【解决方案1】:

    你可以这样做

    让你的微调器不可见在微调器后面放置一个 textView 使用

    将 TextView 文本设置为微调器选定项
    textView.settext(spinner.getSelectedItem().replace(">","").trim()));
    

    不要忘记将微调器放在 textView 上,否则您将无法获得微调器点击 事件

    【讨论】:

    • 谢谢,但是如果我想显示微调器形状,该怎么做呢?
    • 很简单,只需将文本视图的背景设置为微调器图像
    • 您需要可以轻松获得的微调器图像
    • 我在想每个 android 发行版都有自己的设计。所以很难只有一个微调器图像:s
    • 这样您就可以设置自己的与应用程序主题匹配的自定义图像
    【解决方案2】:

    如果有人需要,这是我使用的代码:

    首先,将您的微调器替换为以下代码部分:

    <RelativeLayout
        android:layout_width="190dp"
        android:layout_height="40dp"
        android:layout_marginRight="5dp">    
    
        <Spinner 
            android:id="@+id/spinner"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:background="@drawable/custom_spinner"
            android:visibility="invisible" />
    
        <Button
            android:id="@+id/fake_btn"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/custom_spinner" />
    
        <TextView
            android:id="@+id/fake_text"
            android:layout_width="140dp"
            android:layout_height="40dp"
            android:layout_marginLeft="10dp"
            android:gravity="center_vertical"
            android:textColor="#000000" />
    
    </RelativeLayout>
    

    在您的可绘制文件夹中创建一个名为 custom_spinner.xml 的新 XML 文件并放入该代码:

    <?xml version="1.0" encoding="utf-8"?>
    
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
         <item
             android:state_focused="true" 
             android:state_pressed="false" 
             android:drawable="@drawable/spinner_pressed" />
    
        <item
            android:state_focused="true" 
            android:state_pressed="true"
            android:drawable="@drawable/spinner_pressed" />
    
        <item
            android:state_focused="false" 
            android:state_pressed="true"
            android:drawable="@drawable/spinner_pressed" />
    
        <item
            android:drawable="@drawable/spinner_normal" />
    
    </selector>
    

    下载这两张图片并将它们添加到您的可绘制文件夹中(spinner_pressed.9.pngspinner_normal.9.png):

    在您的活动中,添加以下变量:

    private Spinner spinner;
    private Button fake_btn;
    private TextView fake_text;
    

    在onCreate方法中,添加:

    spinner = (Spinner) findViewById(R.id.spinner);
    fake_btn = (Button) findViewById(R.id.fake_btn);
    fake_text = (TextView) findViewById(R.id.fake_text);
    
    fake_btn.setOnClickListener(new OnClickListener() {
        public void onClick(View v)
        {
            spinner.performClick();
        }
    });
    
    spinner_manual.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView parentView, View childView, int position, long id)
        {           
            String value = (String) spinner.getItemAtPosition(position);
            fake_text.setText(value);
        }
        public void onNothingSelected(AdapterView parentView) {}  
    });
    

    你在这里,它应该可以工作。

    【讨论】:

    • 这段代码有点不完整,你没有按照 Vipin 的建议添加替换值的代码。我仍然通过这个解决了我的问题,所以向你们俩+1 :)
    猜你喜欢
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多