Как получить представление ActionBar?

Я использую библиотеку Showcase для объяснения моей функции приложения для пользователя. В какой-то момент мне нужно сгладить весь ActionBar чтобы представить пользователю еще одну функцию.

Для этого я использую setAlpha(float num) класса View . И поэтому для этого мне нужно получить фактический экземпляр представления моего ActionBar

И, кстати, я использую библиотеку support-7-appcompat которая дает поддержку ActionBar для более старых систем.

ОБНОВИТЬ:

Тем временем я нашел этот вариант, если вы настроили пользовательский вид и добавили его в ActionBar используя:

 getSupportActionBar().setCustomView(v); 

Затем, чтобы получить View о ActionBar вы можете сделать следующее:

 (View) activity.getSupportActionBar().getCustomView().getParent().getParent() 

Но я думаю, что должен быть более простой и простой способ сделать это.

Кто-нибудь знает это?

Заранее спасибо.

Solutions Collecting From Web of "Как получить представление ActionBar?"

Ага. Вы можете получить представление, используя эту функцию:

 public View getActionBarView() { Window window = getWindow(); View v = window.getDecorView(); int resId = getResources().getIdentifier("action_bar_container", "id", "android"); return v.findViewById(resId); } 

Практически так, как это работает, контейнер контейнера использует id android.R.id.action_bar_container , но этот идентификатор не является общедоступным. Поэтому мы используем getIdentifier () для извлечения этого идентификатора, а затем все просто.

Я думаю, что это решение более полно, как для нормальной деятельности, так и для ActionBarActivity.

Он также обрабатывает случай, когда панель действий была установлена ​​с помощью панели инструментов, но вам нужно реализовать ее в созданной вами деятельности:

 public static View getActionBarView(final Activity activity) { if (activity instanceof IToolbarHolder) return ((IToolbarHolder) activity).getToolbar(); final String packageName = activity instanceof ActionBarActivity ? activity.getPackageName() : "android"; final int resId = activity.getResources().getIdentifier("action_bar_container", "id", packageName); final View view = activity.findViewById(resId); return view; } public interface IToolbarHolder { public android.support.v7.widget.Toolbar getToolbar(); } 

Я немного поработал над кодом @idunnololz для поддержки ActionBarSherlock

 private View getActionBarView() { int actionViewResId = 0; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { actionViewResId = getResources().getIdentifier( "abs__action_bar_container", "id", getPackageName()); } else { actionViewResId = Resources.getSystem().getIdentifier( "action_bar_container", "id", "android"); } if (actionViewResId > 0) { return this.findViewById(actionViewResId); } return null; } 

Для support.v7 getActionBarView (ById) не работает.

Это возвращает панель инструментов ActionBar:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewGroup actionBar = getActionBar(getWindow().getDecorView()); TextView actionBarTitle = (TextView) actionBar.getChildAt(0); } public ViewGroup getActionBar(View view) { try { if (view instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup) view; if (viewGroup instanceof android.support.v7.widget.Toolbar) { return viewGroup; } for (int i = 0; i < viewGroup.getChildCount(); i++) { ViewGroup actionBar = getActionBar(viewGroup.getChildAt(i)); if (actionBar != null) { return actionBar; } } } } catch (Exception e) { } return null; } 

Это позволит получить Toolbar / ActionBar при использовании собственного ActionBar , собственной Toolbar из appcompat или собственной Toolbar на Lollipop:

 public static ViewGroup findActionBar(Activity activity) { int id = activity.getResources().getIdentifier("action_bar", "id", "android"); ViewGroup actionBar = null; if (id != 0) { actionBar = (ViewGroup) activity.findViewById(id); } if (actionBar == null) { actionBar = findToolbar((ViewGroup) activity.findViewById(android.R.id.content) .getRootView()); } return actionBar; } private static ViewGroup findToolbar(ViewGroup viewGroup) { ViewGroup toolbar = null; for (int i = 0, len = viewGroup.getChildCount(); i < len; i++) { View view = viewGroup.getChildAt(i); if (view.getClass().getName().equals("android.support.v7.widget.Toolbar") || view.getClass().getName().equals("android.widget.Toolbar")) { toolbar = (ViewGroup) view; } else if (view instanceof ViewGroup) { toolbar = findToolbar((ViewGroup) view); } if (toolbar != null) { break; } } return toolbar; }