質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Android

    7301questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4300questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • XML

    760questions

    XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

【xml, android studio】アクション・バーにアイコンを設定したら動作しなくなった

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 611

pecchan

score 242

Android Studio3.1.3
Windows7 pro
にて初めてAndroidアプリを勉強してます。

書籍を頼りにアクション・バーを勉強してます。

アクション・バーの呼び出し部分を、アイコンに変更したら、
タッチしてもメニューが表示されないようになりました。

画面の右上の、赤丸で囲った部分です。
アイコンに変更する前は動作してました。

Java側は、自動生成されたソースからまだ一切手を加えてません。

どこ原因でしょうか?
分かる方教えて下さい。
よろしくお願い致します。

イメージ説明

app\src\main\res\menu\menu_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="com.example.administrator.myapplication.MainActivity">
    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/ic_action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="ifRoom" />

</menu>

app\src\main\res\layout\content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

app\src\main\res\values\strings.xml

<resources>
    <string name="app_name">My Application</string>
    <string name="action_settings">設定</string>
</resources>

app\src\main\java\com\example\administrator\myapplication\MainActivity.java

package com.example.administrator.myapplication;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

2018/08/21 更新
アイコンを設定する前のxml

android:icon="@drawable/ic_action_settings"
を付け加えたのと、
app:showAsActionを、neverから ifRoomに変更しました。

ソースの変更はこの2行だけです。 

app\src\main\res\menu\menu_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="com.example.administrator.myapplication.MainActivity">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />
</menu>

【気付いたこと】
今気付いたのですが、(アイコン設定後の画面は)タップでは反応しないのですが、
長押しで反応しました。
なぜ、アイコンにすると長押しでの反応になるのでしょう・・・?
設定前と同じくタップで反応させたいのですが・・・。

2018/08/22 追加
実機で動作確認してます。
実機は、
HUAWEI Honor 6 Plus PE-TL10 
Androidバージョンは、5.1.1 です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kakajika

    2018/08/21 10:54

    どんな動作を期待されているのでしょうか?現コードを見る限りはコードの通りに動いているとしか言えないので、変更前のコードとの差分を貼っていただくのがよさそうです。

    キャンセル

  • pecchan

    2018/08/21 16:19

    アクションバーをタップしてメニューを呼び出したいのです。ソース自体は、変更しておりません。プロジェクトビューからdrawableフォルダを右クリック→New→Image Assetにて画像を設定して以降、タップしても動作しなくなりました。

    キャンセル

  • kakajika

    2018/08/21 16:54 編集

    すみません、伝わりにくかったかもしれませんがコードというのはxmlも含みます。おそらくmenu_main.xmlの内容をなにか変更されたのではないでしょうか?

    キャンセル

  • pecchan

    2018/08/21 17:08

    こちらこそすいません。はい。xml一部修正しましたので更新させていただきます。

    キャンセル

回答 1

checkベストアンサー

+1

メニューの階層についてちょっと勘違いがあるようです。
おそらくやりたいことはサブメニューを表示したいということだと思います。

ActionBarのメニューは横並びにボタンが並ぶもので、これがメニューの1階層目です。このうちどれかを選択したときに更にメニューを表示したいのだとしたら、それは2階層目のサブメニューということになります。

例外として、メニューの項目が多すぎて横並びに入りきらない場合や app:showAsAction="never" を指定した場合は、ActionBarの右端にオーバーフローメニュー(3つの点のアイコン)のサブメニューとして表示されます。変更前のコードでサブメニューとして表示されていたのはこのためです。

サブメニューを実現したいのであれば、menu_main.xmlで以下のように2階層目のmenuを用意しましょう。

<menu ...>
    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/ic_action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="ifRoom">

        <!-- このmenuがアイコンをタップした際に表示されるサブメニューを表す -->
        <menu>
            <item
                android:id="@+id/action_settings_sub1"
                android:title="@string/action_settings_sub1" />
            ...
        </menu>
    </item>
</menu>

ちなみに、アイコンを長押しするとメニューのtitleが表示されますが、これはアイコンだけでは何のアクションなのかわかりにくい場合の回避策として用意されているものです。あまりユーザーには浸透していない気もしますが。。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/22 10:23

    有難う御座います。

    恐れ入ります。階層構造を作りたいのではありません。
    ルートのみになります。

    プロジェクトを再作成したり、アイコン画像を変えたりしましたが、やはり現象変わりません。
    以下の手順を行いました。

    1.新規プロジェクト作成、アクティビティのテンプレートで「Basic Activity」を選択。
    2.いったんアクションバーが動作することを確認。
    3.プロジェクトビュー→drawableを右クリック→New→Image Assetからアイコン(PNG)を登録
    4.登録したアイコン名を、xml側に追加するため、menu_mail.xmlに android:icon="@drawable/ic_action_settings"の1行を追加。

    アイコンをタッチすると反応自体はしているようです。
    ※タッチすると丸い影が外側に広がるため

    キャンセル

  • 2018/08/22 15:49

    うーんと、タッチしても動作しないというのは、何を基準に判断されているのでしょう?現コードでもアイコンのタップ時にonOptionsItemSelectedメソッド(メニューの項目が選択された時のイベント)は呼ばれているはずです。

    キャンセル

  • 2018/08/22 17:49 編集

    度々すいません。
    動作しない→strings.xmlに追加した「設定」という文字が表示されない
    ということです。
    アイコンに変更する前は表示されました。

    キャンセル

  • 2018/08/22 18:13 編集

    その「設定」という文字が表示されているのがサブメニューです。(正確に言うと、回答の方で説明したとおり app:showAsAction="never" を指定したためにオーバーフローメニューのサブメニューとして表示されているものです)

    変更前のコードでアイコンを設定せずに app:showAsAction="ifRoom" にして動かしてみてください。アクションバー上に文字が表示されると思います。これが通常の1階層目のメニューです。アイコンの設定は関係ないです。

    キャンセル

  • 2018/08/23 05:28

    有難う御座います。

    おっしゃる通り、想像していた動作を勘違いしておりました。
    勉強になりました。

    最後まで親切にお付き合いいただき、本当に有難う御座います。

    キャンセル

同じタグがついた質問を見る

  • Android

    7301questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4300questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • XML

    760questions

    XMLは仕様の1つで、マークアップ言語群を構築するために使われています。