Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
JavaStarter
11 / 11 / 3
Регистрация: 14.05.2015
Сообщений: 52
#1

ActionView и ActionBar - Программирование Android

03.01.2016, 08:58. Просмотров 405. Ответов 7
Метки нет (Все метки)

Здравствуйте! Подскажите, пожалуйста, по задаче - необходимо при нажатии на кнопку Поиск на ActionBar вывести TextView с кнопкой Save, при нажатии на которую добавляется строка в ListView. Примерно понятно, но смущает следующая фраза в заднии - When you press the Add button, the action bar expands an action view that contains an Edit Text and a Button called "Save". Как это воспроизвести, уже 2 дня сижу, не могу сообразить(

Пока сделал только так:
http://i.imgsafe.org/a438791.jpg
То есть, не могу понять, как после нажатия книпки + вывесть в ActionBar TextView и кнопку Save.


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class MainActivity extends AppCompatActivity {
 
    EditText et;
    Button btSave;
    Button btDelete;
    ListView listView;
    ArrayList<String> arraylist;
    ArrayAdapter<String> adapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        arraylist = new ArrayList<String>();
 
        et = (EditText) findViewById(R.id.editText);
        btSave = (Button) findViewById(R.id.buttonAdd);
 
        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arraylist);
        listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);
 
        btSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                arraylist.add(et.getText().toString());
                adapter.notifyDataSetChanged();
            }
        });
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.main_activity_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
 
        switch (item.getItemId()){
            case R.id.add:
                Toast.makeText(getApplicationContext(), "Add was tapped", Toast.LENGTH_SHORT).show();
            case R.id.clear:
                arraylist.clear();
                adapter.notifyDataSetChanged();
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
Миниатюры
ActionView и ActionBar  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2016, 08:58     ActionView и ActionBar
Посмотрите здесь:

Не отображается иконка в ActionBar - Программирование Android
Ребят, такая проблема. Создал пустой проект. Воткнул в ресурсы файл иконки. В эскизном варианте он отображается, а при отладке что на...

Размер значков в ActionBar - Программирование Android
Подскажите пожалуйста, какие размеры значков должны быть в ActionBar? Сделал значки для всех разрешений размером: 144, 96, 72, 48 и 36. На...

ActionBar при < android 3 - Программирование Android
Добрый день. Скажу сразу, что я полный нуб в этой теме. Мне нужно использовать ActionBar на версиях андроид меньше 3. Я знаю, что для этого...

Добавление Actionbar в FragmentActivity - Программирование Android
Всем привет! Подскажите пожалуйста как добавить Actionbar в FragmentActivity.

Исчез ActionBar на Android 4.4.2 - Программирование Android
На устройстве Samsung SM-N7505 Android 4.4.2 не отображается ActionBar (На устройстве с Android 4.2.1 все норм) &lt;style name=&quot;AppTheme&quot;...

Вывод переменной в ActionBar - Программирование Android
Скажите, пожалуйста, возможен ли вывод из SharedPreferences числа в ActionBar? И как это сделать? Спасибо!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
03.01.2016, 11:19     ActionView и ActionBar #2
Давайте весь ОРИГИНАЛЬНЫЙ текст задания...
Pablito
2454 / 1899 / 590
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
03.01.2016, 15:21     ActionView и ActionBar #3
http://javapapers.com/android/androi...-bar-tutorial/
JavaStarter
11 / 11 / 3
Регистрация: 14.05.2015
Сообщений: 52
03.01.2016, 17:53  [ТС]     ActionView и ActionBar #4
Оригинальный текст:

The ActionBar has two buttons, and Add button that uses the Android Add icon, and a Delete button that uses the Android Delete icon. When you press the delete button, all items from the ListView are deleted. When you press the Add button, the action bar expands an action view that contains an Edit Text and a Button called "Save". When the save button is pressed, the contents of the EditText should be added as a new item in the ListView.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
03.01.2016, 18:47     ActionView и ActionBar #5
Я, честно сказать, не особо экспериментировал с ActionBar - сделал свои пункты, прилепил SearchView и на этом успокоился.
Но, читаем...
В ActionBar две "кнопки" - это просто пункты меню ActionBar - одна с иконкой Add, вторая - Delete.
С Delete всё понятно - нажал, отработал onOptionsItemSelected, где прописал очистку списка.
С Add немного сложнее - по нажатию должен раскрыться элемент, состоящий из поле ввода (Edit Text) и кнопка (Button) с текстом "Save".
По вводу и нажатию на Save в список нужно добавить значение поля ввода (Edit Text).

Для того, чтобы по нажатию раскрылся вышеуказанный элемент, читаем http://developer.android.com/trainin...ml#action-view и экспериментируем, выкладываем код сюда и дальше думаем, если что не получилось
JavaStarter
11 / 11 / 3
Регистрация: 14.05.2015
Сообщений: 52
03.01.2016, 22:16  [ТС]     ActionView и ActionBar #6
Да, с Delete всё понятно. С Add так понял, нужно изменить динамически(at runtime). Поискал, нашел чтото похожее:
При клике на Добавить выходит другое меню
http://i.imgsafe.org/52dfb54.jpg
http://i.imgsafe.org/540abb3.jpg
При клике на Х - возвращается назад. Не могу понять, как мне две крайние иконки заменить на TextView и Button?

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    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;
    }
 
    boolean canAddItem = false;
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Toast toast;
        if(item.getItemId() == R.id.action_addItem){
            invalidateOptionsMenu();
        }
        else{
            toast = Toast.makeText(this, item.getTitle()+" Clicked!", Toast.LENGTH_SHORT);
            toast.show();
        }
 
        return super.onOptionsItemSelected(item);
    }
 
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
 
        if(canAddItem){
            menu.getItem(0).setIcon(R.drawable.ic_action_content_clear);
 
            MenuItem mi = menu.add("New Item");
            mi.setIcon(R.drawable.ic_action_action_settings_power);
            mi.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
 
            MenuItem mi2 = menu.add("New Item");
            mi2.setIcon(R.drawable.ic_action_content_drafts);
            mi2.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
 
            canAddItem = false;
        }
        else{
            menu.getItem(0).setIcon(R.drawable.ic_action_content_add);
            canAddItem = true;
        }
 
        return super.onPrepareOptionsMenu(menu);
    }
 
}
menu.xml

XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_addItem"
        android:orderInCategory="100"
        app:showAsAction="always"
        android:icon="@drawable/ic_action_content_add"
        android:title="Add New Item"/>
 
</menu>
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
03.01.2016, 22:33     ActionView и ActionBar #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от JavaStarter Посмотреть сообщение
С Add так понял, нужно изменить динамически(at runtime). Поискал, нашел чтото похожее:
Ты прочитал ссылку, которую я тебе оставил?
Там же написано - нужно создать отдельный файл разметки (лэйаут), с этими TextEdit и Button.
Пусть он называется action_bar_add_item_layout.xml.
Дальше загоняешь его в аттрибут actionLayout для item (строка 6).

XML
1
2
3
4
5
6
7
<item
        android:id="@+id/action_addItem"
        android:orderInCategory="100"
        app:showAsAction="ifRoom|collapseActionView"
        android:icon="@drawable/ic_action_content_add"        
        android:actionLayout="@layout/action_bar_add_item_layout"
        android:title="Add New Item"/>
Также обрати внимание на пункт Responding to action view expansion по той же ссылке в особенности о super.onOptionsItemSelected() и дальше...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2016, 08:03     ActionView и ActionBar
Еще ссылки по теме:

Убрать иконку из ActionBar - Программирование Android
Добрый день! На некоторых версиях андроида кнопочка МЕНЮ выводится в ActionBAr автоматически... ...

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

Изменение цвета ActionBar - Программирование Android
Всем привет, столкнулся с такой проблемой при попытке изменить цвет ActionBar-а, использовал данный...

Кастомный заголовок ActionBar - Программирование Android
Увеличивая шрифт в заголовке ActionBar-а. public static void setActionBarTitle(Activity activity){ if(Build.VERSION.SDK_INT &gt;=...


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

Или воспользуйтесь поиском по форуму:
JavaStarter
11 / 11 / 3
Регистрация: 14.05.2015
Сообщений: 52
04.01.2016, 08:03  [ТС]     ActionView и ActionBar #8
Всё получилось, спасибо! Выкладывают скрин и код, может, кому-то еще понадобится)

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class MainActivity extends AppCompatActivity {
 
    ListView listView;
    ArrayList<String> arraylist;
    ArrayAdapter<String> adapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        arraylist = new ArrayList<String>();
 
        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arraylist);
        listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);
 
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        /** Create an option menu from res/menu/items.xml */
        getMenuInflater().inflate(R.menu.main_menu, menu);
 
        /** Get the action view of the menu item whose id is search */
        View v = (View) menu.findItem(R.id.action_submit).getActionView();
 
        /** Get the edit text from the action view */
        final EditText txtSearch = (EditText) v.findViewById(R.id.editText);
        final Button button = (Button) v.findViewById(R.id.buttonSave);
 
        /** Setting an action listener */
 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                arraylist.add(txtSearch.getText().toString());
                adapter.notifyDataSetChanged();
            }
        });
 
        MenuItem pinMenuItem = menu.findItem(R.id.delete_all);
 
        pinMenuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                arraylist.clear();
                adapter.notifyDataSetChanged();
                return true;
            }
        });
 
        return super.onCreateOptionsMenu(menu);
    }
}
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
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_submit"
        app:actionLayout="@layout/add_layout"
        app:showAsAction="ifRoom|collapseActionView"
        android:title="Add"
        android:icon="@drawable/ic_action_content_add"/>
 
    <item
        android:id="@+id/delete_all"
        android:title="Delete all"
        app:showAsAction="always"
        android:icon="@drawable/ic_action_action_delete"
        />
 
    <item
        app:showAsAction="always"
        android:icon="@drawable/ic_action_action_pageview"
        android:id="@+id/menu_item_search"
        android:actionViewClass="android.widget.SearchView"
        android:title="Search"
        android:iconifiedByDefault="true"/>
</menu>
add_layout:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true">
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_toRightOf="@+id/buttonSave"
        android:layout_toEndOf="@+id/buttonSave" />
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"
        android:id="@+id/buttonSave"
        android:layout_alignBottom="@+id/editText" />
 
</RelativeLayout>
Миниатюры
ActionView и ActionBar  
Yandex
Объявления
04.01.2016, 08:03     ActionView и ActionBar
Ответ Создать тему
Опции темы

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