GVKun编程网logo

如何以编程方式更改ActionBar中的MenuItem图标(如何修改编程)

25

本文将介绍如何以编程方式更改ActionBar中的MenuItem图标的详细情况,特别是关于如何修改编程的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些

本文将介绍如何以编程方式更改ActionBar中的MenuItem图标的详细情况,特别是关于如何修改编程的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于android – ActionBar在按下时更改menuitem按钮的颜色、android – 在ActionBar中为MenuItem使用选择器、android – 如何以编程方式更改AppCompat v21工具栏主题?、android – 我如何以编程方式更改ActionBar menuitem文本颜色?的知识。

本文目录一览:

如何以编程方式更改ActionBar中的MenuItem图标(如何修改编程)

如何以编程方式更改ActionBar中的MenuItem图标(如何修改编程)

如何以编程方式更改ActionBar中的MenuItem图标?我尝试使用

MenuItem menuItem = (MenuItem)findViewById(R.id.action_settings);menuItem.setIcon(getResources().getDrawable(R.drawable.ic_launcher))

但这不起作用。这是我的代码:

主要活动

package com.test;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;public class MainActivity extends ActionBarActivity {    private Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button = (Button)findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                MenuItem menuItem = (MenuItem)findViewById(R.id.action_settings);                menuItem.setIcon(getResources().getDrawable(R.drawable.ic_launcher));            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        int id = item.getItemId();        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}

main.xml

<menu    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    tools:context=".MainActivity" >    <item        android:icon="@drawable/action_settings"        android:id="@+id/action_settings"        android:title="@string/action_settings"        android:orderInCategory="100"        app:showAsAction="always"/></menu>

activity_main

<LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_height="fill_parent"    android:layout_width="fill_parent">    <Button        android:id="@+id/button"        android:text="Set icon"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

这是我跑步后遇到的例外:

MenuItem menuItem = (MenuItem)findViewById(R.id.action_settings);11-09 19:52:40.471    1735-1735/com.test E/AndroidRuntime﹕ FATAL EXCEPTION: main    java.lang.ClassCastException: android.support.v7.internal.view.menu.ActionMenuItemView            at com.test.MainActivity$1.onClick(MainActivity.java:19)            at android.view.View.performClick(View.java:2485)            at android.view.View$PerformClick.run(View.java:9080)            at android.os.Handler.handleCallback(Handler.java:587)            at android.os.Handler.dispatchMessage(Handler.java:92)            at android.os.Looper.loop(Looper.java:123)            at android.app.ActivityThread.main(ActivityThread.java:3683)            at java.lang.reflect.Method.invokeNative(Native Method)            at java.lang.reflect.Method.invoke(Method.java:507)            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)            at dalvik.system.NativeStart.main(Native Method)

答案1

小编典典

您不能在onCreate()的菜单项上使用findViewById(),因为菜单布局尚未膨胀。您可以创建一个全局Menu变量,并在onCreateOptionsMenu()中对其进行初始化,然后在onClick()中使用它。

private Menu menu;

在您的onCreateOptionsMenu()中

this.menu = menu;

在按钮的onClick()方法中

menu.getItem(0).setIcon(ContextCompat.getDrawable(this, R.drawable.ic_launcher));

android – ActionBar在按下时更改menuitem按钮的颜色

android – ActionBar在按下时更改menuitem按钮的颜色

如何在按下时更改menuitem按钮的颜色.我使用SherlockActionBar,但是当它被按下时,它会改变颜色,使其对我的设计不太好.我需要改变这种颜色.

更新:

关键是当我设置drawable我放在背景上并按下按钮然后更改我的drawable附近的bckground更改.我可以改变drawable,但背景仍会改变它的颜色到丑陋的颜色.

解决方法:

您可以通过在主题中设置actionBarItemBackground属性来更改背景.这应该是一个状态列表drawable,它反映了压缩和聚焦等状态.

android – 在ActionBar中为MenuItem使用选择器

android – 在ActionBar中为MenuItem使用选择器

我正在使用ActionBarSherlock.我有一个MenuItem,我想使用只有MenuItem的自定义选择器,而不是ActionBar中的其他选择器.这是菜单代码:

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

    <item
        android:id="@+id/menu_include_location"
        android:icon="@drawable/icon_place_selector"
        android:showAsAction="always"
        android:title="@string/menu_include_location"/>

    <item
        android:id="@+id/menu_send"
        android:icon="@drawable/ic_send"
        android:showAsAction="ifRoom|withText"
        android:title="@string/menu_send"/>

</menu>

这是icon_place_selector.xml

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

    <item android:drawable="@drawable/location_place" android:state_pressed="false"/>
    <item android:drawable="@drawable/location_no_gradient" android:state_pressed="true"/>

</selector>

问题是在MenuItem中,图标只是它的一小部分.这是显示内容的屏幕截图.整个背景应该改变,而不仅仅是图标.我怎么做?

解决方法:

您可以通过在代码中设置自定义ActionView来更改特定操作栏项的选择器:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.activity_main, menu);
    MenuItem menuItem = menu.findItem(R.id.menu_include_location);
    ImageView image = new ImageView(this);
    image.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));
    image.setPadding(16, 0, 16, 0);
    image.setimageResource(R.drawable.ic_launcher);
    image.setBackgroundResource(R.drawable.icon_place_selector);
    image.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // ...
        }
    });
    menuItem.setActionView(image);
    return true;
}

如果要更改所有操作栏项的选择器,请应用这些样式:

<style name="AppTheme" parent="@style/Theme.Sherlock">
    <item name="android:selectableItemBackground">@drawable/icon_place_selector</item>
    <item name="android:actionBarItemBackground">@drawable/icon_place_selector</item>
</style>

android – 如何以编程方式更改AppCompat v21工具栏主题?

android – 如何以编程方式更改AppCompat v21工具栏主题?

这是我的工具栏xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    app:contentInsetEnd="0dp"
    app:contentInsetStart="0dp"
    android:layout_height="@dimen/toolbar_height"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    android:background="@color/primary_color">



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

我想以编程方式更改app:theme.
我该怎么做呢?

解决方法:

您可以通过编程或样式执行此操作:

Toolbar toolbar; // your toolbar
toolbar.setBackgroundColor(newColor); // i don't tested this method. Write if it's not working
toolbar.setTitleTextColor(titleColor); // if toolbar is white set title to black, if toolbar is black set title to white

或者你可以用风格来做:

添加attrs.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="toolbarStyle" format="reference"/>
</resources>

现在更改toolbar.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    app:contentInsetEnd="0dp"
    app:contentInsetStart="0dp"
    android:layout_height="@dimen/toolbar_height"
    app:theme="?attr/toolbarStyle"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    android:background="@color/primary_color">



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

在styles.xml中(如果你没有这个创建它):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyStyle.Dark" parent="AppCompat.Theme">
        <item name="toolbarStyle">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
    </style>
    <style name="MyStyle.Light" parent="AppCompat.Theme.Light">
        <item name="toolbarStyle">@style/ThemeOverlay.AppCompat.Light.ActionBar</item>
    </style>
</resources>

如果选择第二种方法(带样式),则必须重新启动活动并在super.onCreate()之前使用setTheme方法

我希望我帮助过你.

android – 我如何以编程方式更改ActionBar menuitem文本颜色?

我有一个包含多个项目的动作栏,当单击该项目时,我想更改文本的颜色.有没有办法以编程方式做这个?请提供和示例或任何资源.

谢谢

public void catalogClick(MenuItem item){
     //highlight menuitem etc.

  }

解决方法

按照此链接说明如何以编程方式更改菜单项文本.

http://developer.android.com/guide/topics/ui/actionbar.html#Style

检查android:actionMenuTextColor为文本定义样式资源.

关于如何以编程方式更改ActionBar中的MenuItem图标如何修改编程的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于android – ActionBar在按下时更改menuitem按钮的颜色、android – 在ActionBar中为MenuItem使用选择器、android – 如何以编程方式更改AppCompat v21工具栏主题?、android – 我如何以编程方式更改ActionBar menuitem文本颜色?的相关知识,请在本站寻找。

本文标签: