Будем добавлять в модуль app(впоследствии изменится файл build.gradle модуля app – в блок dependencies добавится соответствующая строка) File->ProjectStrusture->App-dependencies->жмем плюс->library dependency->выбираем зависимость, подключаем При изменении проекта в разделе Project синхронизация проходит автоматом. Чтобы инициировать вручную – Tools->Android->Sync Project with Gr..
Category : android
Проблема то делать, если на один объект GUI(например View) нужно повесить несколько слушателей(Listener)? В Обычных, десктопных java-приложениях со стандартными пакетами, проблем с этим не возникает. Но, в Android, к сожалению, прикрепить к одной View больше одного слушателя – невозможно. Вернее, это возможно, но перехватывать события, будет лишь последний из прикрепленных к View слушателей. Так что ..
оригинал Система сборки Android собирает ресурсы приложения и исходный код, упаковывает их в APK файлы, которые вы можете тестировать, разворачивать, подписывать и распространять. Android Studio использует Gradle, продвинутый инструмент сборки, для автоматизации и управления процессом сборки, тем самым позволяя определить гибкие настройки конфигурации под разные проекты. Каждая конфигурация сборки может определять собственный набор кода и ..
оригинал здесь ссылка=связь=reference Возьмем следующий код:
1 2 3 4 5 6 7 8 9 |
public class SampleActivity extends Activity { private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { // ... } }; } |
Хотя это и может показаться неочевидным, такой код вызывает существенную утечку памяти. Android Lint выдает следующее предупреждение: In Android, Handler classes should be static or leaks might occur. Но где именно происходит утечка? Давайте попробуем определить проблему исходя из имеющихся фактов: Когда впервые стартует андроид-приложение, фреймворк создает объект ..
статья Simon Codrington – Custom Android Layouts with Your Own ArrayAdapter В Android API есть целый набор различных лейаутов, подходящих под различные нужды приложений. Один из самых простых способов донести информацию о ряде каких-то объектов – компонент ListView. Этот компонент создает простую прокручиваемую область некоего набора данных. Самый большой плюс ListView – это настраиваемость, элемент ..
В этой записи, я опишу некий хак, который позволяет разместить в прокручивающемся Scrollview, GridView или ListView Рассмотрим пример для GridView Итак, решение простое. Создаем класс ExpandableHeightGridView расширенный от GridView
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 55 56 57 |
package xx.xxx.xx.view; import android.content.Context; import android.util.AttributeSet; import android.view.ViewGroup; import android.widget.GridView; public class ExpandableHeightGridView extends GridView { boolean expanded = false; public ExpandableHeightGridView(Context context) { super(context); } public ExpandableHeightGridView(Context context, AttributeSet attrs) { super(context, attrs); } public ExpandableHeightGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public boolean isExpanded() { return expanded; } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // HACK! TAKE THAT ANDROID! if (isExpanded()) { // Calculate entire height by providing a very large height hint. // View.MEASURED_SIZE_MASK represents the largest height possible. int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); ViewGroup.LayoutParams params = getLayoutParams(); params.height = getMeasuredHeight(); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } public void setExpanded(boolean expanded) { this.expanded = expanded; } } |
Затем, в макете выводим соответствующий тег ExpandableHeightGridView
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 |
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:background="#324bb6" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="#35a035" android:layout_centerHorizontal="true"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="готово" android:id="@+id/somebut" /> <TextView android:layout_width="wrap_content" android:layout_height="240dp" android:text="sometxt" android:id="@+id/sometxt" /> <com.********.ExpandableHeightGridView android:id="@+id/myGridView" android:layout_width="match_parent" android:layout_height="wrap_content"> </com.*******.ExpandableHeightGridView> </LinearLayout> </ScrollView> |
Затем создаем объект, привязываем адаптер, и, главное, вызываем метод setExpanded(true)
1 2 3 4 5 |
mGridView = (ExpandableHeightGridView) getView().findViewById(R.id.myGridView); mGridView.setExpanded(true); SpotsAdapter adapter = new SpotsAdapter(getActivity(), R.layout.GridViewItem,params); mGridView.setAdapter(adapter); adapter.notifyDataSetChanged(); |
Где GridViewItem – шаблон виджета GridView. ..
Информация о распространении Операционных систем Андроид Три основных вида версий приложения Существует три вида версии приложения: Минимальная версия SDK(minSdkVersion) Операционная система не будет устанавливать приложение, если версия ОС будет ниже минимальной для приложения. (Таким образом мы отметаем все устройства со стареньким API) Целевая версия SDK(targetSdkVersion) Для какого уровня API создавалось приложение. Обычно указывают ..
Что такое Intent? Каким именно образом Intent участвует в связи между компонентами приложения? Когда активность вызывает startActivity, этот вызов передается в ОС, компоненту под названием ActivityManager, он в свою очередь, создает экземпляр Activity и вызывает его метод onCreate(). Отметим, что Intent – объект, используемый компонентом(бывают разные – Activity, Service, Broadcast Receiver, Content Provider) для взаимодействия ..
Quick Open Ctrl+Shift+N быстро открыть файл по имени Quick complete Ctrl+Shift+Enter автозавершение метода(например скобки фигурные довесит) просмотр всех выходных точек метода метода(например всех return) Ctrl+Shift+F7 навести на один из return-ов и зажать Ctrl+Shift+F7 найти по тексту в текущем файле Ctrl+F ищет вхождение строки, чтобы посмотреть варианты автозавершения – Ctrl+Space просмотр документами Ctrl+Q ищет вхождение строки, ..
просмотр исключений в LogCat Выведение трассировки стека самостоятельно, с помощью экземпляра исключения(не обязательно перехватывать исключение, для целей отладки можно создать исключение самостоятельно, чтобы вывести трассировку стека(порядок вызовов))
1 |
Log.d(TAG, "Updating question text for question #" + mCurrentIndex, new Exception());//выкидываем в лог трассировку стека с помощью создания нового экземпляра исключения |
прибегать к этому методу стоит, когда есть какая-то ошибка поведения программы, которая не перехватывается исключениями. Программа работает без сбоев, но что-то работает неправильно. Что-то не вызывается, или ..