如何在Spinner旁边的TextView下划线(让TextView继承Spinner的背景)

4

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

hard to build UI

也就是说,左侧有一个TextView,右侧有一个Spinner,并且两者都有单线下划线。Spinner的默认样式已经有了下划线(包括样式和背景图像)。因此,任务是将其背景延续到TextView上。
需要你们的帮助!
4个回答

2

//示例主要内容

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" />

//example 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>

结果:

图片1图片2


感谢您提供详细的答案!图片胜过千言万语。 - aka_sh
2个附加问题:1.使用RelativeLayout / android:addStatesFromChildren =“true”的背后思想是什么(我已经检查过-没有它也可以运行)? 2.是否可以定义像屏幕上的那样的下拉列表的宽度[狭窄的下拉列表](http://i59.tinypic.com/28hmvch.jpg)? - aka_sh
  1. 在我的设备上,点击时不会有任何高亮(在我看来)。
  2. 抱歉,我不知道 :(
- deadfish

1

使用一个样式来定制旋转器,图片中使用的样式为:

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


0

以下链接对我有效。

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"
    />

0
你可以为Spinner编写自己的SpinnerAdapter(应该扩展BaseAdapter)。实现getView()来定义spinner在选择项目时显示的视图。实现getDropDownView()来定义spinner下拉菜单显示的视图。你可以轻松地让getView()返回类似于LinearLayout的东西,以便在左右两侧显示文本。

这是我原本想要采用的方式。但我想要一个更简单(优雅)的解决方案,@deadfish 帮我实现了! - aka_sh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接