android - Actionbar使用customNavigationLayout后,overflow button无法显示?
ringa_lee
ringa_lee 2017-04-17 17:22:09
0
0
1216

問題
在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
ringa_lee

ringa_lee

全員に返信(0)
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート