簡體   English   中英

Android菜單換行符

[英]Android menu line break

我有以下Android菜單XML文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/programma"
          android:icon="@android:drawable/ic_menu_agenda"
          android:title="@string/programma" />
    <item android:id="@+id/settings"
          android:icon="@android:drawable/ic_menu_preferences"
          android:title="@string/settings" />
    <item android:id="@+id/help"
          android:icon="@android:drawable/ic_menu_help"
          android:title="@string/help" />
</menu>

這使我在一行上具有三個菜單按鈕。 但是,我想將它們分為兩行,第一行有2個按鈕,而整行則有幫助按鈕。 我已經嘗試過將前兩個分組,但這並不能解決問題。 如何在XML中強制換行?

據我所知,沒有辦法在菜單中強制換行。 如果考慮某些情況,這實際上是有意義的。

例如,假設您的平板電腦(例如Galaxy Tab)以橫向放置。 它具有很大的水平空間和相對較小的高度。 因此,如果在這種情況下強行換行,將浪費空間。

在此處輸入圖片說明


我對此進行了更多調查。 有一個稱為MenuBuilder的類,用於管理選項菜單。 它使用icon_menu_layout布局資源繪制菜單。 是此資源:

<com.android.internal.view.menu.IconMenuView
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+android:id/icon_menu"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:rowHeight="66dip"
   android:maxItems="6"
   android:maxRows="2"
   android:maxItemsPerRow="6" />

而且,如果您遵循IconMenuView實現,則會發現一個有趣的函數,稱為layoutItems ,該函數用於計算菜單項的布局。 您只能通過人為地增加菜單項的寬度來影響此功能的邏輯。 沒有換行符。

private void layoutItems(int width) {
    int numItems = getChildCount();
    if (numItems == 0) {
        mLayoutNumRows = 0;
        return;
    }

    // Start with the least possible number of rows
    int curNumRows =
            Math.min((int) Math.ceil(numItems / (float) mMaxItemsPerRow), mMaxRows);

    /*
     * Increase the number of rows until we find a configuration that fits
     * all of the items' titles. Worst case, we use mMaxRows.
     */
    for (; curNumRows <= mMaxRows; curNumRows++) {
        layoutItemsUsingGravity(curNumRows, numItems);

        if (curNumRows >= numItems) {
            // Can't have more rows than items
            break;
        }

        if (doItemsFit()) {
            // All the items fit, so this is a good configuration
            break;
        }
    }
}

因此,例如,如果增加第一項的寬度,則菜單中將顯示兩行。 但這可能是不可取的,因為您無法預測將在不同設備上使用的文本樣式,大小和字體。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM