アプリで ActionBarCompat を使用しています。アクション バーに 1 つまたは 2 つの項目を表示したい
Google開発者のガイドに従いましたが、テストすると、「オーバーフロー」オプション(Nexus 4の場合)に項目が表示され、存在する場合はメニューボタンをタップすると(例:Galaxy S3)
私は何を間違っていますか?
解決策が見つかりました
あなたは答えでそれを見つけることができます。
アプリで ActionBarCompat を使用しています。アクション バーに 1 つまたは 2 つの項目を表示したい
Google開発者のガイドに従いましたが、テストすると、「オーバーフロー」オプション(Nexus 4の場合)に項目が表示され、存在する場合はメニューボタンをタップすると(例:Galaxy S3)
私は何を間違っていますか?
解決策が見つかりました
あなたは答えでそれを見つけることができます。
私は同じ問題を抱えていて、2つの解決策を見つけました:
メニュー xml (Login.xml) で、showAsAction タグにアプリ名を使用します。
それ以外の:
<item
android:id="@+id/action_register"
android:showAsAction="always"
android:icon="@drawable/some_icon"
android:title="@string/login_menu_register" />
使用する:
<item
android:id="@+id/action_register"
yourappname:showAsAction="always"
android:icon="@drawable/some_icon"
android:title="@string/login_menu_register" />
アプリケーションの名前が怪しいと思います。
私にとっての2番目の解決策は、アクティビティクラスの onCreateOptionsMenu() にあります
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(
getMenuInflater().inflate(R.menu.main, menu);
MenuItem registerMenuItem = menu.findItem(R.id.action_register);
registerMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); // change this in backcompat
return true;
}
backCompatibility を使用している場合は、最後の行を変更します。
MenuItemCompat.setShowAsAction(registerMenuItem,MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
解決策を見つけたので、回答として投稿しました:
解決策が見つかりました
actionbarcompat を機能させるには、メニューの xml に新しい名前空間を配置する必要があります。そのため、「android」の代わりにこのスペース名が必要なオプションがいくつかあります。したがって、解決策は次のとおりです。
古いログイン メニュー:
<item
android:id="@+id/action_register"
android:showAsAction="always"
android:title="@string/login_menu_register"/>
新しいログイン メニュー (解決策) (「showAsAction」と呼ばれる方法を見てください)
<item
android:id="@+id/action_register"
shudy:showAsAction="always"
android:title="@string/login_menu_register"/>
ログイン.xml (メニュー)
<item
android:id="@+id/action_register"
android:showAsAction="always"
android:title="@string/login_menu_register"/>
<item
android:id="@+id/action_register2"
android:showAsAction="always"
android:title="miau"/>
LoginActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SLog.d(CLASS_NAME + " onCreate()");
setContentView(R.layout.activity_login);
actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
findViews();
buttons();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.login, menu);
return true;
}
マニフェスト
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
<activity
android:name="com.shudy.myworld.LoginActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
この問題を解決するには 2 つの方法があります。
または 2. ライブラリ「android-Support-v7」を追加する必要があります。この方法を選択した場合、menu.xml は次のようにする必要があります。
<?xml version="1.0" encoding="UTF-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:v7="http://schemas.android.com/apk/res-auto" >
<item
android:id="..."
android:icon="..."
android:showAsAction="always"
android:title="..."
v7:showAsAction="always"/>
</menu>
<item
android:id="@+id/ok"
android:icon="@drawable/ic_ok"
android:orderInCategory="0"
android:showAsAction="ifRoom"
android:title="OK"/>
アクションバーに表示できるように、これらのアクションのアイコンを提供する必要があると思います。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:shudy="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_register"
android:showAsAction="always"
android:icon="@drawable/some_icon"
android:title="@string/login_menu_register" />
<item
android:id="@+id/action_register2"
android:showAsAction="always"
android:icon="@drawable/some_icon2"
android:title="miau" />
</menu>
質問は回答を含むように更新されていますが、公式ドキュメントに興味がある人はhttp://developer.android.com/guide/topics/ui/actionbar.html#ActionItemsを参照し、特に注記に注意してください。showAsAction
属性のカスタム名前空間の使用について。