我在使用v7工具栏时遇到了困难。曾经是ActionBar
的简单任务,现在看起来过于复杂。无论我设置什么样的风格,我都无法更改导航图标(打开抽屉)或溢出菜单图标(打开菜单)。
所以我有Toolbar
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/ghex"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Light"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
>
我的代码看起来像这样
//before in the code I do
mToolbar = (Toolbar) findViewById(R.id.toolbar);
private void initToolbar() {
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
现在,我需要为这两个图标更改Drawable
。
我如何为compat v7 Toolbar
执行此操作?我想在抽屉打开时我需要更改箭头(Android 5.0)。
答案 0 :(得分:104)
要更改导航图标,您可以使用:
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.my_icon);
要更改溢出图标,您可以定义如下样式:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
<item name="actionOverflowButtonStyle">@style/OverFlow</item>
</style>
<style name="OverFlow" parent="Widget.AppCompat.ActionButton.Overflow">
<item name="android:src">@drawable/my_overflow_menu</item>
</style>
在任何情况下,更改标准图标(如溢出菜单)都不是一个好主意。
如果您想更改可以使用的图标的颜色:
<android.support.v7.widget.Toolbar
app:theme="@style/ThemeToolbar" />
<style name="ThemeToolbar" parent="Theme.AppCompat.Light">
<!-- navigation icon color -->
<item name="colorControlNormal">@color/my_color</item>
<!-- color of the menu overflow icon -->
<item name="android:textColorSecondary">@color/my_color</item>
</style>
答案 1 :(得分:18)
mToolbar.setNavigationIcon(R.mipmap.ic_launcher);
mToolbar.setOverflowIcon(ContextCompat.getDrawable(this, R.drawable.ic_menu));
答案 2 :(得分:4)
对于右侧菜单,您可以这样做:
public static Drawable setTintDrawable(Drawable drawable, @ColorInt int color) {
drawable.clearColorFilter();
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
drawable.invalidateSelf();
Drawable wrapDrawable = DrawableCompat.wrap(drawable).mutate();
DrawableCompat.setTint(wrapDrawable, color);
return wrapDrawable;
}
在你的活动中
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_profile, menu);
Drawable send = menu.findItem(R.id.send);
Drawable msg = menu.findItem(R.id.message);
DrawableUtils.setTintDrawable(send.getIcon(), Color.WHITE);
DrawableUtils.setTintDrawable(msg.getIcon(), Color.WHITE);
return true;
}
结果如下:
答案 3 :(得分:2)
如果我们只需要改变汉堡包/背面图标的颜色,那么有一种简单,简单和更好的方法。
最好只更改所需图标的颜色,而colorControlNormal
和android:textColorSecondary
也可能影响工具栏的其他子视图。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@android:color/white</item>
</style>
答案 4 :(得分:1)
上述所有解决方案都适用于API 21或更高版本,但未在API 19(KitKat)中使用。在早期版本中,做一个小改动对我来说是个窍门。请注意Widget.Holo
而不是Widget.AppCompat
<style name="OverFlowStyle" parent="@android:style/Widget.Holo.ActionButton.Overflow">
<item name="android:src">@drawable/ic_overflow</item>
</style>
答案 5 :(得分:1)
在此行添加默认主题;
<item name="colorControlNormal">@color/my_color</item>
答案 6 :(得分:1)
如果您想将图标更改为矢量,请创建一个新图标。
然后在你的Activity.java
:
Toolbar toolbar = findViewById(R.id.your_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationIcon(R.drawable.your_icon);
mToolbar.setOverflowIcon(ContextCompat.getDrawable(this, R.drawable.your_icon2));
要更改矢量图标颜色,请转到矢量XML文件 ..在这种情况下,它将是your_icon.xml
,它将如下所示:< / p>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/Your_Color"
android:pathData="M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z"/>
请注意,我们使用这些属性来设置Vector的颜色:
android:fillColor="@color/Your_Color"
编辑:您无法使用colors.XML或其他地方的颜色,颜色必须直接在Vector的XML文件中进行贴图..所以它看起来像这样:
android:fillColor="#FFF"
答案 7 :(得分:0)
如果您想更改菜单项图标,箭头图标(后退/上移)和3点图标,您可以使用android:tint
<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:tint">@color/your_color</item>
</style>
答案 8 :(得分:0)
您在活动中使用的主题添加以下一行代码
白色
Eigen::Vector2d distort(Eigen::Vector2d & pointUndistorted);
int main(int argc, char** argv) {
cv::Mat image, dst;
image = cv::imread(argv[1], 1);
Eigen::Vector2d pointUndistorted;
Eigen::Vector2d pointDistorted;
int w = image.rows;
int h = image.cols;
cv::Mat map1(w,h,CV_64FC1);
cv::Mat map2(w,h,CV_64FC1);
for (int wIdx = 0; wIdx < w; ++wIdx)
{
for (int hIdx = 0; hIdx < h; ++hIdx)
{
pointUndistorted << (double)wIdx / (double)w -0.5, (double)hIdx / (double)h -0.5;
pointDistorted = distort(pointUndistorted);
map1.at<double>(wIdx,hIdx) = (pointDistorted[0] + 0.5) * h;
map2.at<double>(wIdx,hIdx) = (pointDistorted[1] + 0.5) * w;
}
}
cv::remap(image, dst, map1, map2, cv::INTER_LINEAR);
}
表示黑色
soap.createClient(wsdlpath, options, function(err, client) {
// client has all the functions i.e., client.Login
// simply iterate client keys that are functions.
for(k of Object.keys(client)){
console.log(typeof client[k]==="function" ? k : '')
}
});
答案 9 :(得分:0)
要更改选项菜单项的颜色,您可以
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.your_menu, menu)
menu?.forEach {
it.icon.setTint(Color.your_color)
}
return true
}
答案 10 :(得分:-1)
要显示图标,请使用getSupportActionBar().setIcon(R.xxx.xxx)
就我而言,代码是: -
getSupportActionBar().setIcon (R.mipmap.ic_launcher);