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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

Q&A

解決済

1回答

3208閲覧

Android7.0からContextMenuのヘッダー仕様が変わった?

SmartBuzz

総合スコア81

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

0グッド

0クリップ

投稿2016/12/01 04:25

編集2016/12/15 00:24

Android 6.0までの仕様ではContextMenuHeaderに独自にLiniearLayoutを継承したクラスを作成し、そこでテキストヘッダーにテキストをセットして3列の情報を表示していましたが、Android 7.0で使ってみると、ヘッダーテキストに正常にされていません。

なので、7.0で何か変わったというような情報があれば教えてください。
リファレンスと照らし合わせてみましたが、間違えている様子はないようで…。

どうすれば、Android7.0にも対応できるか教えてください。
よろしくお願いします。

独自クラス

java

1public class ContextMenuHeader extends LinearLayout { 2 private TextView title; 3 private TextView title1; 4 private TextView title2; 5 6 private LayoutInflater layoutInflater; 7 8 /*==========================================================================* 9 * Constructor 10 * =========================================================================*/ 11 public ContextMenuHeader(Context context) { 12 super(context); 13 layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 14 View root = layoutInflater.inflate(R.layout.customview_context_menu_header, this, true); 15 title = ((TextView)root.findViewById(R.id.text_header_title)); 16 title1 = ((TextView)root.findViewById(R.id.text_header_title1)); 17 title2 = ((TextView)root.findViewById(R.id.text_header_title2)); 18 } 19 20 /*==========================================================================* 21 * public methods 22 * =========================================================================*/ 23 public void setTitle(String title, String title1, String title2) { 24 this.title.setText(title); 25 this.title1.setText(title1); 26 this.title2.setText(title2); 27 }

呼び出し元

java

1 @Override 2 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 3 AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; 4 // タイトル 5 ContextMenuHeader contextMenuHeader = new ContextMenuHeader(getContext()); 6 menu.setHeaderView(contextMenuHeader); 7 8 contextMenuHeader.setTitle("title"); 9 contextMenuHeader.setTitle1("title1"); 10 contextMenuHeader.setTitle2("title2"); 11 12 //メニューボタン 13 menu.add(0, MENU_ITEM_ID_EDIT, 0, R.string.edit); 14 menu.add(0, MENU_ITEM_ID_DELETE, 0, R.string.deleate); 15 16 17 }

xml

1customview_context_menu_header.xml 2<?xml version="1.0" encoding="utf-8"?> 3<RelativeLayout 4 xmlns:android="http://schemas.android.com/apk/res/android" 5 android:layout_width="match_parent" 6 android:layout_height="wrap_content"> 7 8 <LinearLayout 9 android:id="@+id/context_menu_header" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:layout_centerVertical="true" 13 android:paddingTop="@dimen/text_padding" 14 android:paddingLeft="@dimen/text_padding" 15 android:orientation="vertical"> 16 17 <TextView 18 android:id="@+id/text_header_title" 19 android:layout_width="wrap_content" 20 android:layout_height="wrap_content" 21 android:textSize="@dimen/font_size_title" 22 android:text="title1"/> 23 24 <LinearLayout 25 android:layout_width="match_parent" 26 android:layout_height="wrap_content"> 27 28 <TextView 29 android:id="@+id/label_header_title2" 30 android:layout_width="wrap_content" 31 android:layout_height="wrap_content" 32 android:textSize="@dimen/font_size_subheading" 33 android:text="@string/label_title2"/> 34 35 <TextView 36 android:id="@+id/text_header_title2" 37 android:layout_width="wrap_content" 38 android:layout_height="wrap_content" 39 android:layout_toRightOf="@+id/label_header_" 40 android:paddingLeft="@dimen/text_padding" 41 android:textSize="@dimen/font_size_subheading" 42 android:text="title2"/> 43 44 </LinearLayout> 45 46 <LinearLayout 47 android:layout_width="match_parent" 48 android:layout_height="wrap_content"> 49 50 <TextView 51 android:id="@+id/label_header_title3" 52 android:layout_width="wrap_content" 53 android:layout_height="wrap_content" 54 android:textSize="@dimen/font_size_subheading" 55 android:text="@string/label_title3"/> 56 57 <TextView 58 android:id="@+id/text_header_title3" 59 android:layout_width="wrap_content" 60 android:layout_height="wrap_content" 61 android:layout_toRightOf="@+id/label_header_title3" 62 android:paddingLeft="@dimen/text_padding" 63 android:textSize="@dimen/font_size_subheading" 64 android:text="title3"/> 65 66 </LinearLayout> 67 </LinearLayout> 68</RelativeLayout>

Android 6.0以前
イメージ説明

Android 7.0
イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yona

2016/12/13 01:52

バージョン毎の画面キャプチャを追記してください。
SmartBuzz

2016/12/13 02:57

ありがとうございます。キャプチャを追加しました。質問の通りどちらもコードは同じです。
guest

回答1

0

ベストアンサー

デフォルトで適用されるテーマの変更によりタイトルが非表示になったのかもしれません。

通常のタイトルをsetTitleで表示してみてください。

投稿2016/12/13 03:28

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SmartBuzz

2016/12/13 03:47

menu.setHeaderTitleだと、指定した文字列が表示されます。
yona

2016/12/13 05:46

外れましたね。 setHeaderTitleを行なった後にsetHeaderViewを行うとどうなりますか?
SmartBuzz

2016/12/13 07:56

何も表示されなくなり、ボタン2つだけ表示になりました。
yona

2016/12/13 12:57 編集

またハズレですね。 customview_context_menu_header.xmlの内容を質問に追記してください。
SmartBuzz

2016/12/14 00:24

追記しました。 宜しくお願いします。
yona

2016/12/14 02:16

追記されていないようです。
SmartBuzz

2016/12/14 03:54

分かりにくく申し訳ありません。 画像の下に追記しました。
yona

2016/12/14 04:03

あれ、Android7.0の画面キャプチャの後ですか? こちらには表示されていないですね。
SmartBuzz

2016/12/14 04:07

はい、キャプチャの後です。 バグでしょうか…。 質問の右上にある「質問編集履歴」にも出ているので更新はできていると思うのですが…。
fuzzball

2016/12/14 04:17

スマホ表示だと見えないですね。
yona

2016/12/14 04:26

私もスマホですね。 呼び出し元のコードの後に入れるとどうでしょう。
SmartBuzz

2016/12/14 04:31

記載場所を変更してみました。
yona

2016/12/14 04:50

表示されました。 自信はありませんが、LinearLayoutのandroid:layout_height="wrap_content"に100dpとしてみるとどうなりますか?
SmartBuzz

2016/12/14 04:56

<LinearLayout android:id="@+id/context_menu_header" android:layout_width="match_parent" android:layout_height="100dp" android:layout_centerVertical="true" android:paddingTop="@dimen/text_padding" android:paddingLeft="@dimen/text_padding" android:orientation="vertical"> こういう事でしょうか?状況変わらずでした…。
yona

2016/12/14 11:59

またダメですか。 contextMenuHeaderはコンテキストメニューのヘッダーですよね? menu.setHeaderViewに渡すのはわかりますが、registerForContextMenuに渡しているのは何故でしょう。
SmartBuzz

2016/12/15 00:23

はい、コンテキストメニューのヘッダーです。 registerForContextMenuに渡しているのは、Viewを持っていたので渡していました。 今試してみると、この表記を削除してみても6.0以前では表示され、7.0では表示されないという状況には変わらないです。 なので、この部分は削除しますので、質問のコードも編集します。
yona

2016/12/15 04:20

原因が絞れないですねorz setTitleの中で全てのView(LinearLayout,TextView)に対してgetVisiblityを出力して見てください。
SmartBuzz

2016/12/15 04:40

6.0以前、7.0同様にVISIBLEになっていました。 setVisiblityをあえて書いてVISIBLEを入れてみましたが、それでも特に変わりはありませんでした…。
yona

2016/12/15 06:11

getHeightやgetMesuredHeightはどうですか?
SmartBuzz

2016/12/15 06:46

全ての値が両方とも0になってますね…。
yona

2016/12/15 07:07

両方ですか。ViewをViewとして使っていないのかもしれないですね。 LinearLayoutに対してgetParentを行うとどうなりますか? こちらでも実装してみます。 すこし時間をください。
SmartBuzz

2016/12/15 07:44

onCreateContextMenuの中で、getParentをしてみましたが、状況変わらずでした。 お手数ですが、よろしくお願いいたします…!
yona

2016/12/15 14:47 編集

色々やって見ました。 ・普通のTextViewなら表示されるかも。→ダメでした、レイアウトファイルやカスタムViewを使っていることは表示されないことには関係ないようです。 ・Activityのタイトル無しのThemeが引き継がれているのかもしれないので、Themeを変えてみる。→ダメでした、Activityにタイトルバーは表示されたがコンテキストメニューには表示されなかった。 ・menuリソースからインフレートしたものを使う。→ダメでした。 思い付く限りやりましたが表示されないですね。質問者の考えている通りコンテキストメニューのヘッダーを装飾する方法が排除されたのかもしれません。
SmartBuzz

2016/12/16 00:26

なるほど…。調査ありがとうございます! 別の方法でコンテキストメニューのヘッダーを装飾する方法を検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問