我如何ellipize MenuItem?

时间:2014-03-13 18:07:45

标签: android

我需要缩小每个菜单项的结尾。如何将menuItem中的textView定位到setEllipsize

SubMenu sm = menuItem.getSubMenu();
for (int i = 0; i < sm.size(); i++) {
   MenuItem mi = sm.getItem(i);
}

2 个答案:

答案 0 :(得分:0)

如果从XML定义MenuItem,您可以使用android:actionLayout更改MenuItem的布局。所以你有:

<item android:id="@+id/button_id"
      android:icon="@drawable/icon"
      android:showAsAction="always"
      android:actionLayout="@layout/action_button"
      android:title="@string/text"/>

然后在 layout / action_button 中,您可以:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:layout_height="match_parent"
   android:ellipsize="end"
   ... 
   whatever other styles you need to set
   ...
   />

请记住,如果你这样做,可能需要自己触发onOptionsItemSelected(例如,如果您正在使用ActionBarSherlock)。要做到这一点,请执行以下操作:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // inflate your menu
    ...
    // Get the MenuItem of interest
    final MenuItem item = menu.findItem(R.id.button_id);
    item.getActionView().setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            onOptionsItemSelected(item);
        }
    });
}

答案 1 :(得分:0)

请阅读以下链接,其中包含有关何时省略MenuItem标题的重要信息:

When to use ellipsis after menu items

不幸的是,我没有像TextView方法setEllipsize()那样找到ellpsize MenuItem标题的选项,但是如果它真的是你必须做的事情,你可以轻松解决它:

SubMenu sm = menuItem.getSubMenu();
    String title = "";
    for (int i = 0; i < sm.size(); i++) {
        MenuItem mi = sm.getItem(i);
        title = mi.getTitle().toString();
        if (title.length() > 10) {
            String truncated = title.subSequence(0, title.length() - 3).toString().concat("...");
            mi.setTitle(truncated);
        }
    }