Вызов getActionBar
возвращает null
. Это часто сообщалось, поэтому я включил в себя решения, которые другие использовали: My minSdkVersion=11
, у меня есть заголовок, и я getActionBar
после setContentView
. Кроме того, моя деятельность не является дочерней деятельностью.
setContentView(R.layout.main); // experiment with the ActionBar ActionBar actionBar = getActionBar(); actionBar.hide();
Устройство – Samsung Galaxy Tab 10.1 под управлением Android 3.2
Заранее благодарим за любые идеи или предложения!
Кажется, вам нужно запросить наличие Actionbar (! = Titlebar) либо через тему или через код ниже.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The Action Bar is a window feature. The feature must be requested // before setting a content view. Normally this is set automatically // by your Activity's theme in your manifest. The provided system // theme Theme.WithActionBar enables this for you. Use it as you would // use Theme.NoTitleBar. You can add an Action Bar to your own themes // by adding the element <item name="android:windowActionBar">true</item> // to your style definition. getWindow().requestFeature(Window.FEATURE_ACTION_BAR); setContentView(R.layout.main); // experiment with the ActionBar ActionBar actionBar = getActionBar(); actionBar.hide(); }
Код от [ здесь ]
Кажется, есть несколько условий, которые необходимо выполнить, чтобы это работало. Тот, который долгое время меня раздражал:
Убедитесь, что ваша активность расширяет Activity (NOT ActionBarActivity).
public class MagicActivity extends Activity
Убедитесь, что в манифесте приложения есть что-то вроде
<application ... android:theme="@android:style/Theme.Holo" >
И убедитесь, что ваш макет деятельности
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" .... android:theme="@android:style/Theme.WithActionBar" >
-Отметка
Кажется, я решил все свои ошибки, переключив getActionBar () с помощью getSupportActionBar () . Я пробовал разные темы, добавляя getWindow (). RequestFeature (Window.FEATURE_ACTION_BAR); , Убедитесь, что setContentView (view) был первым и все другие вещи, которые были замечены раньше.
Для панели действий требуется тема или активность с названием приложения. Убедитесь, что вы не указали свое приложение или деятельность как Theme.NOTITLE.
<application android:name="com.xxx.yyy.Application" android:debuggable="false" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code <activity android:name="com.xxx.yyy.Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code android:windowSoftInputMode="adjustResize|stateHidden" >
Размер<application android:name="com.xxx.yyy.Application" android:debuggable="false" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code <activity android:name="com.xxx.yyy.Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code android:windowSoftInputMode="adjustResize|stateHidden" >
Я пытался получить ActionBar изнутри фрагмента внутри ActionBarActivity, используя библиотеку поддержки. Я должен был сделать это:
ActionBarActivity actionBarActivity = (ActionBarActivity)getActivity(); ActionBar actionBar = actionBarActivity.getSupportActionBar();
Мой следующий квест – выяснить, как сделать этот общий. Например, этот код выглядит грязным, потому что он требует, чтобы мой Фрагмент знал, что он используется ActionBarActivity и использует библиотеку поддержки. Я думаю, что это должен быть метод, который проверяет getActivity().getActionBar()
сначала следует за кодом выше, захватывая ClassCastException, если родительская активность не является ActionBarActivity.
Это устранило мою проблему:
android.support.v7.app.ActionBar ab = getSupportActionBar();
Если вы создадите проект приложения для API14 или выше, появится папка значений-14. Убедитесь, что папка существует, и она имеет файл styles.xml с:
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <!-- API 14 theme customizations can go here. --> </style>
Я получил эту ошибку, потому что я создал новый проект, и мне не нужны какие-либо дополнительные папки значений в моем проекте, поэтому я просто сохранил папку значений и удалил папки значений-v11 и values-v14. Но, по-видимому, тема по умолчанию для API14 и выше требует ActionBar в родительском теге XML, если вы хотите использовать ActionBar. Поэтому я предположил, что могу сделать это неправильно! Надеюсь, это помогает кому-то. Скорее всего, вы разрешите свои проблемы с вышеупомянутыми ответами.
Реальный ответ должен быть сочетанием как @zapl, так и @Himanshu Virmani
Для Android Manifest:
<application android:name="com.xxx.yyy.Application" android:debuggable="false" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code <activity android:name="com.xxx.yyy.Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code android:windowSoftInputMode="adjustResize|stateHidden" >
Размер<application android:name="com.xxx.yyy.Application" android:debuggable="false" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code <activity android:name="com.xxx.yyy.Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code android:windowSoftInputMode="adjustResize|stateHidden" >
Для деятельности:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The Action Bar is a window feature. The feature must be requested // before setting a content view. Normally this is set automatically // by your Activity's theme in your manifest. The provided system // theme Theme.WithActionBar enables this for you. Use it as you would // use Theme.NoTitleBar. You can add an Action Bar to your own themes // by adding the element <item name="android:windowActionBar">true</item> // to your style definition. getWindow().requestFeature(Window.FEATURE_ACTION_BAR); setContentView(R.layout.activity_main); // Hide the status bar for Android 4.1 and higher View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.hide(); }
Убедитесь, что вы расширили ACTIONBACACTIVITY, а не ACTIVITY. Это должно решить вашу проблему.
Просто измените две вещи: 1) манифест редактирования файла android: theme = "@ android: style / Theme.Holo">
2) Fragment file add android: theme = "@ android: style / Theme.WithActionBar"
Измените порядок системного запроса:
@Override protected void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTION_BAR); super.onCreate(savedInstanceState); setContentView(R.layout.main); // experiment with the ActionBar ActionBar actionBar = getActionBar(); actionBar.hide(); }
В случае, если вы разрабатываете приложение с таргетингом на sdk> = 14, и вы расширяете AppCompat для поддержки темы Material в предыдущих версиях. Если вы хотите скрыть элементы из панели действий, как кнопка «Назад», вам нужно сделать это: в своей деятельности (не в классе фрагмента). Если вы будете использовать getActionBar (), он вернет значение null. Как в теме Appsupport getSupportAcionBar () вернет панель действий.
Вот ссылка, если вы хотите следовать из DevByte
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); getSupportActionBar().setDisplayHomeAsUpEnabled(false); }