Android Spinner工具栏样式

时间:2014-11-25 03:28:51

标签: android android-layout material-design

如何在工具箱中实现微调器的材料设计?我试过以下但我的微调器看起来像这样

enter image description here

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:background="@color/main_color"
    app:contentInsetLeft="14dp"
    app:contentInsetRight="14dp"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar">

    <Spinner
        android:id="@+id/spinner_nav"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</android.support.v7.widget.Toolbar>

我的最低sdk是15.

在我的onCreate

ButterKnife.inject(this);

    mToolbar.inflateMenu(R.menu.menu_login);
    mToolbar.setTitle(R.string.sign_in);
    mToolbar.setOnMenuItemClickListener(this);

    SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(this,
            R.array.options, android.R.layout.simple_spinner_dropdown_item);

    mSpinner.setAdapter(spinnerAdapter);
    mSpinner.setOnItemSelectedListener(this);
  

菜单是一张临时的纸张,总是与App Bar重叠,   而不是表现为App Bar的扩展。

任何链接都会有很大的帮助

更新

我设法实现了我想要的目标

enter image description here

我用过这个

 ButterKnife.inject(this);

        mToolbar.setTitle(R.string.sign_in);
        setSupportActionBar(mToolbar);

        SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
                R.array.options, android.R.layout.simple_spinner_dropdown_item);

        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        getSupportActionBar().setListNavigationCallbacks(spinnerAdapter, this);

和我的xml

  <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:background="@color/app_secondary_color"
        app:contentInsetLeft="14dp"
        app:contentInsetRight="14dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar">

    </android.support.v7.widget.Toolbar>

但如何将其设为白色并且菜单的文字颜色为蓝色? 我也有这个问题。它似乎太遥远了?任何方法来修复此下拉箭头?

enter image description here

更新2

在花了这么多时间尝试之后,我已经实现了如何使其变白并且文本颜色变黑 通过这个。我已经为下拉样式创建了自定义布局

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

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:background="@color/background_material_light"
    android:textColor="@color/abc_primary_text_material_light"
    android:layout_height="48dp"
    android:ellipsize="marquee"/>

然后在我的oncreate上添加了这段代码

 spinnerAdapter.setDropDownViewResource(R.layout.custom_simple_spinner_dropdown_item);

我遇到的唯一问题是按下状态不起作用,它只是一个白色的平面。如果你在另一个弹出菜单上看到,当你点击一个项目时,背景颜色变得有点暗。此烦人的图标离文字太远了。

4 个答案:

答案 0 :(得分:0)

您应该制作color state list resource并将其作为CheckedTextView的背景应用。至于箭头图标太远,AFAIK由于孩子的长度,它一直到最长的孩子。所以,没办法自定义。

答案 1 :(得分:0)

尝试使用此代码更改Spinner的第一项字体颜色或背景颜色

Spinner spinner = findViewById(R.id.spn);
        ArrayList<String> lst = new ArrayList<>();
        lst.add("Android");
        lst.add("Iphone");
        lst.add("Windows");

        ArrayAdapter<String> adapter = new ArrayAdapter<String >(getApplicationContext(),R.layout.spin_item,lst)
        {
            public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent)
            {
                View v = null;

                if (position == 0) {
                    TextView tv = new TextView(getContext());
                    tv.setTextColor(Color.parseColor("#007f00"));
                    v = tv;
                }
                else {

                    v = super.getDropDownView(position, null, parent);
                }
                return v;
            }
        };
        spinner.setAdapter(adapter);

答案 2 :(得分:0)

如果您想使按状态起作用,则应添加一个Drawable选择器,而不要使用颜色作为背景。 选择器示例:

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

    <item android:drawable="@drawable/numpad_button_bg_selected" android:state_selected="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_normal"></item>

</selector>

答案 3 :(得分:0)

我们可以使用 PopupWindow 通过 showAsDropDown ()在给定视图上显示视图/旋转器。

 LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
                @SuppressLint("InflateParams")
                View popupView = layoutInflater.inflate(R.layout.menu_logout, null);
                PopupWindow popupWindow = new PopupWindow(popupView, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                popupWindow.setOutsideTouchable(true);
                popupWindow.setFocusable(true);
                popupWindow.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT);
                popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                popupWindow.showAsDropDown(logoutParent);

                TextView textView = popupView.findViewById(R.id.menu);
                textView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                        doLogoutWork();

                    }
                });