【问题标题】:How to underline TextView next to Spinner (continue Spinner background for TextView)如何在 Spinner 旁边下划线 TextView(继续 TextView 的 Spinner 背景)
【发布时间】:2019-09-16 13:11:56
【问题描述】:

我正在尝试创建这个用户界面:

也就是说,左边有一个TextView,右边有一个Spinner。两者都用单线下划线。 Spinner 默认样式已经有下划线(带有样式和背景图像)。所以任务是以某种方式继续作为 TextView 的背景。

需要你们的帮助,伙计们!

【问题讨论】:

    标签: android android-layout textview spinner styling


    【解决方案1】:

    //示例主程序

    public class MyActivity extends Activity {
    
        private Spinner spinner;
        private TextView text;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            spinner = (Spinner) findViewById(R.id.spinner);
            text = (TextView) findViewById(R.id.text);
    
            List<String> list = new ArrayList<String>();
            list.add("A");
            list.add("B");
            list.add("C");
    
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.custom_spinner_item, list);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    
            spinner.setAdapter(adapter);
    
    
        }
    }
    

    //示例 R.layout.custom_spinner_item

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1"
        style="?android:attr/spinnerItemStyle"
        android:singleLine="true"
        android:gravity="right"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="marquee" />
    

    //示例 R.layout.main

    <?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">
    
        <!--stuff-->
        <View
            android:id="@+id/anotherField1"
            android:layout_width="match_parent"
            android:layout_height="40dp" />
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="?android:spinnerStyle"
            android:addStatesFromChildren="true"
            >
    
            <TextView
                android:layout_alignParentLeft="true"
                android:id="@+id/text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Text Left" />
    
            <Spinner
                android:id="@+id/spinner"
                android:layout_alignParentRight="true"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@null"
                />
    
        </RelativeLayout>
    
        <!--stuff-->
        <View
            android:id="@+id/anotherField2"
            android:layout_width="match_parent"
            android:layout_height="40dp" />
    
    </LinearLayout>
    

    结果:

    【讨论】:

    • 感谢您的描述性回答!图片胜于文字。
    • 2 个附加问题: 1. 使用 RelativeLayout/android:addStatesFromChildren="true" 背后的想法是什么(我检查过 - 没有它也可以工作)? 2. 是否可以像屏幕narow dropdown list那样定义下拉列表的宽度?
    • 1. onClick 不会有高亮显示(恕我直言,我的设备上) 2. soory,我不知道 :(
    【解决方案2】:

    为微调器使用一个样式,你在图片中使用的样式是:

    style="@android:style/Widget.Holo.Light.Spinner"

    【讨论】:

      【解决方案3】:

      您可以为 Spinner 编写自己的 SpinnerAdapter(为此您应该 extend BaseAdapter)。实现getView() 以定义微调器显示为选定项的视图。实现getDropDownView() 以定义微调器下拉显示的视图。您可以轻松地使 getView() 返回类似 LinearLayout 的内容,以便在左侧和右侧显示文本。

      【讨论】:

      • 我想这样走。但我想要一个更简单(优雅)的解决方案,@deadfish 做到了!
      【解决方案4】:

      下面的链接对我有用。

      https://android--code.blogspot.in/2015/08/android-spinner-border-between-items.html

      res/drawable/spinner_item_border.xml

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

      然后

      <?xml version="1.0" encoding="utf-8"?>
      <TextView
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:padding="10dp"
          android:background="@drawable/spinner_item_border"
          />
      

      【讨论】:

        猜你喜欢
        • 2011-02-12
        • 2013-05-15
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 2012-11-02
        相关资源
        最近更新 更多