問題
在actionbar中使用了自定義佈局,然後在activity中重寫了onCreateOptionsMenu(Menu menu),但是在真機運行時在actionbar右邊看不到overflow button和顯示下拉菜單(skd api 14)。
部分代碼:
AndroidManifest.xml
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
styles.xml
<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/ActionBar_custom</item>
</style>
<style name="ActionBar_custom" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#009afc</item>
<item name="android:displayOptions">showCustom</item>
<item name="android:customNavigationLayout">@layout/custome_action_bar</item>
</style>
custome_action_bar.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#009afc"
android:orientation="vertical" >
<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:gravity="center"
android:text="Title"
android:textColor="#fff"
android:textSize="18sp" />
</LinearLayout>
MainActivity.class
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:alph="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/menu_search"
android:icon="@android:drawable/ic_menu_search"
android:orderInCategory="100"
android:showAsAction="ifRoom|collapseActionView"
android:title="Settings"/>
<item
android:id="@+id/menu_settings"
android:icon="@android:drawable/ic_menu_add"
android:orderInCategory="100"
android:showAsAction="never"
android:title="Settings"/>
</menu>
android真機運行後,actionbar中無法顯示overflow button,按下menu鍵會在屏幕下方顯示菜單,效果圖如下:
之後,我在activity中加入強制顯示overflow button的代碼
private void setOverflowShowingAlways() {
// TODO Auto-generated method stub
try {
ViewConfiguration configuration = ViewConfiguration.get(this);
Field menuField = ViewConfiguration.class
.getDeclaredField("sHasPermanentMenuKey");
menuField.setAccessible(true);
menuField.setBoolean(configuration, false);
} catch (Exception e) {
// TODO: handle exception
}
}
然後並沒有作用,嘗試把custome_action_bar.xml中TextView的id屬性去掉或改變後,再次運行發現actionbar右邊出現了overflow button和菜單欄(下圖)。
在一篇blog中提到actionbar的一般佈局(下圖)是這樣的,爲什麼更改或去掉textview的id屬性會這樣,之前公司app中用的是自定義actionbar佈局,而且其中textview(android:id="@android:id/title")和imageview(android:id="@android:id/home")中id屬性是android默認佈局中控件的id屬性。怎麼樣能夠讓overflow button顯示出來,而不是通過menu鍵在屏幕下方顯示?
(該圖片來源:http://blog.csdn.net/job_hesc/article/details/44409405)
ringa_lee