ActionBarSherlock(ABS):如何自定义动作模式接近项目的文本?(ActionBar

2019-07-28 19:33发布

我使用的是ABS VERS。 4,我需要简单地改变“完成”,即除了动作模式关闭图标显示的文本默认,但我真的无法弄清楚如何做到这一点。

我认为文本需要至少两个很好的理由可定制:

  • “完成”并不适用于所有的环境(例如,“取消”可能是比较合适的,我已经看到一些应用程序,如Galaxy Tab的“我的文件”的应用程序,使用它)

  • “完成”需要根据用户的语言进行本地化

是否有可能做自定义文本? 如果是的话谁能告诉我该怎么办呢?

提前致谢。

编辑

我已经找到了一个暂时的解决办法,我在发布以下内容:

private TextView getActionModeCloseTextView() {
    // ABS 4.0 defines action mode close button text only for "large" layouts
    if ((getResources().getConfiguration().screenLayout & 
        Configuration.SCREENLAYOUT_SIZE_MASK) == 
        Configuration.SCREENLAYOUT_SIZE_LARGE) 
    {
        // retrieves the LinearLayout containing the action mode close button text
        LinearLayout action_mode_close_button =
            (LinearLayout) getActivity().findViewById(R.id.abs__action_mode_close_button);
        // if found, returns its last child 
        // (in ABS 4.0 there is no other way to refer to it, 
        // since it doesn't have an id nor a tag)
        if (action_mode_close_button != null) return (TextView)
            action_mode_close_button.getChildAt(action_mode_close_button.getChildCount() - 1);
    }
    return null;
}

这就是我想出的方法。 请注意 ,它严重依赖于结构abs__action_mode_close_item.xml ABS 4.0。

这适用于我的情况,但是,正如你所看到的,它不能被认为是充分满足它提升到一个真正的“答案”,这就是为什么我只能编辑我以前的帖子。

希望帮助别人,但我也希望有人可以共享一个更好的和更清洁的解决方案。

Answer 1:

您可以使用一个主题来覆盖默认图标:

    <item name="actionModeCloseDrawable">@drawable/navigation_back</item>
    <item name="android:actionModeCloseDrawable">@drawable/navigation_back</item>


Answer 2:

我编辑从PacificSky代码,以便能够定制关闭按钮的颜色和字体大小,无论是在预ICS和> ICS。

我创建了一个名为方法customizeActionModeCloseButton

private void customizeActionModeCloseButton() {
      int buttonId = Resources.getSystem().getIdentifier("action_mode_close_button", "id", "android");    
      View v = getGSActivity().findViewById(buttonId);
      if (v == null) {
         buttonId = R.id.abs__action_mode_close_button;
         v = getGSActivity().findViewById(buttonId);
      }
      if (v == null)
         return;
      LinearLayout ll = (LinearLayout) v;
      if (ll.getChildCount() > 1 && ll.getChildAt(1) != null) {
         TextView tv = (TextView) ll.getChildAt(1);
         tv.setText(R.string.close_action_mode);
         tv.setTextColor(getResources().getColor(R.color.white));
         tv.setTextSize(18);
      }
   }

我这样称呼它只是调用后startActionMode()

public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
   actionMode = getActivity().startActionMode(this);
   customizeActionModeCloseButton();
   return true;
}


Answer 3:

它已经有一段时间,但这里有一个略少哈克的解决方案 - 把它在那里为后人。

为Android版本<ICS

把下面的行应用程序的的strings.xml:

<string name="abs__action_mode_done">Cancel</string>

这将覆盖的TextView的(在ActionBarSherlock定义/ RES /布局大/ abs__action_mode_close_item.xml)安卓文本属性。

为Android ICS版本及以上

本机动作条功能上使用ICS和起来。 你需要找到并覆盖以完成按钮相关的字符串,使用下面的代码:

int buttonId = Resources.getSystem().getIdentifier("action_mode_close_button", "id", "android");
if (buttonId != 0)
{
    View v = findViewById(buttonId);
    if (v != null)
    {
        LinearLayout ll = (LinearLayout)v;
        View child = ll.getChildAt(1);
        if (child != null)
        {
            TextView tv = (TextView)child;
            tv.setText(R.string.cancel);
        }
    }
}


Answer 4:

感谢PacificSky的答案。 这是我的情况非常有用。

事情在这里需要说明的是, findViewById(buttonId)可能返回null在某些情况下,如所谓的邻nCreateActionMode()函数,因为LinearLayout的ActionMode关闭按钮没有在那个时候我想初始化。

我想隐藏的动作模式关闭按钮,所以我只是sendEmptyMessageDelayedonCreateActionMode()过一会儿给PacificSky的200毫秒。 这个对我有用。



Answer 5:

这是我用Java代码的方法:

private void customizeActionModeCloseButton(String title, int iconID) {
          int buttonId = Resources.getSystem().getIdentifier("action_mode_close_button", "id", "android");    
          View v = findViewById(buttonId);
          if (v == null) {
             buttonId = R.id.abs__action_mode_close_button;
             v = findViewById(buttonId);
          }
          if (v == null)
             return;
          LinearLayout ll = (LinearLayout) v;
          if (ll.getChildCount() > 1 && ll.getChildAt(1) != null) {
             //custom icon
             ImageView img = (ImageView) ll.getChildAt(0);
             img.setImageResource(iconID);
             //custom text
             TextView tv = (TextView) ll.getChildAt(1);
             tv.setText(title);
             tv.setTextColor(Color.WHITE);
          }
       }


Answer 6:

com.actionbarsherlock.view.ActionMode contains方法:

setTitle

它是用来改变ActionBar中接近关闭图标文本。 ActionMode是你com.actionbarsherlock.view.ActionMode.Callback接口的实现方法可用,像onCreateActionMode。

你可以做的 - 是保存传入ActionMode参考,并使用它以后更改标题为你喜欢。 或者,如果它不是动态的 - 你可以设置在与onCreateActionMode你不变。



文章来源: ActionBarSherlock (ABS): how to customize the text of action mode close item?