Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
tolya1095
10 / 7 / 1
Регистрация: 12.10.2012
Сообщений: 158
#1

Реализация меню требует API level 9, а actionbar-11. Что выбрать? - Программирование Android

12.01.2014, 20:09. Просмотров 1534. Ответов 12
Метки нет (Все метки)

Реализация меню требует API level 9, а actionbar - 11.
Разрываюсь на части из-за того, что не могу выбрать. Если реализовать менюшку, то довольны будут пользователи версии андроид 2.3, но будут жаловаться планшетники с 3.0, а если запилить actionbar, то будет ситуация наоборот. Есть ли золотая середина в данной ситуации?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2014, 20:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализация меню требует API level 9, а actionbar-11. Что выбрать? (Программирование Android):

API level 19 downgrade to 17 - Программирование Android
Приветствую. Решил опустить лвл апи до 17. Выдает ошибку В поиске только пишут про версию tools. заменил в grable версию...

Как изменить level api приложения - Программирование Android
Всем привет! Создал apk, установил, но приложение выкидывает. Поискал в инете, говорят что проблема в level api. Как его можно поменять?...

Прочитать meta-data при API level 9 - Программирование Android
Пробовал читать через Bundle.getString, сначала вылетала ошибка в коде, потом как-то прошло без ошибки, но когда открываю apk на телефоне c...

Скрыть вертикальное троеточие (Setting) в ActionBar. API 8 - Программирование Android
Как сделать ? подскажите... Так чтобы кнопка "MENU" осталась работать. Спасибо.

Свайп меню actionbar - Программирование Android
есть код класса main public class main extends ActionBarActivity { String Log_Tag = "Main.java"; private...

Не отображается пункт меню в ActionBar - Программирование Android
Приветствую, Сделал меню <menu xmlns:android="http://schemas.android.com/apk/res/android" ...

12
dr_yand
156 / 138 / 6
Регистрация: 13.03.2013
Сообщений: 321
Записей в блоге: 3
12.01.2014, 20:19 #2
Можно использовать пакет обратной совместимости
https://developer.android.com/refere...rActivity.html
1
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
12.01.2014, 20:23 #3
Есть такая штука называется Support Library, она позволит отобразить ActionBar даже на старых версиях андроида. Или есть еще специальная библиотека "sherlock action bar", я её юзал как-то раз.
1
tolya1095
10 / 7 / 1
Регистрация: 12.10.2012
Сообщений: 158
13.01.2014, 10:33  [ТС] #4
Решил попробовать Support Library через урок на хабрахабр. Проделал всё по инструкции до слов "Запускаем приложение и видим наш ActionBar:". Ошибку выдает main.xml. Ему не нравятся строки с "sabd:showAsAction=". Я выполнил Project->Clean и запустил на собственном устройстве. Вылетел с ошибкой, а в LogCat заметил строку: "android.view.InflateException: Binary XML file line #2: Error inflating class menu".
Сам main.xml у меня выглядит так:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:sabd="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="always" />
    <item
        android:id="@+id/action_item_1"
        android:title="@string/action_item_1"
        android:icon="@android:drawable/ic_menu_delete"
        sabd:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_item_2"
        android:title="@string/action_item_2"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="ifRoom|withText" />
    <item
        android:id="@+id/action_item_3"
        android:title="@string/action_item_3"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="never" />
</menu>

MainActivity:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
 
public class MainActivity extends ActionBarActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Log.d("MENU", "Cliced MenuItem is " + item.getTitle());
        return super.onOptionsItemSelected(item);
    }
}

Манифест:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.supportactionbardemo"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.supportactionbardemo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>

Отличается мой от оригинала статьи тем, что в xml прописал строку первую с "encoding" и в MainActivity добавил импорт, ну и еще минимальная версия не 7, а 8.

Добавлено через 4 часа 11 минут
Даже приложение из 107 урока при использовании библиотек из урока не запускается на 4.0.4
0
Alex Andro
5 / 5 / 0
Регистрация: 12.01.2014
Сообщений: 12
13.01.2014, 19:53 #5
Вы точно прописали в файле стилей тему AppCompat, а не стандартную? Если нет, то приложение вылетит. Покажите файл res/values/styles.xml. У меня самого всё это удачно получилось.
1
tolya1095
10 / 7 / 1
Регистрация: 12.10.2012
Сообщений: 158
14.01.2014, 20:28  [ТС] #6
Цитата Сообщение от Alex Andro Посмотреть сообщение
Вы точно прописали в файле стилей тему AppCompat, а не стандартную? Если нет, то приложение вылетит. Покажите файл res/values/styles.xml. У меня самого всё это удачно получилось.
Я заново проект начал по инструкции делать. Постарался без самодеятельности(в манифесте AppThem заменил на AppBaseThem и в MainActivity добавил импорты, которые отсутствовали; их можно просмотреть все ниже), но вылеты остались.

Я выложу все, что имеет значимость:

MainActivity.java:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.habrahabr.sabd;
 
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
 
public class MainActivity extends ActionBarActivity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Log.d("MENU", "Cliced MenuItem is " + item.getTitle());
        return super.onOptionsItemSelected(item);
    }
}


main.xml:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:sabd="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="always" />
    <item
        android:id="@+id/action_item_1"
        android:title="@string/action_item_1"
        android:icon="@android:drawable/ic_menu_delete"
        sabd:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_item_2"
        android:title="@string/action_item_2"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="ifRoom|withText" />
    <item
        android:id="@+id/action_item_3"
        android:title="@string/action_item_3"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="never" />
</menu>


strings.xml:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <string name="app_name">SupportActionBarDemo</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_item_1">Item 1</string>
    <string name="action_item_2">Item 2</string>
    <string name="action_item_3">Item 3</string>
 
</resources>


styles.xml:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<resources>
 
    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light" >
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>
 
    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>
 
</resources>


styles.xml(v11):
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
<resources>
 
    <!--
        Base application theme for API 11+. This theme completely replaces
        AppBaseTheme from res/values/styles.xml on API 11+ devices.
    -->
    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light" >
        <!-- API 11 theme customizations can go here. -->
    </style>
 
</resources>


styles.xml(v14):
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
<resources>
 
    <!--
        Base application theme for API 14+. This theme completely replaces
        AppBaseTheme from BOTH res/values/styles.xml and
        res/values-v11/styles.xml on API 14+ devices.
    -->
    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light" >
        <!-- API 14 theme customizations can go here. -->
    </style>
 
</resources>


AndroidManifest.xml:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.habrahabr.sabd"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="18" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppBaseTheme" >
        <activity
            android:name="com.habrahabr.sabd.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>


Если уж и до такого дошло, могу всю папку скинуть с проектом =)

Добавлено через 1 час 46 минут
Проставил в MainActivity логи.
Вылет начинается с "setContentView(R.layout.main);". Никто и не сомневался, похоже
2 варианта:
1) Кривые руки, что даже библиотеку установить не смог правильно;
2) Разучился читать.

Добавлено через 20 часов 7 минут
Попробую установить все с нуля на другом ПК под XP. Может, библиотеки какие удалил...
0
Alex Andro
5 / 5 / 0
Регистрация: 12.01.2014
Сообщений: 12
14.01.2014, 20:37 #7
Пришлите весь проект. Если смогу - посмотрю и исправлю. Скорее всего библиотека неправильно прикреплена.

Добавлено через 6 минут
Вы не показали файл layout. Скорее всего, судя по логу ошибка именно там.
1
tolya1095
10 / 7 / 1
Регистрация: 12.10.2012
Сообщений: 158
14.01.2014, 21:39  [ТС] #8
Цитата Сообщение от Alex Andro Посмотреть сообщение
Пришлите весь проект. Если смогу - посмотрю и исправлю. Скорее всего библиотека неправильно прикреплена.

Добавлено через 6 минут
Вы не показали файл layout. Скорее всего, судя по логу ошибка именно там.
Файл layout? Где он находиться должен? Я знаю только каталог
0
Alex Andro
5 / 5 / 0
Регистрация: 12.01.2014
Сообщений: 12
14.01.2014, 21:41 #9
Цитата Сообщение от tolya1095 Посмотреть сообщение
Файл layout? Где он находиться должен? Я знаю только каталог
Ну вернее покажите main.xml из этого каталога.
1
tolya1095
10 / 7 / 1
Регистрация: 12.10.2012
Сообщений: 158
14.01.2014, 21:46  [ТС] #10
Я его выше указывал, но похоже, что он не должен так выглядеть, исходя из вашей реакции
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:sabd="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="always" />
    <item
        android:id="@+id/action_item_1"
        android:title="@string/action_item_1"
        android:icon="@android:drawable/ic_menu_delete"
        sabd:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_item_2"
        android:title="@string/action_item_2"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="ifRoom|withText" />
    <item
        android:id="@+id/action_item_3"
        android:title="@string/action_item_3"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="never" />
</menu>
0
tolya1095
10 / 7 / 1
Регистрация: 12.10.2012
Сообщений: 158
14.01.2014, 21:50  [ТС] #11
SupportActionBarDemo.rar
Вот архивчик с проектом. Проект с библиотекой тоже нужен?
0
Alex Andro
5 / 5 / 0
Регистрация: 12.01.2014
Сообщений: 12
14.01.2014, 22:03 #12
Цитата Сообщение от tolya1095 Посмотреть сообщение
Я его выше указывал, но похоже, что он не должен так выглядеть, исходя из вашей реакции
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:sabd="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="always" />
    <item
        android:id="@+id/action_item_1"
        android:title="@string/action_item_1"
        android:icon="@android:drawable/ic_menu_delete"
        sabd:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_item_2"
        android:title="@string/action_item_2"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="ifRoom|withText" />
    <item
        android:id="@+id/action_item_3"
        android:title="@string/action_item_3"
        android:icon="@android:drawable/ic_menu_add"
        sabd:showAsAction="never" />
</menu>
Именно так. Я даже и не подумал, что это он. Тот файл, который показали Вы, должен находиться в каталоге res/menu, а не layout. Layout - это разметка, внешний вид программы, а Вас почему-то там меню. В этом и вся глупая ошибка. Файл разметки должен выглядеть наподобие этого:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main" >
 
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:onClick="onClick"
        android:text="Кнопка" />
 
</RelativeLayout>
Получается то, что показали Вы, должно быть в файле res/menu/main.xml, а в res/layout/main.xml попробуйте прописать мой код (на экране устройства будет кнопка). И тогда всё получится!

Добавлено через 6 минут
Проекта пока не надо, попробуйте сделать то, что я посоветовал.
1
tolya1095
10 / 7 / 1
Регистрация: 12.10.2012
Сообщений: 158
14.01.2014, 22:06  [ТС] #13
я ранее задавался вопросом типа "зачем эта папку menu" вообще нужна. Спасибо. Завтра буду кодить по полной
Кстати, приложение заработало
0
14.01.2014, 22:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2014, 22:06
Привет! Вот еще темы с ответами:

ActionBar, анимированная иконка меню - Программирование Android
Здравствуйте, необходимо добавить анимированное изображение левее иконки меню в ActionBar`е. Подскажите, пожалуйста, в каком формате...

Нажатие на элемент меню в Actionbar - Программирование Android
Доброго дня! Приделал через appbar actionbar к активити. Вот xml: &lt;android.support.design.widget.AppBarLayout ...

8-й Drupal требует обновить мою PHP 5.4 - что выбрать - 5.6 или 7? - PHP
Здравствуйте, решил поставить 8-ку Drupal, а у него внезапно в требованиях: то есть надо мою PHP 5.4 апгрейдить Но на что...

Как изменить API Level? - Delphi FireMonkey
Есть проект, в SDK выставлен походу 17 level, как изменить, чтобы откомпилить под другие версии? Добавлено через 2 минуты...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.