如何在工具箱中实现微调器的材料设计?我试过以下但我的微调器看起来像这样
<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的扩展。
任何链接都会有很大的帮助
更新
我设法实现了我想要的目标
我用过这个
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>
但如何将其设为白色并且菜单的文字颜色为蓝色? 我也有这个问题。它似乎太遥远了?任何方法来修复此下拉箭头?
更新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);
我遇到的唯一问题是按下状态不起作用,它只是一个白色的平面。如果你在另一个弹出菜单上看到,当你点击一个项目时,背景颜色变得有点暗。此烦人的图标离文字太远了。
答案 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();
}
});